Reflection Caching?

Consider caching the reflected objects.
We haven't looked into the performance of the reflection calls (e.g. GetConstructors or GetProperties), could it be improved?
Maybe a dictionary lookup instance?
var cache = new Dictionary<Type, PropertyInfo[]>();

I have a load of code already written that will cover caching so don't start anything.

Cool! :sunglasses:

@JimBobSquarePants Is this covered off in PR #19? Can I close this issue?

Yeah I'd say so.


V0.1

Adds example Procfile
Adds Uniswap as a reference venue
Adds AMMOUTBID as a usable strategy

Remaining items

[x]  Right now, univ3 is assumed and when to user univ2 is not really wired up but functionality is there
[x]  Need to add functionality on how much to actually outbid the UNI pair and configurable performance
[x]  Testing and verification

This is working well, note that in the future there could be times we can avoid an edit order call assuming the order we want to edit has the same exact values and sufficient time left on the order


Can't produce Shadow

I tried to cast the shadow of my object on a cube, but it doesn't work.
MaterialFactory.makeOpaqueWithColor(context, Color(android.graphics.Color.WHITE))
                .thenAccept { material ->
                    val size = Vector3(3f, 0.1f, 3f)
                    val center = Vector3(0f,-0.1f, 0f)
                    planeRender = ShapeFactory.makeCube(size, center, material)
                }

sNode.renderable = planeRender
 sNode.localPosition = Vector3(0.0f, 0.0f, 0.0f)

fNode.addChild(node)
 fNode.addChild(sNode)

Have you tried calling the method setShadowCaster with true after the creation?

I did. What do u think is the best practice of making shadow, create a cube underneath? Cause these's no shadow if no planes detected.

I would expect renderable.setShadowReciever(true)  to have an object that can catch shadows.


Add Koa verify key middleware

This Pull Request adds a Koa verify key middleware implementation that's based on the already existing Express verify key middleware with minor changes to make it work with Koa.
I decided to add this since I personally prefer using Koa instead of Express and I bet I'm not alone with this.
Due to adding a new middleware, I also made the decision to refactor verifyKeyMiddleware to verifyKeyExpressMiddleware to make it easier to tell the two middlewares (and potentially future ones) apart. This also results in a breaking change hence I've bumped the version to 1.2.0.

Just noticed that the Koa implementation doesn't even seem to work right now, that's why I converted the PR to a draft PR. I'll try to fix it and then make this a normal PR again.

Alright, now it actually works!

FWIW this is a breaking change since the export is now a different name; not sure if it matters due to how new this library is but just my two cents.

Ok, turns out it still doesn't work properly (at least on my end). I only tested it with interactions which seemed to work fine but commands still don't seem to work. Guess back to bug fixing.

Okay, now I'm<PHONE_NUMBER>0000000000000000000000000000000000000000000000000% sure it works. I tested it multiple times with multiple different commands and it works now. Super sorry for the commit spam, I'll be less dumb next time :facepalm:

Quite a long time but just a few remarks:

The version should be 3.0.0 since the current one is 2.1.0. But eventually change this in case there will be more updates before this PR gets merged.
You'll need to update the samples, specifically the message_components once to include the change of the function.
The tests should also be updated (the file names, functions basically). Furthermore, could tests be implemented for the Koa middlewares?

Otherwise, looking good. 😄

Greetings, and thanks for the PR!  At this stage, the codebase has significantly moved.  Generally I'd like to move this library away from web server specific integrations, so this probably isn't something we're going to consider right now.


feature: Add support for batch execution

Issue #, if available:
Description of changes:
Added methods to support running multiple tasks in parallel.
Testing done:
Merge Checklist
Put an x in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your pull request.
General

[x] I have read the CONTRIBUTING doc
[x] I used the commit message format described in CONTRIBUTING
[x] I have updated any necessary documentation, including READMEs and API docs (if appropriate)

Tests

[x] I have added tests that prove my fix is effective or that my feature works (if appropriate)
[x] I have checked that my tests are not configured for a specific region or account (if appropriate)

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Can one of you give me a brief explanation--from a customer perspective--use case and benefits--when would I want to use this feature? Is it a way to launch tasks in parallel? Does it make tasks run faster? Is it something the customer has to set up using these scripts or notebooks? Is it available on all devices for Braket, or which ones? Thank you very much, I am sorry to be so uninformed, I am just getting up to speed on all of your team's endeavors, and turning right around to try to explain them for our customers. You can send email if you don't want to reply here. Many thanks!

Yep, it's a way to launch tasks in parallel. For background, let's say you want to calculate something that requires 10 tasks, but the circuits in the tasks are independent of one another. You shouldn't have to wait for one task to be created before you move on the the next on. This is available on all devices, but most useful for the simulator, which can also run things concurrently.

Ok, so this feature is independent of device?  It is actually a NEW feature of Braket we are releasing with others on 12/7?

Looks good to me, thanks!


Use OTel prescribed way of recording exception and span status

Hi again @justindsmith!
Even though the preview of Prisma tracing is done, we are still using your lovely library so I thought I'd do an RFC as a PR. I hope you don't mind that I didn't create an issue for it.
The crux of this PR is that I would like the "x-ray" exporter to pick up exceptions and error that happen in the DB spans.
Currently the exporter decides if there was a problem if either:

There are OTel exceptions in the spans
Using the OpenCensus model of checking the http_status_text attributes (this is my very quick and poor read of the code)

Seeing as we are using an OTel client, I thought it would be useful to use the functions provided by the client to record the status and the exception.
The span status is now recorded in the special Status field.
The exception is now recorded as an Event, which has it's own semantic convention in the OTel spec.
EDIT: as discussed I have re-added the previous exception instrumentation to backwards compatibility.
Using ConsoleSpanExporter I can show the before and after of this change.
Before
{
  traceId: '630ea5e26005831465a88e7b649768c2',
  parentId: 'd24289ed385cf47f',
  name: '$queryRaw',
  id: '59e5b6b15574f6d0',
  kind: 2,
  timestamp:<PHONE_NUMBER>991963,
  duration: 8625,
  attributes: {
    component: 'prisma',
    'db.statement': 'SELECT client_addr, query, state FROM pg_stat_activity;',
    'db.system': 'postgresql',
    error: true,
    'exception.message': '\n' +
      'Invalid `prisma.$queryRaw()` invocation:\n' +
      '\n' +
      '\n' +
      "  Can't reach database server at `localhost`:`5432`\n" +
      '\n' +
      'Please make sure your database server is running at `localhost`:`5432`.',
    'exception.stacktrace': 'Error: \n' +
      'Invalid `prisma.$queryRaw()` invocation:\n' +
      '\n' +
      '\n' +
      "  Can't reach database server at `localhost`:`5432`\n" +
      '\n' +
      'Please make sure your database server is running at `localhost`:`5432`.\n' +
      '    at RequestHandler.request (/Users/jmackie/work/misc_tools/my_app/node_modules/@prisma/client/runtime/index.js:49028:15)\n' +
      '    at async Proxy._request (/Users/jmackie/work/misc_tools/my_app/node_modules/@prisma/client/runtime/index.js:49919:18)'
  },
  status: { code: 0 },
  events: [],
  links: []
}

After
{
  traceId: '63103029aef3058990fbb0bf16926451',
  parentId: '0be65fc261a29d90',
  name: '$queryRaw',
  id: '7c53adf4bbb14ba2',
  kind: 2,
  timestamp:<PHONE_NUMBER>301407,
  duration: 9414,
  attributes: {
    component: 'prisma',
    'db.statement': 'SELECT client_addr, query, state FROM pg_stat_activity;',
    'db.system': 'postgresql',
    error: true,
    'exception.message': '\n' +
      'Invalid `prisma.$queryRaw()` invocation:\n' +
      '\n' +
      '\n' +
      "  Can't reach database server at `localhost`:`5432`\n" +
      '\n' +
      'Please make sure your database server is running at `localhost`:`5432`.',
    'exception.stacktrace': 'Error: \n' +
      'Invalid `prisma.$queryRaw()` invocation:\n' +
      '\n' +
      '\n' +
      "  Can't reach database server at `localhost`:`5432`\n" +
      '\n' +
      'Please make sure your database server is running at `localhost`:`5432`.\n' +
      '    at RequestHandler.request (/Users/jmackie/work/misc_tools/Hermes/node_modules/@prisma/client/runtime/index.js:49028:15)\n' +
      '    at async Proxy._request (/Users/jmackie/work/misc_tools/Hermes/node_modules/@prisma/client/runtime/index.js:49919:18)'
  },
  status: { code: 2 },
  events: [
    {
      name: 'exception',
      attributes: {
        'exception.type': 'Error',
        'exception.message': '\n' +
          'Invalid `prisma.$queryRaw()` invocation:\n' +
          '\n' +
          '\n' +
          "  Can't reach database server at `localhost`:`5432`\n" +
          '\n' +
          'Please make sure your database server is running at `localhost`:`5432`.',
        'exception.stacktrace': 'Error: \n' +
          'Invalid `prisma.$queryRaw()` invocation:\n' +
          '\n' +
          '\n' +
          "  Can't reach database server at `localhost`:`5432`\n" +
          '\n' +
          'Please make sure your database server is running at `localhost`:`5432`.\n' +
          '    at RequestHandler.request (/Users/jmackie/work/misc_tools/Hermes/node_modules/@prisma/client/runtime/index.js:49028:15)\n' +
          '    at async Proxy._request (/Users/jmackie/work/misc_tools/Hermes/node_modules/@prisma/client/runtime/index.js:49919:18)'
      },
      time: [<PHONE_NUMBER>, 310640818 ]
    }
  ],
  links: []
}

Hi @justindsmith,
Great feedback as usual.

I'm not super keen on more configuration, so I'm leaning towards (2) to maintain some compatibility for existing users. The drawback is that we "double publish" error values, but it might make it easier for consumers of the raw attribute outputs.
I agree with your thoughts here. I was thinking about whether it's okay or not to introduce this potentially breaking change, but your comment has clarified things for me.
While it does seem "inefficient" to publish the error information twice in the same span, I agree that not breaking things for your other users makes a lot of sense.

I'll make the change necessary to return the previous instrumentation.

Published under<EMAIL_ADDRESS>Thanks @jcmackie! 🙂

Awesome, thanks again @justindsmith!!


fix(sphere-order-export): Deleted discount codes crashes order export

Summary
Deleted discount codes
Description
This PR fixes the order export crashes caused by deleted discount code that has been used on a completed order.
Todo

Tests

[x] Unit
[x] Integration

Closes #80

Coverage increased (+0.02%) to 95.066% when pulling 25b929cca1fc7e5de150cca586bacda5aa8bec17 on 80-deleted-discount-codes-crashes-order-export into 04c0d97a059988a26fc3add3076789bcb6be75a2 on master.


Adding Github Actions

Description
This PR:

Removes Travis.
Configure Github Actions

Ticket: https://github.com/medic/medic-couch2pg/issues/67
License
The software is provided under AGPL-3.0. Contributions to this project are accepted under the same license.

@latin-panda I've added username and password from 1pass as GH secrets and re-run the jobs. Back to you!

@garethbowen Thank you! It's working nice. Can you please review? 🙏
This PR depends on the node versions to build fine (this PR)
Do we AT this one?

Hi @garethbowen, I've removed the env variables, we can build without them


Protontricks How to?

Hi!
Is there an "How To" to install/use Protontricks on GamerOS?
Long story short, my kids would like to run Lego: Lord of the Rings but it requires the following tweak:
protontricks 214510 d3dx9_41
I tried different things, but since GamerOS is not a full fledged Arch and considering It's the only Arch based distro I use, I'm a litlle at a loss.
Is there anything I can do about it?

You could technically use the AUR package. You would need to run sudo frzr-unlock on the terminal or on ssh and the changes you make will be lost if there is an update, though. I don't really have a good answer for this.
Could you explain how Protontricks is used? Is it controller friendly? It might be worth adding to GamerOS, but it depends on how usable it is in our use-case.

I would have a hard time explaining how it works in detail, but long story short, It's Proton's Winetrick. Once installed you can issue commands like the one I supplied to add tweaks to the game's Proton prefix.
This is what I use to install it on my Pop_OS! install:
https://github.com/Matoking/protontricks

This can now be done using protonfixes which is built into Proton GE. LEGO Lord of the Rings specifically had a fix merged into the latest Proton GE.


Add Windowskin and tone commands for windows

Changes

Adds commands to change or reset windowskin and tone in Window_Base
Add commands window_change_windowskin, window_change_tone to change those elements for RME Windows
Add commands window_use_default_windowskin, window_use_default_tone` to restore defaults to RME windows

Fixes #322
Fixes #323

I think it is nice, but could we maybe extend this to handle "specific tone/windowskin" for each "kind of window" ? (Menu, Battle, etc)

I don't like this idea. Sorry.
I think that will include more complexity about windowskin configuration. Plus, if the user decide to change to use custom menus though other scripts that does not use base windows (or inherit from it), it will make those commands useless or broken.
Anyway I think we should create another issue to discuss about this, no ?


the dat file of shapenet

Hello, I want to train the network with my own data set. May I ask how the dat file of shapenet that you use is generated

You can find the script in the repo of the original Pixel2Mesh : https://github.com/nywang16/Pixel2Mesh/tree/master/GenerateData

You can find the script in the repo of the original Pixel2Mesh : https://github.com/nywang16/Pixel2Mesh/tree/master/GenerateData

Hello, I could not correctly convert the obj file to dat file as the data set, I did not find the code, please give me some advice if possible, thank you

You can find the script in the repo of the original Pixel2Mesh : https://github.com/nywang16/Pixel2Mesh/tree/master/GenerateData

Hello, I am currently making my own dataset. Using this chaining script, while sampling the model points, I found that the sample points were less than 7000. Are there new sampling strategies or solutions? Thank you!


Support abortBroadcast

Currently the documentation does not talk about how to abort broadcasts incase of ordered broadcast.
Is this supported?

@thekalinga Can you please elaborate? abortBroadcast only applies to ordered broadcasts and not LocalBroadcast.

Sorry.. I completely missed the target in my original question.
If I send an ordered broadcast & register an receiver using RxBroadcast.fromBroadcast, then since I dont have access to underlying broadcast receiver, I will not be able to abort the broadcast if I chose to cancel propagation.

Updated the original question

Take a look at #5 and let me know if that works for you.

Can you split the interface OrderedBroadcastAborter into two interfaces It helps with Java 8 lambdas.
i.e to use API you defined right now, in Java 8 the declaration will look like
RxBroadcast.fromBroadcast(context, intentFilter, new OrderedBroadcastAborter() {
  boolean shouldAbortBroadcast(Context context, Intent intent) {
   return true;
  }

  boolean shouldClearAbortBroadcast(Context context, Intent intent) {
   return false;
  }
});

If you split the interface into two OrderedBroadcastAborter, OrderedBroadcastCascadeEnabler (or some better names), the calling code will look like
interface OrderedBroadcastAborter {
  boolean shouldAbort(Context context, Intent intent);
}

interface OrderedBroadcastCascadeEnabler {
  boolean shouldEnableCascade(Context context, Intent intent);
}

class RxBroadcast {
    // rest of the implementation
  public static Observable<Intent> fromBroadcast(Context context, IntentFilter intentFilter,, OrderedBroadcastAborter aborter, OrderedBroadcastCascadeEnabler cascadeEnabler) {
    // rest of the implementation
  }
    // rest of the implementation
}

RxBroadcast.fromBroadcast(context, intentFilter, (context, intent) -> true, (context, intent) -> false);

I am not sure I completely agree that this is the better solution. There is no requirement that you have to create your object as an anonymous inner class.
I think the following is much clearer:
final OrderedBroadcastAborter alwaysAbortOrderedBroadcast = new OrderedBroadcastAborter() {
  boolean shouldAbortBroadcast(Context context, Intent intent) {
   return true;
  }

  boolean shouldClearAbortBroadcast(Context context, Intent intent) {
   return false;
  }
};
.....

RxBroadcast.fromBroadcast(context, intentFilter, alwaysAbortOrderedBroadcast);

I feel that what you are proposing for the ease of inline lambdas, makes the library less precise for the following reasons:

Makes the API less clear, when reading:

 intentFilter, (context, intent) -> true, (context, intent) -> false)

the average reader has to revert to documentation to understand what is happening

This spreads the concerns of one concept and puts them in two places, it is not clear that they have tightly coupled interactions

Happy to discuss this more if you have other opinions or cases that support your needs.

You have IDE to tell what a given arg is (Ctrl+q)
If you want readability, you can make it happen with what I have defined. Its all about the preference.
For eg., you make what I write more readable with the following code. Here you can define inline(one I mentioned earlier)/within method without much java anonymous inner class (or) the one you defined/at the class level with no visible pollution within the method
OrderedBroadcastAborter alwaysAbort = (context, intent) -> true;
OrderedBroadcastCascadeEnabler dontCascade = (context, intent) -> false;

RxBroadcast.fromBroadcast(context, intentFilter, alwaysAbort, dontCascade);

Reg. whether both are related/not, I agree with you to some extent that they are related, but we also need to look at how frequently people use both together.
Does most of the users who abort also allow cascade/vice versa, in my opinion not.
If not, why club them in the same place where you get not much advantage. Besides, the users have the flexibility to use short forms if they so chose (and rely on IDE if so chose).
Am open for your views

Even better, if you split
OrderedBroadcastAborter alwaysAbort = (context, intent) -> true;
OrderedBroadcastCascadeEnabler dontCascade = (context, intent) -> false;

// eg. 1; default
RxBroadcast.fromBroadcast(context, intentFilter, alwaysAbort);

// eg. 2; alwaysAbort
RxBroadcast.fromBroadcast(context, intentFilter, alwaysAbort);

//eg. 3, dontCascade
RxBroadcast.fromBroadcast(context, intentFilter, dontCascade);

//eg. 4, alwaysAbort & dontCascade
RxBroadcast.fromBroadcast(context, intentFilter, alwaysAbort, dontCascade);

I have not used clearAbortBroadcast, But I believe alwaysAbort and dontCascade seems to be mutually exclusive (mostly). So we can eliminate option 4 completely. If not, we allow the flexibility in the API.
Please let me know your thoughts

From this code, it looks like they are mutually exclusive.
if (orderedBroadcastAborter.shouldAbortBroadcast(context, intent)) {
                            abortBroadcast();
                        } else if (orderedBroadcastAborter.shouldClearAbortBroadcast(
                                context,
                                intent)) {
                            clearAbortBroadcast();
}

Since they are mutually exclusive, we should not be clubbing them in the same interface.
If we club them in a single interface, user is forced to implement both methods (mutually exclusive), of which one method will never be used for any given flow.
So  my view is, we should have two interfaces & support eg.1, 2 & 3 usecases & discard eg. 4 above

I'm looking to make the api as explicit as possible, taking in the same parameters types that do different things Option 4 in your example is bad api design -- see Josh Bloch for more details. There is no way to mess up the ordering with the approach I outlined. I will attempt below to establish why I think that #4 is the only option (an abort paired with a clear).
I am also trying to look at this holistically for all users (not just your use case). I am guessing the intention of Android is not not simply abort all broadcasts that pass an intent-filter but rather selectively abort/cancel abort based on some business logic from the intent. Otherwise it seems that either something malicious is being performed or you are simply not using the broadcasts properly. I feel that my hypothesis is somewhat supported by the following-- the single most used case of aborting broadcasts seem to be replacement SMS applications (quick git search). Google noticed this and changed broadcasts to handle this (http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html). If their intent was to always capture the broadcast and never let it propagate it seems like this would encourage a never ending rat race to have the highest priority on the system.
I would also say that from my example you have copied, this illustrates that they are not in fact exclusive, they are closely coupled in their behavior. One cannot cancel an abort if one aborts before.
That said, thank you for the insightful comments. I do find them useful. I will come up with another approach that will satisfy both of us.

Please take a look at #6, I think this addresses both of our concerns.

I'm looking to make the api as explicit as possible, taking in the same parameters types that do different things Option 4 in your example is bad api design -- see Josh Bloch for more details.

This statement is not applicable as the interface for aboter is OrderedBroadcastAborter which is different from cascade enabler OrderedBroadcastCascadeEnabler.
from my last post

OrderedBroadcastAborter alwaysAbort = (context, intent) -> true;
OrderedBroadcastCascadeEnabler dontCascade = (context, intent) -> false;

Secondly, I use abort in my application in the following manner.
Lets say you need to support conversation in your app and whenever the other party send a message to you, if you are already in the conversation screen, the you would expect the conversation to show a prompt (no blocking)  saying "A new message has been received. Do you want to update conversation".
If it happens that you are not in conversation screen, you would expect a notification in the notification drawer.
The conversation screen automatically registers a broadcast receiver (with higher priority) on create and unregisters it during destroy. This broadcast receiver will abort request if the conversation message corresponds to the current conversation the user is viewing (remember that there can be many conversations), he handles the notification & aborts the broadcast.
There will a global broadcast receiver with lower priority incase if you dont find any broadcast receiver.
Your proxy implementation seems to be a reasonable middle ground, with scope for expansion. (Though I would have preferred the Java 8 friendly option)
Thanks for your prompt responses.

Looking at the whole thing again, proxy implementation is the correct implementation, neither the java 8 option nor the single interface is correct, as these are callback interfaces & can only be used at the end of onNext processing.
i.e with normal ordered broadcast; there are no assumptions about the underlying implementation.
void onReceive(...) {
  // do something; section 1
 abortBroadcast(); // call the underlying broadcast receiver; not cache the flag locally
 // do something else; section 2
  if (something else happens) {
   clearAbortBroadcast(); // call the underlying broadcast receiver; not sure about the usecase; why you would do this
  }
 // do something else; section 3
}

i.e if there is an exception at section 2 in the code above, should the underlying android implementation abortBroadcast() (or) proceed with broadcast. I dont know. I think we should let Android worry about how to handle this as it knows best.
We can only achieve this if we allow the user to make calls on broadcast receiver just the way he would do in a non-rx flow.
The callback implementation is wrong as it makes assumptions that calling abortBroadcast & clearAbortBroadcast at the end is equivalent to calling them in the middle, which might not be a reasonable assumption to make.
handler.onNext(intent);

// we can only apply the changes at the end; but in the original implementation, user has the flexibility to call this any any point in the broadcast handling
if (delegate.shouldAbortRequest()) {
  receiver.abortRequest();
}

if (delegate.shouldClearAbortRequest) {
  receiver.clearAbortRequest();
}

I believe your implementation of proxy is both enhancement & java 8 friendly & most importantly correct.
However, I think you should rename OrderedBroadcastStrategy -> BroadcastReceiverProxyAware (or something more descriptive), as it can potentially deal with  any future expansion of BroadcastReceiverProxy, not just ordered broadcast
Do let me know your thoughts.

Sorry, I just went over the new implementation again. It does not address the concerns I raised above.
I think onNext should send the intent & proxy
i.e
class IntentAndProxy {
  public Intent intent;
  public BroadcastReceiverProxy proxy;
}

Only then we will be matching the contract of the Broadcast receiver ion the truest sense.
Please let me know your thoughts.

I don't want to spend too much time on the first part but essentially:

(context, intent) -> boolean

is the same "type" and makes the user look up documentation when doing a code review (or using emacs/vim) when IDE is not present. But I don't think this part is relevant to continue our exploration of the API.
It seems from your latest comment that you agree with the approach (except for the naming) so I think we are making good progress.
The only other point I'd like to make is that given this new information of how you are using it, I might be so bold as to suggest that you do it differently. In my opinion I don't think this is the appropriate use case for ordered broadcasts. I feel that the purpose is to determine at a system level of when/where to propagate system events. You seem to be doing this selectively for UI purposes in your application. The Chomecast Companion Library (CCL) has a very similar use case (don't show the notification when the app is open, show the notification controls when the app is not in foreground) https://github.com/googlecast/CastCompanionLibrary-android/blob/master/src/com/google/android/libraries/cast/companionlibrary/cast/BaseCastManager.java#L433 There are many other ways to tackle this, but this is just one example. I fear that you might have unintended and hard to reproduce outcomes based on your current strategy. You are essentially changing your entire state based on UI (Imagine if you had some other broadcast receiver that did some other non-ui work, in your current strategy that part would be skipped). But I digress outside the scope of this library/PR.

I really am not following your point on onNext() and calling the proxy after.
The proxy is not part of the Rx stream. It's purpose is to alert the Android system as to whether or not to propagate the broadcasted intent past the current receiver. What purpose would you need to have this in the onNext()?

Did you go over the latest two comments about correctness?

The proxy has all of the state it needs from the broadcast receiver, namely the Context and the Intent. Any decisions can and should be made with that information. I think the confusion is coming from your Global UI state that is leaking into this conversation.
One could easily inject a Singleton UI counter into the OrderedBroadcastStrategy implementation and handle this as well.
Please construct a specific use case that illustrates your point if this is not the answer you are looking for. I think you will find that the current proposed solution handles your needs.

Sample android code responsible to handle ordered broadcasts
Implementation 1:
List<BroadcastReceiver> highestToLowest = new ArrayList<>();
  booelan shouldAbort;
  for (BroadcastReceiver r:highestToLowest) {
    if (shouldAbort) {
      break;
    }
    try {
        receiver.onAbort(v -> {
          shouldAbort = true;
        });
       receiver.onClearAbort(v -> {
         shouldAbort = false;
       });
       receiver.handle();
     } catch(Exception e) {
        //log and move on
     }
   }
}

Implementation 2:
List<BroadcastReceiver> highestToLowest = new ArrayList<>();
  booelan shouldAbort;
  for (BroadcastReceiver r:highestToLowest) {
    if (shouldAbort) {
      break;
    }
    try {
      receiver.handle();
      if (receiver.clearAbort()) {
        shouldAbort = false
      } else {
        shouldAbort = receiver.shouldAbort();
      }
    } catch(Exception e) {
       //log and move on
    }
  }

Do you see how both of these can change the way the errors during onNext handling?

if android was implemented using approach 1, then exception at section 2 will abort the broadcast altogether. If however, it uses approach 2, then exception would not cause the broadcast to be aborted.
If we however, chose to use callback approach (i.e onNext followed by handleOrderedBroadcast), both android implementations would not abort the call.
Our implementation needs to behave the same way as it would behave in a native broadcast way.

I'm afraid the comments are not the best place to describe what you are attempting to describe. I'm a bit confused at your main concern, hazily I am guessing it has to do with the point of the exception vs the point of the handling.
Probably the proper way to discuss this would be with some actual code. Would you be agreeable to either make a test project or better yet, some test cases in this library to demonstrate your point? As it is, it is spread out over multiple comments and pretty hard to follow. The other benefit is that whatever you are proposing could be cemented in with test cases and never regressed.
Thanks!

I'll create a vanilla java project and test cases to describe what I'm talking about. I'll not be using android as the implementation for broadcast handle can potentially vary from version to version & also as I don't have access to all versions of android source to investigate

I have created a sample project at
https://github.com/thekalinga/callback-trouble
Please go over the code and let me know if you still have any questions

I have responded with this https://github.com/thekalinga/callback-trouble/pull/1
I think the comments are self-explanatory, but if you have any questions, let me know, I'm planning on merging this PR today.

The assumption we should make is that the library code works. I'm not sure why you are throwing exception in the library code.
If you look at other non-rx & rx with IntentAndProxy, the exception happens in the user who is handling the broadcast. You modified the library to code to match the output.
Non-Rx
System.out.println("Received by highest priority receiver"); //1. Log
abortBroadcast(); // 2. abort
throw new RuntimeException("Intentional exception"); // 3. exception

Rx with android prox
System.out.println("Received by highest priority receiver"); //1. Log
abortBroadcast(); // 2. abort
throw new RuntimeException("Intentional exception"); // 3. exception

Rx
System.out.println("Received by highest priority receiver"); //1. Log
throw new RuntimeException("Intentional exception"); // 2. exception

In Rx case user does not have provision to call abort..() because of the way the API is designed. Its the flaw in the API.
Please let me know if thats not convincing.

The user has the choice to abort whenever he wants.
With IntentAndProxy approach, user decides when to abort in the flow (exactly the same way he does in non-rx approach) & the framework (Android) decides when to abort the broadcast (vanilla/exception tolerating). The library(RxBroadcast) does not make assumptions, it just delegates the call to the underlying framework when the user choses (just as native).
But with Rx alone approach, the library(RxBroadcast) is forcing user when this abort will actually be applied against the framework(Andoir), i.e after the user is done processing the event (after onNext is done), which is not correct.

Hmm, I actually think we are moving farther apart on this.
I am unclear why calling abort after onNext() (though still in the receiver) would have any negative effects. OrderedBroadcasts are exactly that-- ordered, it waits for the previous receiver to complete and optionally abort before continuing. The position where it is called inside the receiver has zero effect.
As to why you want to throw an exception, tell a receiver to abort (but never call it) is unknown to me.
If I make an assumption since the context is lacking, that in your Rx and Rx with IntentAndProxy examples, you are calling this after the intent has been emitted, correct? If that is the case, you are calling abort after onNext is called as well. If you are doing something else, I don't think it is properly explained.
The design of this API allows users to supply an OrderedBroadcastStrategy for aborting/canceling. All of the logic should be contained in there. Much as it would in an overridden BroadcastReceiver, it has the same inputs (context, intent) and if you can make the decision with just those pieces in vanilla Android, you can do the same in RxBroadcast.
I also strongly feel that any API should be opinionated and as easy for the majority to use. Introducing non-standard objects such as 'IntentAndProxy' will confuse the majority of users. Everyone expects an intent to be emitted from a BroadcastReceiver.
I will add an example to the sample app to show how to use this. Hopefully that will clear things up.

Closed by #6


bug in event call OnBeforeAutoReservePurchLine in codeunit 99000845 "Reservation Management"

Hello,
I have found bug in OnBeforeAutoReservePurchLine event in codeunit 99000845 "Reservation Management" call - same variable was used twice:

as you can see on the screenshot "RemainingQtyToReserveBase" variable does exist in the AutoReservePurchLine procedure scope, and can be used in event call.
this is the event declaration:
[IntegrationEvent(false, false)]
local procedure OnBeforeAutoReservePurchLine(ReservSummEntryNo: Integer; var RemainingQtyToReserve: Decimal; var RemainingQtyToReserveBase: Decimal; Description: Text[100]; AvailabilityDate: Date; var IsReserved: Boolean; var Search: Text[1]; var NextStep: Integer; CalcReservEntry: Record "Reservation Entry")
begin
end;

As far as both variables are declared "by var" it is impossible to change RemainingQtyToReserveBase variable due to this bug.

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. Please do not reply to this, as we do not monitor closed issues. If you have follow-up questions or requests, please create a new issue where you reference this one.


Calling the function group.makeGroupMembership throw an error

When I try to call the function group.makeGroupMembership with any username as a param (valid or not) it throws this error:
bn.js:598 Uncaught (in promise) TypeError: Cannot read property '-1' of null
    at BN.bitLength (bn.js:598)
    at Point._hasDoubles (base.js:304)
    at Point.mul (short.js:404)
    at KeyPair.getPublic (key.js:64)
    at encryptECIES (ec.js:94)
    at helpers.js:138
    at Array.forEach (<anonymous>)
    at encryptObject (helpers.js:121)
    at :3000/async http:/localhost:3000/static/js/0.chunk.js:76669

After some debugging this only happen when the user does not exist in the database, is Radiks designed to work like this or is it an issue?

@pradel I found the same behavior. Unfortunately, almost all API of radiks rely on data in MongoDB which is not great I think, because according to documentation mongo needed only for caching keys. But in our case cache is the main source of information and there is no other way (I cannot find them) to work with data in blockstack if you corrupt your cached MongoDB

Yes, inviting members that haven't registered is not supported - this is a very tricky case, as you have no way of knowing what their public key is, in order to encrypt their invitation. A possible new feature would be a way to create an invitation that anyone can access if they are provided with some "magic link".


For column projection, only a partial indexing is necessary

Terminology: Selecting a subset of columns is called a projection.
Since extracting the indexes is expensive, you may want to only pick some of the indexes, never committing to memory the unneeded indexes. So maybe you want the 4th index and the 10th one. Then you want the 14th index and the 20th index and so forth. Skipping an index is cheap, it is a single instruction (blsr).
So, conceptually, getting just the indexes you need is easy. Practically, there is a software engineering issue in getting the whole thing to work... but it can be done.

Yes, assuming we have 10 indexes. We actually need the 5th and 1st indexes as well to serve as end delimiters.
Skipping indexes could be done en masse by masking out the unwanted indexes. This is simple until you have >64 columns, and not completely awful even then, although it probably doesn't achieve in practice.
One would make up a mask of repeated bits - going from LSB to MSB this would be<PHONE_NUMBER>1 (if I counted right) repeated in a register and double-shifted and OR'ed together appropriately.
This sounds a bit stupidly exotic, but a similar technique could be used to detect erroneous numbers of fields (too many / too few) by applying it to a bit-selected sequence of separator vs terminator bits. So for 5 fields per line you would be wanting to make sure that we see<PHONE_NUMBER> etc (with the same tricky double-shift and the same problems with >64 columns) as the bit-pattern of terminators within the union of "terminators and separators".
All of this might be overkill compared to simpler non-bit-parallel techniques, but you know me.

Just so we are clear,  I am thinking about working at the bit level. So this is prior to the flatten call. Yes, it is exotic.


How to do configuration

I find it very hard to understand the unique way of configuring ckeditor with the provided example.
i.e. I use the out-of box configuration. i.e. no CKEDITOR_CONFIGS in settings.py
a) How can I modify this default config?
Maybe a simpel example: I need to add BulletedList to the toolbar.
How can I use CKEDITOR_CONFIGS to add this to the default config?
Any help is appreciated.
Stefan

The configuration in django settings file is then used to generate ckeditor configration.

You can also check https://github.com/django-ckeditor/django-ckeditor#example-ckeditor-configuration and if you are using something custom then it's up to to to make it working.


Mark environment as self-hosted when run using nektos/act.

Related: https://github.com/shivammathur/php-ubuntu/issues/2

Added in https://github.com/shivammathur/setup-php/commit/3f2a402846d88880a2f51f6dcecc1349026adb93


[iOS] Popup message with "Don't allow. OK." text appears twice.

Bug Information

Version Number of Plugin: <IP_ADDRESS>-beta
Device Tested On: iPhoneSix+
Version of VS: Professinal 2017
Version of Xamarin: <IP_ADDRESS>6 (1be4f0c)
Versions of other things you are using:

Xamarin.iOS and Xamarin.Mac SDK: <IP_ADDRESS> (4cffddf)
iOS version: 11.0.3

Steps to reproduce the Behavior

Run application very first time.
Run the code snippet.
Message "My Application Would Like to Access the Camera. Don't Allow. OK." appears.
Click "OK".

Expected Behavior
I see the camera to be able to take a photo.
Actual Behavior
The same message appears again. And I see the camera only when I click "OK" again.
Code snippet
var file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions { Directory = "TestFolder", Name = "SomeName" });

Can you past all of the permissions you have listed in the info.plist for me.

@fabasoad I am not able to reproduce this on iPhone SE running iOS 11
Could you share the details James asked in ^ comment?

@jamesmontemagno @prashantvc regarding camera only this:
<key>NSCameraUsageDescription</key> <string>My Application Would Like to Access Phone Camera</string>

do you have other ones in there that say the same things?
It is literally impossible for iOS to pop up the dialog twice. Perhaps the camera app had never had permissions requested?

I've downloaded the latest <IP_ADDRESS>-beta build today and this bug isn't reproduces with it. So, I think this issue might be closed. Thanks!


Black Resource Bar for Classic TBC version

My resource bar turned black after the latest TBC classic patch and I cannot bring it back to color again.
It's the same on all my characters, not matter if it is the rage, mana or energy bar.
Version Number
KkthnxUI_BCC-10.2.7-Release.zip
Steps to Reproduce
Login in any character on the classic tbc client
Told me that the blizz UI is conflicting with the addon
Pressed: Ignore
Never showed up again
mana, energy etc is black on the player info (the group icons and bars are normal)
Expected Behavior
Resources on the personal resource bar should show in the right color (blue for mana, yellow for energy)
Actual Behavior
The bar is completely black
Only KkthnxUI Enabled
it's the same with all other addons de-activated
Additional Information
It started when I first logged in after a two weeks break on the 08.09.21. Before that I had no issues with the addon whatsoever.
Error Log
none

Wrong repo for this report.


doc: add references to builds mailing list

<EMAIL_ADDRESS>archives the CI build results for nightly builds.
Add references to this mailing list in the development
process doc, contribution guidelines, and introduction (pulled from
README).
Also added a reference to the "Asking for Help" doc (there was a note to
add this once that doc was merged).
Fixes: #15652
Signed-off-by: David B. Kinder<EMAIL_ADDRESS>

@dbkinder ping


GHA: rename the nuget package

This renames the nuget package so that we can normalize all the nuget packages to .platform.arch suffixes, e.g. .windows.amd64 or .windows.arm64.

@brianmichel absolutely!  Once it is published, then I can change the consumer of it.


withContiguous[Mutable]StorageIfAvailable(_:)

So, I had forgotten these methods exist. It's a pair of methods required by Sequence and MutableCollection, with default implementations that returns nil. While the word order of ANKFullWidth depends on the platform's endianness, it can be implemented by reversing the word order on big endian platforms:
func withContiguousStorageIfAvailable<T>(_ body: (UnsafeBufferPointer<UInt>) throws -> T) rethrows -> T? {
    #if _endian(big)
    var value: Self { self.wordSwapped }
    #else
    var value: Self { self }
    #endif

    // use the base pointer in value.withUnsafeWords(_:)
}

mutating func withContiguousMutableStorageIfAvailable<T>(_ body: (UnsafeMutableBufferPointer<UInt>) throws -> T) rethrows -> T? {
    #if _endian(big)
    self = self.wordSwapped
    #endif

    // use the base pointer in self.withUnsafeMutableWords(_:)

    #if _endian(big)
    self = self.wordSwapped
    #endif
}

It can be argued whether ANKFullWidth should conform to these protocols when withUnsafe[Mutable]Words(_:) exists. To this point, I think it should. In fact, withUnsafe[Mutable]Words(_:) only exists because my prayers to the optimizer go unanswered. If the collection interface wasn't so slow by comparison, I would much rather hide the pointers.

I suppose I'll need to consider if there's a way to commit the mutating in the case where errors are thrown...

The following code prints "ABE()", so a defer statement is correct while a bottom statement is not.
struct E: Error { }

do {
    print("A")
    defer {
        print("B")
    }
    throw E()
    print("C")
} catch {
    print(error)
}

I suppose returning nil on big endian platforms is an alternative, considering that these methods are intended (?) to be used as fast paths and considering that byte-swapping it probably does not qualify as fast.

But at the same time the documentations says this:

This method calls body(buffer), where buffer is a pointer to the collection’s contiguous storage. If the contiguous storage doesn’t exist, the collection creates it.


Move pid file operations to /pkg/ dir

Summary:
Currently there is code in /utils/daemon.go to handle pid file creation and removal.  This package is too big and there are little testing for these functions.
Proposed solution:
Move the two functions for pid file creation and removal to a separate package in the /pkg directory called pidfile.  It would be a clean api if we used a type that could have the removal in a defer by the caller.
import "github.com/docker/pkg/pidfile"

file, err := pidfile.New(path)
if err != nil {
// handle
}
defer file.Remove()

I would like to work on this. I don't have much experience with Go, but it seems like a nice improvement to begin with.


Improve jest-get-type unknown type error message

Summary
The error message for an unknown type in jest-get-type is vague and unhelpful- it does not tell you what the unhandled type is!
It tells you the value, but not the value's type. It can sometimes be difficult to infer the type from only seeing the printed value.
This change makes the message include the type and the value, which is more helpful.

@zovits happy to land this, but it needs a test 🙂


[4.2] Perform value operations opaquely on ABI-inaccessible types

This is the swift-4.2-branch version of #16615.
Track whether types are fixed-ABI and ABI-accessible at the SIL level.
Fixed ABI means that we can do value operations on the type without any metadata: value-allocations, copies, and destroys.  It's currently equivalent to being fixed-size, but (1) being fixed-size isn't useful by itself at the SIL level and (2) you can imagine resilience or generics micro-optimizations where there's like an attribute that tells us the size of a type without actually telling us how to copy it.  All types are fixed-ABI except:

layout-unconstrained generic types,
resilient value types, and
value types which contain a subobject of such a type (except within indirect enum cases).

ABI-accessible means that it's legal to perform value operations on the type.  We cannot perform value operations on a type T if it's not fixed-ABI and we can't construct metadata for it in the current file.  The latter will be true if T is private to a different file (in non-WMO builds) or internal to a different module because the metadata-accessor symbol will be private or hidden, respectively.  Importantly, in these cases, it always illegal to use T directly in the current file, which means that SIL generated from that source code won't contain any direct value operations on T.  However, we may be able use some type C that's itself permitted to use T and which is accessible to the current file.  If C contains subobjects of type T, value operations on C must perform value operations on T recursively.  This is okay as long as we don't either:

inline code that contains value operations on T or
naively attempt to recursively expand a value operation on C into value operations on its subobjects.

(Note that we cannot simply treat C as an opaque type because we may need to perform operations on it that would not be legal on a totally opaque type, such as directly accessing a known-stored property.  It is tempting to try to define that away by saying that we never use direct property access on such types and instead go through property accessors.  However, this would require us to guarantee the emission of property accessors for properties, which we'd like to avoid.  Also, it's not actually possible to define this problem completely, because the current file might define a type C2 which contains C as a subobject.  The same recursive trouble applies to C2 as would apply to C, but we must be able to directly access the properties of C2 in order to define its constructors and accessors.  Any model which can support directly accessing the properties of C2 can equally support it for C as well.)
The SIL optimizer currently never tries to expand value operations on objects in memory.  (It does sometimes expand value operations on scalars, and this may be a problem for the opaque-values effort.)  However, IRGen currently recursively expands value operations on non-resilient types.  That is fixed as the final commit in this PR.
The SIL verification that I've added here is definitely incomplete.
Fixes rdar://39763787 / SR-7549.

@swift-ci Please test.

Build failed
Swift Test Linux Platform
Git Sha - ba18503dae6fdc2bc070495f1e5932e34e564b8d

Build failed
Swift Test OS X Platform
Git Sha - ba18503dae6fdc2bc070495f1e5932e34e564b8d

@swift-ci Please test.

Build failed
Swift Test OS X Platform
Git Sha - ba18503dae6fdc2bc070495f1e5932e34e564b8d

Build failed
Swift Test Linux Platform
Git Sha - ba18503dae6fdc2bc070495f1e5932e34e564b8d


Add support for AWS Cloudwatch backend

Adds AWS Cloudwatch as a backend for collected metrics.

lgtm, can you merge master for the metalinter updater / green build, then I'll cut a release.

Sorry,  I always forget to check this step until the end.  Can you please also sign the CLA from the README.md:

Corporate contributor
Individual

Thanks!

No problem, I signed the CLA for Individuals before creating the PR.

Awesome! I'll chase up on this side, the paperwork usually needs a bit of checking.

@tiedotguy Thanks for the update!


Round avatar with css

Avatars are currently displayed as a square, they should be displayed as a circle.

We could do that however Opera Mini disables border radius so maybe it would be better to round the images on the server

Thanks for the input about the Opera Mini. I didn't know that. We will round the images on the server. But please do the CSS anyway because I expect JPEG compression issues. Quality wise. So I'd like to do both and have a very good result on most and an 80% good result on Opera Mini.


Promotions ordering

There was a bug with the Inserts, so they only happened at index 0.

Coverage remained the same at 88.34% when pulling 8e090d7c129a7d12bcf57ac2c00578f94eac1a7f on promotions-ordering into 1f36d20a83236fc7f1e229f3e65b9781a377dcfc on master.


Automatically Handle Teamwork Feats

See this class made by Kuru.
Utilities.txt

Oh uh this is done now.


Set notification ID for background sent notification

We are trying to implement in our app some "editable" notifications. We are basically making the notification group together when there is more than one related notification unread.
We have achieved the expected behaviour by implementing the registerNotificationReceivedForeground listener and there we are creating a local notification with postLocalNotification and passing the desired ID as the second argument. However, when the app is in background we have no control of the notification ID from javascript side, so the notifications were just stacking instead of group.
To achieve the desired behaviour even on background sent notifications, we had to create a new field for the PushNotificationProps.java and add an "id" field on the FCM notification and inject the id on the notification instantiated by the library on the PushNotification.onReceive method.
Is there a simpler way to achieve that? If not, should we open a pull request with our solution?
There is a link to the branch with our implementation
https://github.com/RanderGabriel/react-native-notifications/tree/feat/notification-id
Thanks in advance
This library is great :D

I have opened the pull request with our implementation and linked here


got: 'Please install Term::ReadLine::Gnu from CPAN

apologies if this is just something weird in my environment
cpanm Lingy tests failed in a bunch of places with messages like
#   Failed test ''./blib/script/lingy -e '(prn (+ 2 3))'' -> '5''
#   at .cpanm/work/1684192192.1561471/Lingy-0.1.3/blib/lib/Lingy/Test.pm line 119.
#          got: 'Please install Term::ReadLine::Gnu from CPAN

despite cpanm having up-to-date versions of e.g. Term::Readline::Gnu, I needed to install system packages
pacman -S perl-tie-ixhash perl-term-readline-gnu

Hi there. Can you try again with the latest Lingy?
Go ahead and close this if it works for you.
Thanks!!

Seems Term::ReadLine::Gnu causes problems on many systems. On Termux I had to force the installation (cpanm --force Term::ReadLine::Gnu), but then the installation succeeded and Lingy is running.

@Tekki it certainly does. See #10


Application crashes on startup

Windows Terminal version (or Windows build number)
Microsoft Windows [Version 10.0.19042.985]
Other Software
No response
Steps to reproduce
Start the application
Expected Behavior
The application starts
Actual Behavior
Basically, the application immediately crashes on startup. This happened before I installed an update. After I installed an update about 10:30 am et today, it continued to happen. I have not yet tried restarting the system because I'm busy using it (will update issue once I do if still necessary). Happy to pull any relevant local files if someone tells me what to pull.

just noticed this is a duplicate.


Consider using geolocation to automatically populate location

We could provide a button "Find my location" which uses the geolocation API to get lat/lon, and then a reverse geocoding lookup via a Google API to try to ascertain state and county. What are people's thoughts around me possibly adding this?
Also, do we have an API key for Google associated with this project?

I support this!
I don't think we have a Google API key.
We'd need to consider how this change would intersect with #451 .

Also, I think this is a dupe of #177

Ah yes, it is! Thank you @blanchardjeremy !


IOS build Fail

Hi, @ihadeed
"@ionic/angular": "^4.11.7",
"@ionic-native/youtube-video-player": "^5.21.4",
"cordova-plugin-youtube-video-player": "2.4.0",
"@angular/common": "~8.1.2",
"@angular/compiler": "~8.1.2",
"@angular/core": "~8.1.2",
"cordova-android": "8.1.0",
"cordova-ios": "5.1.1",
It works well on Android.
but, It cannot be build in IOS...
[cordova]   [cordova]  ** BUILD FAILED ** [cordova]   [cordova]   [cordova]  The following build commands failed: [cordova]       CompileC /Users/ctsoft/Library/Developer/Xcode/DerivedData/edume-aozxplehlcprepgdnaexsfzmsuow/Build/Intermediates.noindex/edume.build/Debug-iphonesimulator/edume.build/Objects-normal/x86_64/YoutubeVideoPlayer.o /Users/ctsoft/Desktop/dev/edume/platforms/ios/edume/Plugins/cordova-plugin-youtube-video-player/YoutubeVideoPlayer.m normal x86_64 objective-c com.apple.compilers.llvm.clang.1_0.compiler [cordova]  (1 failure) [cordova]  xcodebuild: Command failed with exit code 65
Is there anything else I need to setting?
Here in the 'JonSmart/CordovaYoutubeVideoPlayer' plug-in, the build succeeds.
Please Help  me.

I'm getting the same error.
@KwandSeokCho Did you find a solution?

@sjregan
I'm sorry.
I haven't found a solution.
And after a while, I forgot.
And I am not good at English.
Maybe you don't understand.
build Success in Xcode as far as I remember.
not 'ionic cordova build ios'
So, it was hard because I kept building whenever code changed.
T.T

@KwandSeokCho thank you, your English is fine :)
I solved this by removing the iOS platform, upgraded XCode from 11.3 to 11.4. Added the iOS platform and built from within XCode.

Turns out this is still an issue for me, it works by building within XCode but does not work from the command line.

@sjregan Same for me. My whole build process is wonky because of this but as of now, don't have an alternative. I have to do an ionic build, then build again within xcode for code updates to be reflected inside the simulator.

@sjregan This plugin points to a release of the iOS plugin (XCDYouTubeKit) that's like 5 minor versions behind. I wonder if this has something to do with it?

@sjregan  @rbrand21
i don't use it command line... .T.T
Build only through Xcode....
I'm done developing.
So it's not that uncomfortable, but it's hard every time I fix it.

Correct import in YoutubeVideoPlayer.h  is #import <XCDYouTubeKit/XCDYouTubeVideoPlayerViewController.h>
and in YoutubeVideoPlayer.m #import <XCDYouTubeKit/XCDYouTubeKit.h>

Correct import in YoutubeVideoPlayer.h is #import <XCDYouTubeKit/XCDYouTubeVideoPlayerViewController.h>
and in YoutubeVideoPlayer.m #import <XCDYouTubeKit/XCDYouTubeKit.h>

This actually worked. Thank you. After making the changes remove the iOS platform and add again.


Problem with nodes of more than one sensor.

Before with version 0.5.1 there was no problem with a bme280 connected to the node.
But with version 0.8.1 / 0.8.2
the mqtt is not sent complete.
this is the DBG output:
[609330] 24392 free (processRxData:162) Published data message from A0:20:A6:08:CD:88: [{"channel":38,"type":103,"name":"temperature","value":13.6},{"channel":38,"type":104,"name":"humidity","value":99},{"channel":38,"type":142,"name":"switch","value":0},{"channel":38,"type":115,"name":"pressure","value":0.9},{"channel":38,"type":142,"name":"switch","value":0},{"channel":39,"type":2,"name":"analog_input","value":246}]
And mqtt
I [609415] 24760 free (publishMQTT:411) Publish MQTT. Esp-Now/A0:20:A6:08:CD:88/data : [{"channel":38,"type":103,"name":"temperature","value":13.6},{"channel":38,"ty
I have tried to change the size of the mqtt buffer but it gets worse, I use esp8266.
Thank you.
P.D.
I use the channel number as Domoticz idx, and the switch type as dummy data for domoticz.

I will check thank you

I was using a 8 bit variable to store MQTT payload length. So, for length bigger than 255 it was overflowed.
I've fixed payload data and control data methods to use size_t type.
Test code on https://github.com/gmag11/EnigmaIOT/commit/c2d1ff45d3903c7f142179811b8b13c8453eb20c
Notice that you need to update GwOutput_mqtt.cppand GwOutput_mqtt.h in your sketch from files in library example.

Tested, works fine. Thank you very much. I have changed all my mqtt sensors for your enigmaiot, with your library it is very easy to create new sensors, currently I use 5 nodes.

Good to know! I will do a fast release to include this fix

Fixed on release 0.8.3


Add HIPAA Compliance doc

Release Playbook

[ ] Rebase against master
[ ] Code review
[ ] Merge into master
[ ] Verify changes at http://site-staging.convox.com
[ ] Promote release on site-production in the convox/production Rack

Obligatory "I am not a lawyer", but this looks good to me 👍


Use Google font

Add other Google fonts to style.md and decide which one to use
Cartoonish font looks great for the logo

I have font suggestions, but those are not google fonts.
It will be a .otf or .ttf files which can be added in the CSS using @font-face syntax.
If it is okay, then I can make a pull request to add these files and implement them in your website.

@Sukrittt Sure. I will assign you the task


Add Nikola-FTSO to songbird providers

FYI, we've updated our contribution guidelines: https://github.com/TowoLabs/ftso-signal-providers#how-to-add-your-signal-provider and clarified how to run tests locally.

made changes. thank you

We can make an exception, so that you can attract enough vote power on the open market too. Will you be able to submit prices once you're listed?

Yes, please!On Dec 8, 2022, at 14:34, Markus Alvila @.***> wrote:
We can make an exception, so that you can attract enough vote power on the open market too. Will you be able to submit prices once you're listed?
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you authored the thread.Message ID: @.***>


[Event Request] - PurchPost.Codeunit.al

We like to request the following Event:
Object: PurchPost.Codeunit.al
Where is the event placed:
local procedure PostItemJnlLineCopyProdOrder(PurchLine: Record "Purchase Line"; var ItemJnlLine: Record "Item Journal Line"; QtyToBeReceived: Decimal; QtyToBeInvoiced: Decimal)
var
IsHandled: Boolean;
begin
OnBeforePostItemJnlLineCopyProdOrder(ItemJnlLine, PurchLine, PurchRcptHeader, QtyToBeReceived, QtyToBeInvoiced, SuppressCommit, IsHandled);
if IsHandled then
exit;
    with PurchLine do begin

Event Code:
[IntegrationEvent(false, false)]
local procedure OnBeforePostItemJnlLineCopyProdOrder(var ItemJnlLine: Record "Item Journal Line"; PurchLine: Record "Purchase Line"; PurchRcptHeader: Record "Purch. Rcpt. Header"; QtyToBeReceived: Decimal; QtyToBeInvoiced: Decimal; CommitIsSupressed: Boolean; var IsHandled: Boolean);
begin
end;

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. Please do not reply to this, as we do not monitor closed issues. If you have follow-up questions or requests, please create a new issue where you reference this one.


Error in codeigniter's Output.php file (system/core/Output.php)

Error: Message: str_replace(): Passing null to parameter #3 ($output) of type array|string is deprecated
You need to replace at line no. 457 in system/core/Output.php
$output = str_replace(array('{elapsed_time}', '{memory_usage}'), array($elapsed, $memory), $output);
with this
$output = $output ? str_replace(array('{elapsed_time}', '{memory_usage}'), array($elapsed, $memory), $output): "";

Hi!
Can you please provide an example of a code snippet to reproduce the issue? Are you altering any other property of CI_Output? What PHP version are you using?

@gxgpet It is not easy to reproduce the error, but what I know is, it returns an empty view to the browser and I realized it is a deprecation error.
When you look at the code below I just added an if block to check if $output is equal to null and then set it to an empty string
And that fixed it.
// Parse out the elapsed time and memory usage,
// then swap the pseudo-variables with the data

$elapsed = $BM->elapsed_time('total_execution_time_start', 'total_execution_time_end');

if ($this->parse_exec_vars === true) {

	if ($output === null) {
		$output = ''; // this is how I fixed it;
	}

	$memory	= round(memory_get_usage() / 1024 / 1024, 2) . 'MB';
	$output = str_replace(['{elapsed_time}', '{memory_usage}'], [$elapsed, $memory], $output);
}


The extension "jupyterlab-flake8" is outdated.

Updated to current JupyterLab release, and now I get
Building jupyterlab assets (build:prod:minimize)
The extension "jupyterlab-flake8" is outdated.

Same, I get the following:
The extension "jupyterlab-flake8" does not yet support the current version of JupyterLab.

Conflicting Dependencies:
JupyterLab              Extension      Package
>=2.0.2 <2.1.0          >=1.2.1 <2.0.0 @jupyterlab/application
>=2.0.2 <2.1.0          >=1.2.1 <2.0.0 @jupyterlab/apputils
>=4.0.2 <4.1.0          >=3.2.0 <4.0.0 @jupyterlab/coreutils
>=2.0.2 <2.1.0          >=1.2.1 <2.0.0 @jupyterlab/fileeditor
>=2.0.2 <2.1.0          >=1.2.1 <2.0.0 @jupyterlab/notebook
>=2.0.2 <2.1.0          >=1.2.1 <2.0.0 @jupyterlab/terminal


Loop check or wait to that timestamp?

How about we calculate the most recent job and wait to that point. ( thread sleep or sth etc.)
Looks like It's more effective than loop check.

Yeah, having a longer sleep would be better than having to wake from sleep every x seconds.


Presenting View Controller on Modal View Controller removes deck effect

After presenting a modal view controller on a view controller that was presented using DeckTransition, the deck effect goes away.
How to reproduce
Take the example project, and add this code to viewDidLoad() in ModalViewController.
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1)) {
    let safariViewController = SFSafariViewController(url: URL(string: "https://www.google.com")!)
    self.present(safariViewController, animated: true, completion: nil)
}

Result
Before:

During presentation:

After dismissal:

You can see in the last image that the rounded corners and inset is now gone.
Thank you for the hard work. Please let me know if there's any more information I can provide!

I thought this was some sort of complicated issue with UIPresentationController at first. Turns out it was, but a simple one. Fixed in 1.0.3. Thanks for the detailed repro steps + code!


How to escape characters in regex

Hello!
I'm looking to match literal asterisks and forward slashes in my regular expression pattern, but prefixing the asterisk with a backslash gives me a DeprecationWarning, and prefixing the forward slash with a backslash doesn't work--it is interpreted as the end of the regex pattern. How can I match these characters as literals within my regex?
Thank you.

Make sure your grammar string is raw. i.e. r""" grammar """

That worked perfectly, thank you!


Handling 404s correctly

I used to have a nice catch-all route in place, which would show an error page client-side (fetched from an HTML-file in /public), and even send the correct 404 HTTP status. When that worked, I was a very happy man.
Then came Meteor 1.0 and, along with it, updates to Iron Router. Now my wonderful catch-all method will result in nasty server-side errors, and as a consequence, I had to retire it after only a few weeks of active duty. This makes me sad.
I have looked at router_server.js line 68, and I find code there that very closely resembles what I used to have in my now retired catch-all route. However, that code has been commented out and, as I understand it, this is due to some type of conflict with Meteor core. Have I understood this correctly?
I am desperate to find a good solution to this issue, as it's a big setback for my SEO efforts to not have proper 404 pages. I am curious to hear if anybody can shed a bit more light on what the underlying issue is, so I may attempt to have a crack at solving it.

@cmather can you please tell us a way to throw a 404 status code?

Thanks @cmather, definitely support options a & c!. Option b may lead to SEO issues, as per impetus of OP @madsmao.

+1

While at it, is it also possible to devise a solution to also handle the "data not found" case as a 404?
In google terms, there is no such thing as data not found, it is just like any other unavailable page. Say for instance, /products/:category or /blog/:slug should return 404 for non-existent /products/nayproduct and /blog/watyasayin routes.

+1, what's the current workaround?

+1 this is critical for SEO

It is quite sad to see this issue tagged as enhancement, and left unfixed for months.

+1

It requires core changes to Meteor to do correctly.

+1

+1

Can someone file an issue on the Meteor repo about this? Thanks.

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1
Meteor is a completely useless platform if something as simple as returning a 404 is not possible, for SEO reasons.

+1 glad I caught this early in the project. definitely a non-starter

+1

Is there any ticket in the meteor rep to +1?

Im unsure if this catches "404" properly but this helps to capture all other routes that are not specified.
Router.route("/(.*)", function() {
    this.render('pageNotFound');
    this.next();
});

+1

+1

+1

Hey all, you can achieve this with the work we did on https://github.com/jazeee/jazeee-meteor-spiderable - testable on https://4scotty.com/idonotexist?escaped_fragment= - this is how the page will look like to search engine and bots when crawled.

At least the guide ought to not claim that this functionality works: https://github.com/iron-meteor/iron-router/blob/devel/Guide.md#404s-and-client-vs-server-routes

+1

+1

+1

Hi @all this spiderable fork can easily return 404 page with real proper response code.

@haopjh and @madsmao, I had a server-side 404 catchall successfully working by setting the path to '/(.+)' rather than '/(.*)'.   I register this route after all others (excepting this error handler) and it works great ... server side.
The problem for me has come when building out routing client-side.  Changes to the URL dispatch into the middleware stack server-side, even though the client should have no visibility to them (per #1496).

@cmather @tmeasday The blocking issue with res.statusCode has been fixed in meteor/meteor#5937 so I've submitted a possible change to Iron Router in #1505. Would appreciate if you could take a look :+1:

+1

+1

+1

Still not resolved? (since the issue is open) No way to return 404 response?

@mikkhait assuming someone accepts PR #1505, this will work when Meteor 1.3 is released (probably later this month) and you upgrade your app to the new version. There's a lot of open PRs on this project though, so I'm not sure if anyone is actively maintaining it anymore. If you're already running Meteor 1.3 you can temporarily run iron router from my fork - just git clone git@github.com:mjmasn/iron-router.git in your packages folder. The alternative is using kadira:flow-router which has some workarounds for handling 404s correctly at https://github.com/kadirahq/flow-router/issues/84. It's frustrating that none of the routers for Meteor considered this from the start, seems an obvious feature to me...

@mjmasn You might take a look at PR #1477.  It is a hack to make Iron behave more like Express and Connect re error handling.  (I like to register a single error handler as my last route and throw everything at that.)  Perhaps you'll find it useful.
I'm integrating Meteor into an existing codebase.  When I started working the front-end, I discovered Issue #1496.   Later, I surmised this issue probably stems from Iron not invoking preventDefault in the click handler that's listening for URL changes.
Before realizing that, I decided to go another way.  I looked at Flow Router, but I prefer to follow the Connect API.  (I mean, Express is very nice, relatively mature tech.  Why aren't we emulating that?)  I ended up rolling my own -- baking Express (thanks to GlitterShark's work) and PageJS into a package.
I'm happy to make that package public if someone wants to build on it with me.  It doesn't integrate all the reactivity, which I prefer live in a Controller.  (I like controllers that, upon their construction, register routes and handlers.)

+1

+1

This works for Flow Router - Handling 404s correctly

Is this still an issue? Need to return 404 status code for pages that don't exist for search engines. Otherwise SEO rank gets pummeled.
What's the current way to do that with Iron Router?

Ok, I found a workaround for those still looking. This will return 404 status for pages that don't have a route listed in your iron router. Put this on the server is a Meteor.startup.
WebApp.connectHandlers.use('/', (req, res, next) ->
    if _.contains(_.keys(Router.routes), req.url.substr(1))
        next()
    else
        res.writeHead(404)
        res.end("Not found.")
)

Of course if you have more complex routes you'll want to check them with better regex there on the second line. You can also use kadira's SSR if you wanna generate a template for your not found page instead of just having "Not found" text.
But at least this correctly renders 404 for search engines when your route doesn't exist, and correctly renders the route when it does.

More complete example to handle complex routes and regex. pathToRegexp is https://github.com/pillarjs/path-to-regexp
paths = []

_.each(Router.routes, (route) ->
	if route and route._path and paths.indexOf(route._path) == -1
		paths.push(route._path)
)

isValidRoute = (requestUrl) ->
	splitUrl = requestUrl.split('?')[0]
	valid_route = false
	_.every(paths, (path) ->
		if pathToRegexp(path).test(splitUrl)
			valid_route = true
			return false
		else
			return true
	)
	return valid_route

WebApp.connectHandlers.use('/', (req, res, next) ->
	if isValidRoute(req.url)
		next()
	else
		res.writeHead(404, {'Content-Type': 'text/html'})

		html = """

Page not found. Back home

		"""
		res.end(html)
)

Too bad a solution to the issue has not been released yet. @evlrbot your solution seems to cause some problems with parameters in the URL when I try to use it. It pushes me to 404s on valid pages using urls like '/test/:myId'.
@alstephan I've taken your approach for now, and reduced the code overhead a bit as follows (taking ES6 as the main language):
// Return a 404 HTTP response if the route doesn't exist
WebApp.connectHandlers.use("/", function(req, res, next) {
    let paths = _.uniq(Router.routes.map((route) => route._path));

    let mainUrl = req.url.split('?')[0];

    if (_.find(paths, (path) => pathToRegexp(path).test(mainUrl))) next();
    else {
        res.writeHead(404, {'Content-Type': 'text/html'});

        let html = 'Page not found';
        res.end(html);
    }
});

This replaces the whole block you posted on your last comment, including the code declared before the connectHandler.

@cmather, @alstephan  Hi, this solution does not work for me if I refresh the page. no other solution?

Why is this closed ?

@cmkramer , hi,
how do you do with a route that exists but has parameters that do not allow to return a valid page?

@ddaydd to me that sounds like a different type of 4xx error. A 404 implies there is no such route, your case sounds like the route exists, but there is an unsatisfied condition that allows the user to view it (i.e. 401 or 403).
I don't have such a case explored in my project that requires handling it server sided. If there were such a case I'd probably keep a list of such routes and their conditions, or corresponding evaluation functions, which I would evaluate before calling "next()" in the above function.
Or, depending on your case https://github.com/VeliovGroup/Meteor-iron-router-protected might be in the right direction. It adds more properties to the route, which you could evaluate using their proposed method, or which you could check for in the function above before calling "next()".

I just do a sanity check and then return a error route / message instead of
actually rendering the page if that helps. Seems to of been the simplest
implementation.
On Sat, Mar 2, 2019 at 4:05 AM Dayd<EMAIL_ADDRESS>wrote:

@cmkramer https://github.com/cmkramer , hi,
how do you do with a route that exists but has parameters that do not
allow to return a valid page?
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/iron-meteor/iron-router/issues/1055#issuecomment-468811401,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AB7p94O0lK8x_5SNSAoCt0B3HjixCaRNks5vSZYXgaJpZM4C8FDT
.

I'm meaning to do just like you have written here, but encapsulate in a
generic helper like showError(404);
On Thu, May 9, 2019 at 2:13 PM Dayd<EMAIL_ADDRESS>wrote:

Thanks.
@cmkramer https://github.com/cmkramer No the route must not exist and
nobody has the right to.
finally for this case i make a Router.go('/_404')
in onBeforeAction:
e = Livres.findOne({"titre_url": this.params.livres_titre_url});
if(!e) Router.go('/_404');
Router.route("/_404", {name: '_404', where: 'server'}).get(function() {
this.response.writeHead(404, {'Content-Type': 'text/html'});
this.response.end(Assets.getText('404.html'));
},
);
@tomtom87 https://github.com/tomtom87 Your solution seems to be a
client side solution without 404 header?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/iron-meteor/iron-router/issues/1055#issuecomment-490774151,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAPOT5756B7GCXBDRIVU2MLPUPFIBANCNFSM4AXQKDJQ
.

@ddaydd oh nice, yeah that's definitely relevant

this is what I end up doing:
WebApp.connectHandlers.use(function(req, res, next){
  // NOTE: the more routes we have, the slower this is going to get - But
  // apparently this is how iron router resolve routes internally...
  if(!Router.routes.some(({handler}) =>handler.test(req.url)) ){
    res.writeHead(404)
    res.end("Not found.")
    return
  }
  return next(null, req, res)
});


The destination file cannot be found in the installed folder.

After installing the program, a white icon without a logo. It does not start, throws an error.

Same issue

Hi, sorry to hear that. Are you guys on windows ?

Yep.

There where an issue with the windows installer ; should be fixed in the last release

Can the latest version be installed on top of the previous version, or is it better to remove the old version before installing?

Since it regards the shortcut registered with windows, I believe it's safer to remove last version and then install the new one.

Ok, thx.

Should be fixed in last release, please re-open if still having this issue


[ServiceBus] Improve stability of the dynamic link credit issuing test

/azp run python - servicebus - tests

/azp run python - servicebus - tests


[General] <How will I connect coreMQTT demo to tensorflow lite project?>

Briefly summarize the issue being raised
I have a running tensorflow lite project ,now I am willing to see that output on AWS Test Client through MQTT .
How should I do that?
System information

Hardware board: [ESP 32 DevKitC]
IDE used: [ Terminal]
Operating System: [ Linux  ]
Code version: (run git describe --tags to find it)
Project/Demo: [ coreMQTT]

Hello @aditi230 ,
You can submodule the coreMQTT library in your application https://github.com/FreeRTOS/coreMQTT and have the required transport interface based on mbedtls/lwip. You can refer to the transport interface details here https://freertos.org/network-interface.html#examples. If you are looking for thread safety for MQTT operations then you can use the coreMQTT Agent library which is thread safe https://github.com/FreeRTOS/coreMQTT-Agent.

Okay Thanks


Are PRs difficult?

that network graph is interesting on everyone's forks :wink:

Pull requests are pretty easy. :)

more of a wink wink nudge nudge situation


Shifu should allow user to configure / instruction

Is your feature request related to a problem? Please describe.
Currently when a user tries to configure deviceShifu with / instruction, it conflicts with the embedded instructionNotFoundHandler which cannot be overwritten and throws an error.
Describe the solution you'd like
Allow user to configure / as an instruction
Describe alternatives you've considered
Use another forward proxy in front of Shifu
Additional context

@tomqin93 assign?


Display error after ‘resize’ event.

in English, so that might help more people
make sure it's not another duplicated issue

1. steps to reproduce or any minimal reproducible example
If there's a 'resize' after flip, it will display error. Like that:

And how to reset my flip?
2. what is expected and what is actually happening

fixed on https://github.com/gaoryrt/number-flip/commit/5064b9a090584af941bb17d1552a1299b590635c

Just found it still happens before the first flip.

fixed on https://github.com/gaoryrt/number-flip/commit/8acb4212a477f4424a73b7f93f38c31d67c1bde1


Read-only clones for reporting LWMS ID 5302

Add here your WMS ID 5302
General requirements

Information in the workshop is adequate and updated
Code is correct and working
Links are correct
Make sure you enter the help email link in your manifest.json
Please make sure WMS URLs are updated as needed after your PR is approved

Checklist - Refer to the QA document for the complete list
Please confirm that the following is completed before submitting your PR

[x] All filenames are lower case (including folders, images, files, etc.)
[x] Filenames are descriptive
[x] Your workshop folder structure should be similar to the one used in the sample workshop (https://github.com/oracle-livelabs/common/tree/main/sample-livelabs-templates/sample-workshop)
[x] Are you using multiple versions (desktop/, sandbox/, tenancy/)? Make sure that each of them contains a manifest.json and an index.html
[x] Image references in markdown contain an alternate text

@vltabacaru - We will approve the PR once the UI changes are live.

@anooshapilli Please tell me more about the UI changes. What are these?


Add ability to run multiple playbooks sequentially

This is currently something we do with our job orchestration tech - if there are multiple playbooks to be run in one job, a DAG dictates that job's execution.
It would be nice from the point of view of dev experience (and also simplifying orchestration) - to be able to pass a list of playbooks and have SQL-runner run them in order.
In case it's not clear, an example use case is:

playbook for a standard web model is run. This creates & relies on a manifest.
playbook for a custom model is run. This may depend on the web model, its temp tables, and also its manifest. (eg adding custom events which relate to the web data).
playbook to complete the job is run - this updates manifests, removes temp tables, and cleans up.

This is basically one job, but the playbooks are distinct because that's the simplest way to have a modular structure which enables one to 'plug in' some custom bits before updating the manifests (without needing to maintain identical manifest logic in two places).
So, it would if SQL-runner could consider a job to consist of several playbooks.

I think a couple of options here:

Allow an entry inside a playbook to be another playbook, so that Colm's approach is modelled inside a playbook
Allow SQL Runner to have command line options to invoke multiple playbooks in series

I was just going to mention that perhaps comprehension of some DAG type document is the best way.
CLI options would be good for dev, but a document is way better - these kinds of interactions between playbooks are not intuitive and should be abstracted away from the user as much as possible.

Could this be a level lower?  DBT for example builds a DAG implicitly from tables that get referenced.  So a query that depends on a table will always be executed after the creation of said table so there is no need to hardcode this logic.
If we could have SQL Runner understand what order queries should be run in by building some logical parsing rules into the system perhaps we could do away with the "playbook" entirely.

I think that would lose a lot of the power of SQL Runner? The nice thing with SQL Runner is that you can put any SQL in it - which means there isn't always an inherent DAG from table references.
SQL Runner : dbt :: Assembly : C++

I would prefer an explicitly configured one for another reason - the deps can be implicit and not based on existence of a resource.
To illustrate - in my example above, the second playbook relies on the manifest for the first. So, if the manifest is updated before the second one runs, things will go wrong.
This kind of implicit inference doesn't strike me as terribly suited to managing these kinds of interactions, where the order of execution is incidentally important.

I guess my preference here would be to define these dependencies in the SQL code rather than in the playbook itself.  If you take Terraform as an example - for a particular resource you define a dependency link either implicitly (referencing the output of another resource) or declared explicitly (with an in-line declaration).  A SQL statement could be similarly managed and a DAG built from this instead.
Moving dependencies to being discovered and understood by the application also removes any ability for you to execute steps in the wrong order.  Assuming you have defined these links in your code you would never need to worry about where you place a step in your playbook.
This, in-turn, removes the cognitive overhead of having to know where all of these dependencies live and ensuring you don't accidentally move a step where it shouldn't be!

I can see the merit in a playbook as it is extremely explicit but the worst part for me of any datamodel development in it is the playbook setup and having to define all of the steps.  I would much prefer executing a directory of SQL files and having the application figure out the best order to execute them.

If you take Terraform as an example - for a particular resource you define a dependency link either implicitly (referencing the output of another resource) or declared explicitly (with an in-line declaration).

That's quite neat! Could you share a code example of an explicit declaration?

Sure - illustrated below are both implicit and explicit declarations:
// Create a resource!
resource "fake_example" "res_1" {
  foo = "bar"
}

// Explicit dependency on "res_1"
resource "fake_example" "res_2" {
  foo = "bar"

  depends_on = ["fake_example.res_1"]
}

// Implicit dependency on "res_1"
resource "fake_example" "res_3" {
  foo = "${fake_example.res_1.id}"
}

Translating this to SQL Runner we would need to add ways for a block of SQL to be reference-able but given that you could consider each "resource" here as a SQL block that you would link together - or not if they had no dependency on each other and could therefore be executed in parallel.

I need to think it over, as I do also see the merit in the suggestion. However, to play devil's advocate on one point:

This, in-turn, removes the cognitive overhead of having to know where all of these dependencies live and ensuring you don't accidentally move a step where it shouldn't be!

I don't see this as necessarily being solved by defining deps in the SQL. If your logic has this kind of requirement, then you still have to do that reasoning, but your defining it in many places instead of one. So potentially the problem just moves from 'which of my steps in this single playbook is wrong' to 'which of my declarations in these many sql files is wrong'.
I'm talking about a case here where a rule like 'x needs to exist before y is run' is not sufficient to determine the order of execution.

Thinking further on it - plugging in custom modules means that we can't know in advance whether or not a custom module exists, nor can we know what the module is.
So in my example, if we're to have a requirement that "updating manifest should happen after any custom module is run", I don't think we can define it in the SQL file.
I do think we can find a way to remove the playbook pain and satisfy that requirement though, with a bit of consideration.

I don't see this as necessarily being solved by defining deps in the SQL. If your logic has an implicit kind of requirement, then you still have to do that reasoning, but your defining it in many places instead of one. So potentially the problem just moves from 'which of my steps in this single playbook is wrong' to 'which of my declarations in these many sql files is wrong'.

True - but you have an explicit dependency definition not a somewhat hidden one in the playbook.  In a playbook there is a defined order but why the order exists is not as clear and is not enforced as opposed to the block of SQL that had clearly defined requirements of "I need this first".

I'm talking about a case here where a rule like 'x needs to exist before y is run' is not sufficient to determine the order of execution. I think I may have confused things by using 'implicit' to refer to this case. What I mean is 'incidental to the actual structure of the model'.

Would love to dig into an example of where that would be the case!  If you have a defined order in the playbook would that not denote that that is the exact level of logic being employed already?

Would love to dig into an example of where that would be the case!

Hard to explain simply, but I'll try. The new web model structure aims to have immutable logic, but enable customisation. It has 4 components:

'base' - contains incrementalisation logic, produces a 'events this batch' table. This is a temporary table.
'web model' - runs the web model logic using 'events this batch' as an input.
'custom' - optional module where someone can write their own logic - eg to produce a custom events table which joins onto the web model. This uses 'events this batch' as an input also. It also can depend on temp tables from the web model, if that's what they need to do.
'finish' - this cleans up tables, and updates the manifests

Now, if we update the manifest before the custom module, and that module fails part way thorough, it is quite difficult to recover gracefully. Restart from top is not safe. Manifest has no record of what events were in the last run. Any logic to handle this is unwieldy.
So, the simplest way to achieve it is for each module to have its own playbook, and for the 'finish' playbook to run after the other 3 have run. Defining dependencies inside the SQL file can't really do this.

If you have a defined order in the playbook would that not denote that that is the exact level of logic being employed already?

Yes, it is, except that I can only run a playbook one by one. The original ask here is simply to enable me to run a sequential list of playbooks, as if a factotum DAG were being run. The nicest solution to it seems to be to define the same thing as what the DAG defines, but for SQL-runnner.

I am 100% on board, by the way, with the idea of removing the complexity of playbooks (and potentially removing the need for a user to explicitly define the playbook), by the way. I think our new model structure allows us to implement a solution (possibly even the solution you outline @jbeemster ).
But that doesn't solve the need to run multiple playbooks in a defined order, so I think we need a solution to both.

Yeah thats fair - I think it would be nice to try and remove the need for multiple playbooks even for this case but can appreciate there is a lot of complexity going on here.
Maybe a higher level abstraction is just that you have:

Modules: A directory with SQL which is then automatically able to figure out the order of execution
Playbook: Defines the order of execution for Modules

Essentially you would have 1 playbook but with multiple "modules" defined within them.  This lets you remove the very verbose playbook definitions for steps but allows you still to enforce the sequential and controlled execution of the DAG steps.
This is starting to sound a lot like Terraform!

Yeah I like this direction.
Relevant to the idea, by the way, is that evolving this kind of structure involves propagating playbooks with how SQL-runner currently works - so there is definitely a case to manage the order of module execution in SQL-runner, rather than having massive and unwieldy factotum DAGs.

Exciting to see this taking shape!

Noting this here in case I forget. If we pursue the ideas outlined here, it would be nice to be able to both set global vars (for an entire DAG in our current structure), and vars which are specific to modules (ie for an individual playbook).
Failing that, just setting them globally per-model is workable, any that are specific to a given step would just need unique names.
This reduces scope for misconfiguration and reduces cognitive load in running any given model.


Simplify and fix tracking event for opening unit modal

Description
Simplify and fix tracking event for opening unit modal in curriculum visualiser
Note this also fixes double events being triggered when opening the modal in development. Previously we got two events triggered rather than one (only in development)
Issue(s)
Fixes CUR-507
How to test

Go to https://deploy-preview-2898--oak-web-application.netlify.thenational.academy
Navigate to the curriculum visualiser
Open a modal
Check only one tracking event is fired.

:tada: This PR is included in version 1.598.2 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


#51 fake solver and reconstruced noise

python bsi-zoo/run_benchmark.py

this PR is a #50 and #51 fix


feature: Implement a default mock layer for every service

For testing purposes it would be nice to have a mocked version of the service, that is configurable like https://github.com/m-radzikowski/aws-sdk-client-mock...
Makes writing tests easier.

This already works...


[WIP] Replace edit pencil with a button+modal

Still needs tests.
Closes #370

Coverage decreased (-1.6%) to 92.157% when pulling d138c1c4761621239157d79bf75b54b697a0ce16 on SirCmpwn:remove-edit-pencil into 1bd4a25fbacf803628b4efcf0bc0453090eb564c on linode:master.

Looks awesome.

s/Save changes/Save/?
Just that ^^
Might need to be concerned about long group names/label names in terms of layout

Coverage decreased (-1.6%) to 92.041% when pulling ba349ede617cd65f71eba8fb264e2c976ea63c57 on SirCmpwn:remove-edit-pencil into 1a3af057704c9565f60c56c3a166cc7f93d8745a on linode:master.

s/Save changes/Save/?

I made this change, but fwiw it makes the "yes" button smaller than the "no" button.

Coverage decreased (-1.5%) to 92.107% when pulling bb549e7f05f305e8077348a724169faefc964926 on SirCmpwn:remove-edit-pencil into 1a3af057704c9565f60c56c3a166cc7f93d8745a on linode:master.

Coverage decreased (-0.7%) to 92.976% when pulling 14f391da0bf5915d257d5df556a66a27d24cd159 on SirCmpwn:remove-edit-pencil into 1a3af057704c9565f60c56c3a166cc7f93d8745a on linode:master.

Coverage decreased (-0.02%) to 93.619% when pulling 36dd7dbf0b7e5eee30b896bc1ca5126dc1040edd on SirCmpwn:remove-edit-pencil into 1a3af057704c9565f60c56c3a166cc7f93d8745a on linode:master.

👍

-1 to the border above the buttons, but I'm not seeing where that's coming from

Border was already there on all modals, I just tweaked the style to be less broken. Personally I like the border.

It's just totally unnecessary. Will file separate issue/proposal for that.


Implemented binary indexed tree.

Checklist

[x]  I've looked at the contribution guidelines.
[x] This pull request is complete and ready for review.

Description
Implemented Binary Indexed (Fenwick) tree. Fenwick Tree is a data structure that can efficiently update elements and calculate prefix sums in a table of numbers.

Hi Algorithm Club 👋
Thank you for such a nice and unique repository! I really appreciate what you do here and really love algorithms like you. I found there are no Fenwick tree data structure and implemented it on my own to make this repo a little bit better. Hopefully, you will like the proposed changes.