Possible bug in subscription?

Hi @gmac Thanks for creating this repo, it's so helpful!
I was wondering if the way you are creating the remote subscriber here is the right way. Wouldn't you want to create a separate instance of the client for each subscription request? Currently, the same client is shared for every request here. In this case how can we use different connection params for different users?
connectionParams: {
  userId: context?.userId,
},

Hi @skk2142, thanks for the kind words and a very good question. If I understand you correctly, you’re asking if the client on line 8 should be moved down to line 10 so that it falls inside of the instanced subscriber handler? Hmm. Maybe? I’ve actually never implemented subscriptions in a production app. Subscriptions were something of a lost art from the Apollo days that no one in The Guild was directly familiar with when they took over; and the old connection preference was transitioning over to the new graphql-ws protocol. I hewed all the new documentation from trial and error while putting together this demo. Additional docs are available here and here about setting up subscriptions, both of which I know have gotten recent updates from the author of graphql-ws. Tinker a bit and report back on your findings. I think you don’t want

Sorry for closing! I fat-fingered the wrong button.

Reading your question again, it looks like you’re doing something very specific with passing userID in the connection. Instancing based on request or pooling clients by userID in a weak map may very well be appropriate for what you’re looking to do. That said, I’m not convinced that the docs or this example are wrong — they are optimized for the simplest use case, and expect developers like yourself to customize to match your own implementation requirements. Thoughts?

So I was thinking along the similar lines. Looking at this line in the source code for creating a client, it seems like a websocket (Connected object in the code) is created for a client when subscribe is called on the client. This websocket is used for subsequent interactions. I create a cilent using the function below.
const clients: {
  [key: string]: { [userId: string]: Client };
} = {};

const getClient = (url: string, userId: string | null) => {
  let client: Client | null = null;
  if (!userId || !clients[url] || !clients[url][userId]) {
    client = createClient({
      url,
      webSocketImpl: ws,
      connectionParams: {
        userId: userId,
      },
      on: {
        closed: () => {
          console.log("closed url ", url);
        },
        connected: () => {
          console.log("connected url ", url);
        },
      },
    });
    // if a client is create for a user, the cache it
    if (userId) {
      clients[url] = {
        ...clients[url],
        [userId]: client,
      };
    }
  }
  // return the cached version for a user
  if (userId) {
    return clients[url][userId];
  }
  // for non users, return the generated client
  return client as Client;
};

Every time a user connect to the gateway (which uses schema stitching on apollo federation schema and a few subscription schemas), it creates a persistent websocket connection between the user browser and the gateway. For every subscription request, the schema stitching creates a websocket connection with the appropriate upstream graphql subscription service. The code above creates a separate socket connection for each user and each upstream service that the user subscribes to. So let's say we have two graphql subscription services. For N users connecting to the gateway, there will be N downstream connections at the gateway and 2N upstream connections from the gateway. I also added the possibility of using the same websocket connection for executing realtime queries and mutations. This is how I create a subscriber for schema stitching (using mostly your code)
// see https://github.com/enisdenjo/graphql-ws#async-iterator
export function makeRemoteSubscriber(url: string) {
  return async ({
    document,
    variables,
    context,
  }: {
    document: string | ASTNode;
    variables?: {};
    context?: ApolloContext;
  }) => {
    logger.info(
      `MakeRemoteSubscriber at url ${url}`,
      context?.userId
    );
    const client = getClient(url, context?.userId || null);
    const pending: unknown[] = [];
    let deferred: null | {
      resolve: (value: any) => void;
      reject: (value: any) => void;
    } = null;
    let error: Error | null = null;
    let done = false;

    const query =
      typeof document === "string" ? document : print(document);
    const operation = getGraphqlOperationInfo(query);
    if (operation.operation !== "subscription") {
      const result = await new Promise((resolve, reject) => {
        let result: any;
        client.subscribe(
          {
            query,
            variables,
          },
          {
            next: (data) => (result = data),
            error: reject,
            complete: () => resolve(result),
          }
        );
      });
      return result;
    }
    const dispose = client.subscribe(
      {
        query,
        variables,
      },
      {
        next: (data) => {
          pending.push(data);
          deferred && deferred.resolve(false);
        },
        error: (err: Error) => {
          error = err;
          deferred && deferred.reject(error);
        },
        complete: () => {
          done = true;
          deferred && deferred.resolve(true);
        },
      }
    );

    return {
      [Symbol.asyncIterator]() {
        return this;
      },
      async next() {
        if (done) return { done: true, value: undefined };
        if (error) throw error;
        if (pending.length) return { value: pending.shift() };
        return (await new Promise(
          (resolve, reject) => (deferred = { resolve, reject })
        ))
          ? { done: true, value: undefined }
          : { value: pending.shift() };
      },
      async return() {
        dispose();
        return { done: true, value: undefined };
      },
    };
  };
}

I still am not sure if creating a separate websocket connection for each user is the right thing to do: can we multiplex on the same socket connection? Also, the socket connection to each upstream is closed once the downstream client closes the connection but may be we need to garbage collect the client object too? Would WeakMap help with that? I have never used it
so not sure :) Would love to hear your thoughts. Also would reference this issue in graphql-ws repo.

Here's a discussion on this topic: https://github.com/enisdenjo/graphql-ws/discussions/194#discussion-3390469

I'm going to close this one out. I think the takeaway for me in https://github.com/enisdenjo/graphql-ws/discussions/194 is that the handbook's example follows the recommended best pattern, though that's not to say that you can't tailor your own implementation to your specific needs. On this point, it seems best that the handbook makes the most conservative suggestion possible. If you'd like to write a section summarizing your findings here in the notes of that chapter, contributions are most welcome.


build directory missing from published package for 2.0.0 causes runtime failure when require is used

Error: Cannot find module '/Users/runner/work/markdownlint/markdownlint/node_modules/markdown-it-for-inline/build/index.cjs.js'
https://github.com/markdown-it/markdown-it-for-inline/blob/8e7eef13c79f3e7931059cf853285bb7e440b900/package.json#L17
https://www.npmjs.com/package/markdown-it-for-inline?activeTab=code
https://github.com/DavidAnson/markdownlint/actions/runs/7081100389/job/19269891516#step:5:1

FYI, there is an existing test that seems to try to verify this functionality: https://github.com/markdown-it/markdown-it-for-inline/blob/master/test/cjs.js. It would be nice to understand why that test did not catch this issue and fix it so it does.

Thank you very much! Released 2.0.1.
I do not have much experience with es6+es5 combined packages. This was the first release of the upcoming bulk org repos update. If something else can be improved - let me know.


FAIR multi-omics analysis workflow

New Resource Request
Practical example showing practices that implement FAIR Principles for Research Software (FAIR4RS).
Resource Title
FAIR multi-omics analysis workflow
Resource URL
https://doi.org/10.1093/gigascience/giad115
Resource Description
Along with the packaged multi-omics data analysis workflow, the paper shares an experiences adopting various FAIR practices and creating a FAIR Digital Object. These experiences can help other researchers who develop omics data analysis workflows to turn FAIR principles into practice.
Resource Category and Subcategory
Data Analysis - Software applications and workflows
Resource Tags (select from exisiting one)
data standard, multi-omics, multi-omics studies, scientific publication, software application
New resource Tags
FAIR principle

Succesfully merged into main PR#88


ng-changed in input

I am using the date time picker and I have a problem. When I don't use attribute 'onFocus' then I can change the selected value by interacting with the input (type in text). In this case I want to be able to validate the new value on the change of the input. Could you add 'ng-changed = vm.onDateSelected(date)' in the input or ng-blur maybe? Specifically in file script.min.js in line 1125.
Could you suggest something else?

Can you elaborate what you are trying to accomplish? If you expect the onChange event as soon as the user picks the date on the "start Date" or "end Date" tabs, then that cannot be done with the current code since the model is updated until the "save" button is clicked.
If you just want to validate the date when the input changes (after the save button is clicked) then you can just add a watch on the model.

Hi rahimnagori. As I understand, the problem is that when you select the date in the datepicker the value changes to something like "Wed Nov 28 2018 00:00:00 GMT-0600" and the value remains that way if you either click cancel or click outside of the dialog. Is that right?

I just pushed a fix. Can you test the scenario again?
There is still an issue pending. When you select one of the dates and you click "cancel" and you open the calendar again the date that was previously selected remains active instead of the one linked to the model. I will open a different bug for that one because the fix does not seem very easy.

Hi @oscar09 , I have tested it on plunker ( https://embed.plnkr.co/pPjdbN/ )  and now it's working great. Your point, which you mentioned is also there.
Thanks buddy.


SendSMS always generate a new link

This is how I initialize branch in page <head>:
<script type="text/javascript">
  (function (b, r, a, n, c, h, _, s, d, k) { if (!b[n] || !b[n]._q) { for (; s < _.length;)c(h, _[s++]); d = r.createElement(a); d.async = 1; d.src = "https://cdn.branch.io/branch-latest.min.js"; k = r.getElementsByTagName(a)[0]; k.parentNode.insertBefore(d, k); b[n] = h } })(window, document, "script", "branch", function (b, r) { b[r] = function () { b._q.push([r, arguments]) } }, { _q: [], _v: 1 }, "addListener applyCode autoAppIndex banner closeBanner closeJourney creditHistory credits data deepview deepviewCta first getCode init link logout redeem referrals removeListener sendSMS setBranchViewData setIdentity track validateCode trackCommerceEvent logEvent disableTracking getBrowserFingerprintId".split(" "), 0);
  branch.init(branch_key, { no_journeys: true }, function (err, data) {
    if (err) {
      console.error(err);
    } else {
      console.log("Branch initialized", data);
    }
  });
</script>

and this is my SMS function, called on phone number form submit:
function sendSMS(phoneNumber) {
    branch.sendSMS(phoneNumber, {
      tags: ["SMS"]
    }, {}, function(error, data){
      if (error) console.error(error)
    });
  }

The link send by SMS is always a new link and we lose the tracking info and the referral attribution
Even trying to debug the branch data with
branch.data(function(error, data) {
  console.log(data)
})

or
branch.first(function(error, data) {
  console.log(data)
})

all the referral data is lost.

Reading the source code, the SDK should be able to automatically identify the existing referral and, if available, use it: https://github.com/BranchMetrics/web-branch-deep-linking/blob/24771e78f6554788f3c1986b8ddfb56437d7f761/src/6_branch.js#L1265
In my specific case, it is not happening. Not only in the sendSms() case, but also in data() and first(): both returns an empty referral.
I'd prefer to not hack how the SDK works, also because I'm not sure how to pass all the internal properties obtained with the initialization payload.

I created a debug link: https://conio.app.link/github_debug
The destination page prints in the console the init() payload. You can see my problem by typing
branch.first((err,data)=>{console.log(data)}) in the console

It didn't work. I tried both with {} and {make_new_link:false}
Do you have a CDN with the SDK not minimized? It can help the debugging
Inviato da iPhone

Il giorno 17 ott 2018, alle ore 20:17, Sahil Verma<EMAIL_ADDRESS>ha scritto:
@marcopesani, you can actually use make_new_link and set that to false. See this snippet here: https://docs.branch.io/pages/web/integrate/#create-text-message
Let us know if that doesn't solve it
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

Due to the age and inactivity of this issue, I am closing this now. If you are encountering this problem still, please reach out to our support team (support.branch.io) or open a new github issue and we would be happy to help you out!


Learning Objective Dump

Just a place to dump excess, redundant learning objectives in case we need them.

model a physical vibrating system and understand it's essential motion characteristics
numerically integrate non-linear systems
understand how the eigenvalue problem can model a vibrational system
design a mechanical system with vibration in mind
measure vibrations and interpret the meaning of the data
to analyze a vibrational system using computation

1 Introduction [100 mins]
The goal here is to lead the students through solving a vibration engineering
problem while simultaneously introducing the foundation Python commands they
will need to build on. This shouldn't be overwhelming with too many new Python
things but should ease them in but show them that they can solve something
useful the first day.

Students will be able to use the core Python computing commands in the class.
Students Will be able solve an introductory vibration engineering problem.

TODO : What problem to open with?
2 Modeling Vibrating Systems [50 min]
The key thing here is that we want students to be able to look at real physical
objects and visualize what the essential motion is. They should be able to
sketch out free body diagrams that indicate:

an appropriate number of degrees of freedom
appropriate generalized coordinate definitions
appropriate lumped elements that describe the rigid bodies and lumped
elements (springs, dampers) and external loads acting on the system

I'd also like them to come away with an appreciation of why it may be important
to try to create the simplest model that is capable of explaining the phenomena
of interest.
3 Formulating Equations of Motion [150 min]

recognize that the relationship between mass/inertia, acceleration, and the
loads acting on a system are second order ordinary differential equations
be able to express the linear and angular velocity magnitude expressions of
important points and rotating reference frames
be able to write the system's kinetic energy in terms of generalized
coordinates
be able to write the system's potential energy in terms of the generalized
coordinates
be able to form the Lagrangian
be able write the Lagrange's equation of the first kind and evaluate it
add non-conservative forces with Rayleigh's principle
recognize advantages over a Newton-Euler formulation
be able to convert between first and second order form
be able to convert from canonical form to state space
single and multi dof
linearizing eoms

https://en.wikipedia.org/wiki/Lagrangian_mechanics
4 Free harmonic motion with and without viscous damping

determine the natural frequency
find the solution to the ODE
compare different ways to express ODE solution
write the SDoF system in terms of nat. freq and damping ratio
underdamped, critically damped, overdamped

Estimating system parameters from vibrations (live experiment where we give them data)
Forced harmonic motion with and without viscous damping
Non-linear vibration (Coulomb) + simulation of non-linear systems
Impulse response (heaviside)
Stability: book balance
Base excitation: car on bumpy road
Mass imbalance
Arbitrary forcing (convolution integral)
Arbitrary periodic forcing (Fourier series)
Modal analysis of decomposable systems: building
Modal analysis of non-decomposable: bicycle modeshapes
Isolator design
Vibration absorbers

Other:

Stiffness
Equivalency in stiffness, damping, mass, etc
Free response to two dof
Transform methods
Response random inputs
Analogy to electrical circuits or other energy domains
More in-depth non-linear vibratory systems
Relationship to FEA of structures
Beams and membranes: continuous systems (Euler’s beam equation)

Analyzing Vibrating Systems
After finishing this section students will be able to:

state the three fundamental characteristics that make a system vibrate
describe different methods of measuring vibrations
choose appropriate sensors and a placement
visualize the vibrational measurements
visualize a system’s free response
identify critically damped, underdamped, and overdamped behavior
excite a system with different input signals
use time domain techniques to characterize a system's behavior
use frequency domain techniques to characterize a system's behavior
identify a MDoF system and see effects of coupling through time and frequency domain
interactively adjust core system parameters to affect response

The story arc:

Start with a conversation about real things that vibrate. Show vibrating
systems and ask for examples. Have class discussion on commonalities with the
instructor goal of identifying mass/inertia, flexibility/stiffness, damping
as core common attributes of vibratory systems.
How might we measure the motion of these things? What are important
measurements? Talk about position, velocity, and acceleration measurement
techniques. Mass, stiffness, damping measurement?
Introduce a 1 DoF system (block on an ice rink) (mass and damping?). Show how
to simulate an initial value problem and have the students inspect the
measurements (position, velocity, acceleration, .. jerk). What do you
observe with initial velocity? (velocity decreases over time) Have them look
at short sim, so velocity doesn't change, and then a long sim where velicity
does change (goes to zero)
Introduce a rotational 1 DOF system (mass and damping) and it's measurements
(angle, angular velocity, angular acceleration)
Now introduce a 1 DoF ?bungee jumper? system (or something without gravity).
Explain that this sysem has an elastic element that resists the motion of
mass. Let the students simulate this and talk about the characteristics of
the measurements? What does position functino look like? What is the
relationship among the three measurements? Can they determine the dreivative
relationship?
Show how to adjust the mass, and stiffness values of the system. Let
students explore to discover effects of the parameters on the free response.
Can they find out that m and k primarily affect the frequency of oscillation?
Introduce the concept of natural frequency.
Introduce autocorrleation to see period of signal?
Call the signal frequency spectrum method (FFT of signal) to look at the
frequency vs amplitude of the signal. Introduce the frequency domain view of
the signal.
Introduce the effects of damping on the free response: over, under, critical
Introduce multi dof system (two bungee jumpers?), talk about dof, coordinates, etc
Simulate initial value problem and look at signals in time and frequency
domain.
Now let's poke at the systems with an input. Starting with a sinusoidal
input. What does the output look like? Should identify that it is also
sinusoidal but diff amplitude. Try different frequencies.
Introduce the frequency response. Use a sweep frequency input, call a
underlying sys id method that produces the frequency response plot? Talk
about amplitude and phase relationships.
Explore how the mass, stifneess, and damping affect the response plot.
Introduce resonance.
Look at frequency response of mdof systems.

Modeling Vibrating Systems
After finishing this section students will be able to:

identify the essential aspects to model (# degrees of freedom, coordinates,
modeling assumptions)
draw a vibration free body diagram of a real system
write the non-linear equations of motion of a vibrating system
write a linear equation of motion for a vibrating system
transform a mathematical model into a computational model
validate that the model behaves like the real system in a way that is optimal
for answering your questions about the system

Designing Vibrating Systems
After finishing this section students will be able to:

realize that mass, stiffness, damping, and geometry affect behavior in a
complex coupled way.  Understand the tradeoffs among adjusting model
parameters
use common methods like isolators, mass balance, mass abosrber to control
behavior

More here too: https://github.com/moorepants/resonance/projects/1


use globals if avialable

not sure how to test this as this is being set once on module load, do I have access to the resolver inside the test module ?

user globals if avialable

just double checking, you meant use not user right?

do I have access to the resolver inside the test module ?

sorry, I don't quite understand

yes typo
so the way I'd go about testing this especially in phantom, would be I'd put a fake fetch object on window an see if it was what I got when I imported fetch, but you can't do that with ES6 module syntax as they will always load before the current module is run so my guess as to the best way to test this would be to access the module resolver somehow...

So one approach, would be to change: https://github.com/stefanpenner/ember-fetch/blob/master/assets/module-template.js.t#L5-L13 to instead use defineProperty so access to self.Header is always actually being fetched from global.Header
This would allow patching during tests, and likely more resilient to other related polyfils being added.

I though the whole point of this was so it wouldn't pollute global scope?

I think that continues to be true. I can take a closer look after lunch

In which case I may be confusing what you meant, one idea could be to to not export the self object that the shim binds too but to put getters on the export object which dynamically grabs global.fetch/Request/whatever or the shim one.


[Addition]: 6 PantherX with assert spoofing in Bedourie QLD (AU)

Hotspot b58 Addresses
117znWZ3jNViDhmrWSK1FxMjC9NkrjETpUZXYLQjFtGpVzMkGBv
11VcWErwqA28Zopiutn1vWG8QU2E44nWg9e3sLy3fZqy6ay67JZ
11CJGQS3oBrwqCgaKKnzMJjgGaq5UcgB3smTB2xMKUhBd9THqpt
112FSx1rMYoJGKadLGduWbfUMakPdMyu7xNGq93B6KG18giBuGPk
112tvktC9SdCmSLcTXNK3GR3vU6DUbzKhshFpzFXzj5Kq9zzYQ3
112E9LYi3iAtPYn3SoDCfy9BpEBVGU4uHxEdEiXt2jQECj2TCkBT
Discord Handle
mcauser#2659
Reason(s)
6 hotspots originating in Sydney AU, moved to the middle of nowhere (assumed by mistake), before moving again to a tiny rural town QLD (population: 122). Three examples of assert location GPS spoofing (exact same lat/lng).
Spoofing evidence: These two hotspots were originally asserted in Sydney at the exact same lat/lng. 💥
11VcWErwqA28Zopiutn1vWG8QU2E44nWg9e3sLy3fZqy6ay67JZ
11CJGQS3oBrwqCgaKKnzMJjgGaq5UcgB3smTB2xMKUhBd9THqpt
https://explorer.helium.com/txns/7YsZsoe43fVS6HgfwMUBR5IE6nP3aMuJN1hsgCYFS9w
https://explorer.helium.com/txns/MEI9MCPxsI6DpQi9aB4h4GZki_gRq7s9oYWjC8tUMRU
Spoofing evidence: These two relocated to "the middle of nowhere" with the exact same lat/lng. 💥
11CJGQS3oBrwqCgaKKnzMJjgGaq5UcgB3smTB2xMKUhBd9THqpt
112tvktC9SdCmSLcTXNK3GR3vU6DUbzKhshFpzFXzj5Kq9zzYQ3
https://explorer.helium.com/txns/ZbTszGKZICD49gCGUz2oBPpuuWvybSsh9sZoaSdUh1A
https://explorer.helium.com/txns/FSm9rphyGcnaLiCKvjYZt_8ghCT5xb6VDknggxML0cc
Spoofing evidence: These two asserted in Sydney at the exact same lat/lng. 💥
112tvktC9SdCmSLcTXNK3GR3vU6DUbzKhshFpzFXzj5Kq9zzYQ3
112E9LYi3iAtPYn3SoDCfy9BpEBVGU4uHxEdEiXt2jQECj2TCkBT
https://explorer.helium.com/txns/h8TV1VJ0KJfb9TF0SAwCT89LZylb4WMqgMkcqW5JeYg
https://explorer.helium.com/txns/HEufyy_Lnp5Hnelc-xID-NLwu6w5PvfQl9J5OyPQmhw
This hotspot had a witness in Sydney then 25hrs later one in Bedourie. According to Google maps, it's at least a 26 hour non-stop drive (2303km).
112E9LYi3iAtPYn3SoDCfy9BpEBVGU4uHxEdEiXt2jQECj2TCkBT
https://explorer.helium.com/txns/7X9gH5MFUo8ZOdFDjPnm_vu1qVA-hEYXROxCnNHQb90
https://explorer.helium.com/txns/tuV1g9PUjwi_fGbuZNVOexqdMt6wrBMVG0oJtJUYM4w
A 2nd wallet was created and 3 previous hotspots were moved across to rebalance.
https://explorer.helium.com/txns/dzB3hAaJBiDLEZ3MonPqu3VPgbr9e0eOBmDkbbPBodM
https://explorer.helium.com/txns/9jF386YStKBQzEA7USnmCXgeN5ip8KeWRHVhJCMMxqQ
https://explorer.helium.com/txns/1TdVXEhrQ2CrJQ_e5ZL6lvupUXSjTw7f9-_h6MTzC_E
Only PantherX hotspots exist in this small rural town, with no supported mapping or data transfers.
Wallets:
13zC3EJZz4FHrbVzvKZAyAx84EB6r3rPeHxLPZ2SJu62R7DgWHG
14G1uqy7hnY7Qh6peyw5gqiXoAbUgK9wJMeiQoqHDk3yiKTXdB5

This looks valid.

Multiple hotspots asserting the exact same lat/lng.
Incorrectly asserting in the middle of a mountain range, before moving to a small town nearby.
Witnessing in two locations impossibly far apart
Transferring hotspots to separate accounts to avoid detection


[android] heads-up notification

How to show heads-up notification on android?
I am using the following payload from fcm.
{
    to: <deviceToken>,
    priority: 'high',
    data: {
        custom_data_key: 'custom_data_value'
    },
    notification: {
        title: 'Push notification test',
        body: message,
        click_action: 'fcm.ACTION.HELLO',
        sound: 'default'
    }
}

haven't experimented with this yet. let me try

opened a ticket to fcm. will keep you updated

@evollu did you happen to see this?
https://stackoverflow.com/questions/37458530/firebase-when-receive-push-notification-did-not-receive-the-popup
We may have to key on didReceiveNotification
no popup will occur if the app is in the foreground either, only background

no. the didReceiveNotification...withHandler is enough.
are you not having banner for iOS? ios should work perfectly

@peterpme is your problem solved?

@kayrules
all supported feature is here for now. They've added a feature request but don't know when it will be available
So if you need head up display, send notification with data only and create notification locally is the only way for now.

Noted and thanks @evollu

If i send only data, head up notification works fine
but, can`t recieve notification if i killed app
Could you give me a solution to head up notification for all status?
(status : foreground, background, killed)

what is your payload

Payload

Android platform

Result (foreground, background, killed)

for android only:
payload = {
      to: 'gcm',
      data: {
          custom_notification: {
              title: message.title,
              body: message.body,
              icon: NOTIFICATION_ICON,
              color: NOTIFICATION_COLOR,
              priority: 'high',
             id: message.id,
             group: message.group
      } }
    };

This works well!
Thank you so much :)

@hoiheart @evollu
Is this still working? Because when I try the above payload I get
Error: Messaging payload contains an invalid value for the "data.custom_notification" property. Values must be strings.
I have tried switching everything to strings and it still says this.
				var payload = {
				      'data': {
				          	'custom_notification': {
				            	'title': 'title',
				              	'body': 'body',
				              	'priority': 'high',
				              	'id': 'id',
				      } }
				  };

Is custom_notification still valid? It looks like it is not working anymore.

Same issue for me... says that "data.custom_notification" isn't valid.

Looking through the source code, I see this:

    public void buildLocalNotification(RemoteMessage remoteMessage) {
        if(remoteMessage.getData() == null){
            return;
        }
        Map<String, String> data = remoteMessage.getData();
        String customNotification = data.get("custom_notification");
        if(customNotification != null){
            try {
                Bundle bundle = BundleJSONConverter.convertToBundle(new JSONObject(customNotification));
                FIRLocalMessagingHelper helper = new FIRLocalMessagingHelper(this.getApplication());
                helper.sendNotification(bundle);
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
    }

Looks like it may need to just be a JSON string... will try JSON.stringify on the custom_notification value.

@seanadkinson
Hey I saw this too just yesterday.
I think part of my problem was that I was using admin.messaging to send notifications and it does not allow nested objects. However I might try your idea about json.stringify on the nested object.
I noticed yesterday in the example code that there is a whole other method for sending notifications using fetch and http are you using this method or admin.messaging?
Sent from my Google Nexus 5 using FastHub

Firebase should stringify nested object itself automatically.
Is it a breaking change then?

Hey @evollu
I spoke to firebase support and they said this:

As far as I know, there are no changes in the structure of the payloads in FCM and 2-level JSON is not supported.

So they seem to think nested objects have never been supported.
I was using admin.messaging to send my payload. I also wasn't JSON.stringifying the payload. Could this be the issue?

Just tried to JSON.stringify the payload with admin.messaging() and can confirm that it does not work.

OK I can confirm that this does work still but only with fetch send function in the example. It does not work with admin.messaging.
Here is what I am doing:
    _send(body, type) {
        let headers = new Headers({
            "Content-Type": "application/json",
            "Content-Length": parseInt(body.length),
            "Authorization": "key=" + firebaseConstants.KEY
        });

        fetch(firebaseConstants.API_URL, { method: "POST", headers, body })
            .then(response => {
                console.log("Send " + type + " response", response)
                switch (response.status) {
                    case 500: console.error('Some server error'); break;
                    case 401: console.error('Unauthorized'); break;
                    // ...
                }
                if (response.ok) {
                    return response;
                } else {
                    // push error further for the next `catch`, like
                    return Promise.reject(response);
                    // or another way
                    throw Error(response.statusText);
                }
            })
            .catch(error => {
                console.log("Error sending " + type, error)
            });
    }

Here is my payload:

            let body = {
                "to": this.friend.token,
                "data": {
                    "custom_notification": {
                        "body": message.text,
                        "title": this.friend.name,
                        "color":"#00ACD4",
                        "priority":"high",
                        "id": id,
                        "show_in_foreground": true,
                        "sound": "default",
                        "click_action": "fcm.ACTION.OPEN_NOTIFICATION",
                        "vibrate": 300,
                        "lights": true,
                        uid: this.friend.uid
                    }
                },
                "priority": "high",
                "click_action": "fcm.ACTION.OPEN_NOTIFICATION"
            }
            //"icon":"ic_launcher",
            //"large_icon": "ic_launcher",

            this._send(JSON.stringify(body), "data");

@rtman Just getting back to trying it out, but I don't think you'd stringify the entire payload, just the custom_notification value object.  Going to do some testing now though.
I am using admin.messaging btw

@evollu Yeah, they aren't stringify-ing automatically anymore I guess.
@rtman I can confirm that JSON.stringify on the custom_notification value DOES work using admin.messaging.

@seanadkinson
So you did this?
				var payload = {
				      'data': {
				          	JSON.stringify('custom_notification': {
				            	'title': 'title',
				              	'body': 'body',
				              	'priority': 'high',
				              	'id': 'id',)
				      } }
				  };

No.  Just the value of custom_notification.  See updates to README in this PR: #525

Ah ok I see now.
Any thoughts on which is better to use? Admin messaging or fetch?
Sent from my Google Nexus 5 using FastHub

Functionally the same (as far as I know), but if you are using typescript, the admin.messaging has all the types available for nice auto-complete and static validation.

Cool, I have noticed that the fetch is reliably much faster to show a notification too.
I wonder how it will work with offline situations when I implement that in the future, but I'll cross that bridge when I get to it!
Sent from my Google Nexus 5 using FastHub


Form Validation: Does not rework every form but provides tools to do so.

Draft until I can fix some more of the docs and handle some merge conflicts

I think the error messages probably shouldn't be in the input field itself because it looks like they can overlap with the input and there's not quite enough space.

@lvuch should the field level validation messages be underneath it?

@Sean-McQ we should discuss if we should merge this for 2.6.4 or hold off for 2.6.5

it would be nice to be able to tie the errors that come from the backend back to the form controls

Wouldn't this be redundant? I thought the field level front end validation was to make it so you would never see a field level validation coming from the back end after you submit.

So there are errors that the backend could return that there's no good way to catch without checking against the backend, ideally we'd catch most of these before then but we still need to handle the case wherein the backend complains.
Part of the problem about the backend error messages I've seen so far is that they don't give us sufficient information to find the specific field programmatically so we still throw those down to the bottom of the form where they've always been.

So if the back end error is "Name" has a problem, you then have to map "Name" back to the model and back to the name input? I suppose since the backend usually puts the problematic field name in quotation marks as the first word in the error message, you could get the probably grab the broken field name by saying brokenFieldName = backendError.split('"')[1]" and that would work most of the time.
But even if you mapped the error back to the original input, it would still look weird because the back end error names the input. What I'm saying is it would look weird to see an input labeled something like "Name" that has an error directly beneath it saying "Name" has a problem because you'd see the word Name twice.
But if we know a certain field needs an async validation, then we could always trigger that specific async validation with an event when that field changes.

I think a lot of woes surrounding "how to tie errors to form fields" would be solved if we could devise some sort of schema that the backend and frontend could adhere to when when working with forms and errors. Obviously easier said than done, but I know that we already have some concept of schema in our payloads, so it might not be that big of a stretch to incorporate backend validations as well.

The biggest problem with using the label of a field in the error message is that it's a bit fuzzy since there's no actual mechanism ensuring that there's only one field labeled "Name", this gets even more complicated when you consider that there might be arrays of objects in a form payload. Ideally, backend error messages will return the full path which could then be traced back to a specific field in the form.

Can we get this merged soon? Some of my v2.6.5 features depend on it.


Markov Chain bot

Firstly, thank you for sharing your code because I'm working on RPS as well for a project.
I tried understanding the Markov chain bot you used in the game but I encountered a problem when testing it. I'm not sure if it is supposed to work that way so yea.

Transition matrix elements all equal to zero when game is exited
When the I input Rock as the selection, the result is always tied no matter ; either inputted simultaneously or not.

Hi @klutzj! Thank you for taking a look at my code! I took another look and tested it as it is. I have not encountered any of the problems as you described above (the transition matrix prints out values other than 0 and if you keep playing rock you start losing every time). I am not able to determine the issue so if you can document or point it out more clearly that would be helpful.
A few possibilities:

You are not playing in expert mode (where the Markov Chain program is)
a) the win percentage shouldn't be so high when played normally
You are printing the transition matrices in relation to something else.

Also, what do you mean by inputting simultaneously?

I cannot reproduce this problem so I am closing this issue.


usage with docker-compose

Trying this:
# cat docker-compose.yml
version: '3.7'

networks:
  back-tier:

services:

  postfix-exporter:
    image: chatwork/kumina-postfix-exporter:latest
    volumes:
      - /var/spool/postfix/public/showq:/var/spool/postfix/public/showq:ro
      - /var/log/mail.log:/var/log/mail.log:ro
    command:
      - '--web.listen-address=":9154"'
      - '--postfix.logfile_path="/var/log/mail.log"'
        #- '--systemd.enable'
    ports:
      - 9154:9154
    networks:
      - back-tier
        #restart: always

Getting:
# docker-compose up
[+] Running 2/2
 ⠿ Network postfix-exporter_back-tier             Created                                                                                0.1s
 ⠿ Container postfix-exporter-postfix-exporter-1  Created                                                                                0.1s
Attaching to postfix-exporter-postfix-exporter-1
postfix-exporter-postfix-exporter-1  | 2023/04/19 11:23:39 Reading log events from "/var/log/mail.log"
postfix-exporter-postfix-exporter-1  | 2023/04/19 11:23:39 Failed to create PostfixExporter: open "/var/log/mail.log": no such file or directory
postfix-exporter-postfix-exporter-1 exited with code 1

Tried to mount the directory /var/log also, same problem.
/var/log/mail.log exists on the host with read permissions. Help welcome ....

Not sure if this works nowadays, but on my old mail server, I've used this docker-compose.yml file to run the postfix exporter:
version: '3.2'

services:
  postfix-exporter:
    # use local Dockerfile to build image
    build: .
    # mount spool and logfiles as read only to container
    volumes:
      - /var/spool/postfix:/var/spool/postfix:ro
      - /var/log/mail.log:/var/log/mail.log:ro
    # map ports to host
    ports:
      - 9154:9154
    restart: unless-stopped

Maybe this helps.

@maxkratz thanks for the speedy reply.  I started from scratch and now it builds and starts up. Thanks! I now try to integrate this with the prometheus-container ... another issue.


kdePackages.qtutilities: 6.14.2 -> 6.14.3

Automatic update generated by nixpkgs-update tools. This update was made based on information from https://github.com/Martchus/qtutilities/releases.
meta.description for kdePackages.qtutilities is: Common Qt related C++ classes and routines used by @Martchus' applications such as dialogs, widgets and models Topics
meta.homepage for kdePackages.qtutilities is: https://github.com/Martchus/qtutilities
Updates performed

Version update

To inspect upstream changes

Release on GitHub

Compare changes on GitHub

Impact
Checks done

built on NixOS
The tests defined in passthru.tests, if any, passed
found 6.14.3 with grep in /nix/store/3nfj9i7x47x21nkgn6y6vkvqcm4jr04p-qtutilities-6.14.3
found 6.14.3 in filename of file in /nix/store/3nfj9i7x47x21nkgn6y6vkvqcm4jr04p-qtutilities-6.14.3

Rebuild report (if merged into master) (click to expand)

12 total rebuild path(s)

12 package rebuild(s)

First fifty rebuilds by attrpath

kdePackages.qtforkawesome
kdePackages.qtutilities
libsForQt5.qtforkawesome
libsForQt5.qtutilities
plasma5Packages.qtforkawesome
plasma5Packages.qtutilities
qt6Packages.qtforkawesome
qt6Packages.qtutilities
syncthingtray
syncthingtray-minimal
tageditor

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/3nfj9i7x47x21nkgn6y6vkvqcm4jr04p-qtutilities-6.14.3 \
  --option binary-caches 'https://cache.nixos.org/ https://nix-community.cachix.org/' \
  --option trusted-public-keys '
  nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

(The Cachix cache is only trusted for this store-path realization.)
For the Cachix download to work, your user must be in the trusted-users list or you can use sudo since root is effectively trusted.
Or, build yourself:
nix-build -A kdePackages.qtutilities https://github.com/r-ryantm/nixpkgs/archive/cae261760b912609159824a0eb5dc56fd882e96b.tar.gz

Or:
nix build github:r-ryantm/nixpkgs/cae261760b912609159824a0eb5dc56fd882e96b#kdePackages.qtutilities

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/3nfj9i7x47x21nkgn6y6vkvqcm4jr04p-qtutilities-6.14.3
ls -la /nix/store/3nfj9i7x47x21nkgn6y6vkvqcm4jr04p-qtutilities-6.14.3/bin

Pre-merge build results
We have automatically built all packages that will get rebuilt due to
this change.
This gives evidence on whether the upgrade will break dependent packages.
Note sometimes packages show up as failed to build independent of the
change, simply because they are already broken on the target branch.
Result of nixpkgs-review run on x86_64-linux 1

7 packages built:

kdePackages.qtforkawesome
kdePackages.qtutilities
libsForQt5.qtforkawesome
libsForQt5.qtutilities
syncthingtray
syncthingtray-minimal
tageditor

Maintainer pings
cc @doronbehar for testing.

[!TIP]
As a maintainer, if your package is located under pkgs/by-name/*, you can comment @NixOS/nixpkgs-merge-bot merge to automatically merge this update using the nixpkgs-merge-bot.

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

Duplicate of https://github.com/NixOS/nixpkgs/pull/339422 .


Upgrade reference

documentation for our customers on how upgrades work.
See: https://github.com/giantswarm/giantswarm/issues/4100

finished my revision and finalized the last section
I added some comments on what IMO should not be part of this doc
The only thing missing here is now a description of releases and upgrade process(es).

Thanks for your additions!
The open task here is that I talk with Tim and he gives me the details regarding what's happening during updates. We don't have to overdo it. The goal is to give users the info they need so they can decide and prepare.

I converted last bits of bullet points into prosa. From my perspective, this is good enough for publishing.
@puja108 @teemow @xh3b4sd Fishing for approval

Wow, a tough piece to review. Thanks for pulling though until here!
BTW, I just installed a spell checker for VS code, to make future reviews a bit simpler ;-)

So I just approved my own work and will merge. 🚀


updated sortedcontainers dependency. fixes #186

Fixes #186 by removing use of a deprecated class from sortedcontainers.
Version dependency has been bumped up as well.  No CR needed I think.

Initial build failures were due to outdated dependency cache.  All green here now.


fix(channels): fix invalid assignment error that was not allowing cha…

…nnel details to toggle open on click in production builds
On current master if you build (> npm run package) you will not be able to toggle a channel to see it's details or close it (#453). After using our DEBUG_PROD it turns out it was because of a invalid assignment error. The channelClicked function was assigning the parameter to channel. Simply changing to a unique and more descriptive variable name (clickedChannel ) solves the issue.

utACK da4ae24

There are a couple of methods that accept the channel arg, might they also have this conflict?
I.e. removeClicked, displayNodeName, channelStatus,

will test now @Empact

@Empact updated with a fix to removeClicked , displayNodeName and channelStatus

utACK da4ae24


Add support for detecting Ext2 partitions

I must admin that I don't have an image at hand to test this code right now. I just ported it from #32.

Coverage decreased (-2.6%) to 79.562% when pulling 788ce5f9990a41185edb70aa1cfef07f4db4a168 on techtonik:ext2 into cb1a85bde81549704e21158d638efc1e74719ec4 on dariusbakunas:master.


feat: update typescript workshop to v2

This updates both the workshop content and code for typescript to cdk v2
re #308

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

Wanted to make sure the builds passed. Final update will bump the aws-cdk-lib version to 2.0.0

Fixed in #358


FanOutSearchBase is missing, as are other base classes

I'm looking at the C# code for FanOut, but the base class for this, and many others, are missing.
Example
https://github.com/Microsoft/GraphEngine/search?utf8=✓&q=fanoutsearchbase&type=

Aah, this is auto generated ..


opentrons-usb-bridge: add recipe for usb bridge

This PR adds a recipe to include the usb-bridge code from the monorepo in the image, as well as a systemd service to make sure the usb-bridge is always running.
This also removes a couple of recipes that were included by the Toradex BSP, libusbgx and libusbgx-examples. These recipes added a systemd service to configure the OTG port as an ethernet device on startup, which directly conflicts with our application.
Tested uploading to a robot and confirming that

When connected to USB, the robot enumerates as an OT3
systemctl shows the opentrons-usb-bridge service as running
version.json in the update package has the new field for the usb bridge

Looking good, just left one comment.

looking good!


Blank Character between First- and Lastname possible?

I changed the First- and Lastname in the Script. It works but...
Is there a possibility to make a blank character between First- and Lastname?
With a comma it works.
At this moment it looks like this: "Firstname, Lastname" but i want like this "Firstname Lastname".
My changed Line 182:
$name = $this->_concat($this->_concat($name_arr['firstname'],$name_arr['lastname']),$name_arr['additionalnames']);

push

Have you a idea @jens-maus ?

Please test the new $config['fullname_format'] = 1; config option @holzhannes implemented recently. And if this doesn't work please reopen this ticket.


Added late injection

Like subscribe function, but will send the dependences only once.

I just realized I forgot to put the new attribute inside the fundation namespace :sweat:

I will accept this, but just I plan on a new major version change in the next few weeks. The temporary branch is located here https://github.com/NVentimiglia/Foundation-Light and is very much a work in progress at the moment. One key goal of the new version is a much lighter and faster architecture.


MiqExpression.to_sql isn't properly grouping atoms in the 'or'

exp = MiqExpression.new(
  {"and"=>
    [{"AFTER"=>{"value"=>"30 Days Ago", "field"=>"MiqRequest-created_on"}},
     {"or"=>
       [{"="=>
          {"value"=>"pending_approval", "field"=>"MiqRequest-approval_state"}},
        {"="=>{"value"=>"approved", "field"=>"MiqRequest-approval_state"}},
        {"="=>{"value"=>"denied", "field"=>"MiqRequest-approval_state"}}]
     }
    ]
  }
)

exp.to_sql

Produces
["\"miq_requests\".\"created_on\" > '2016-05-24 23:59:59.999999' AND \"miq_requests\".\"approval_state\" = 'pending_approval' OR \"miq_requests\".\"approval_state\" = 'approved' OR \"miq_requests\".\"approval_state\" = 'denied'", {}, {:supported_by_sql=>true}]

I ran the same test on Capablanca and got the expected result:
exp = MiqExpression.new(
  {"and"=>
    [{"AFTER"=>{"value"=>"30 Days Ago", "field"=>"MiqRequest-created_on"}},
     {"or"=>
       [{"="=>
          {"value"=>"pending_approval", "field"=>"MiqRequest-approval_state"}},
        {"="=>{"value"=>"approved", "field"=>"MiqRequest-approval_state"}},
        {"="=>{"value"=>"denied", "field"=>"MiqRequest-approval_state"}}]
     }
    ]
  }
)

exp.to_sql

Produces
["(miq_requests.created_on > '2016-05-24T23:59:59Z' AND (miq_requests.approval_state = 'pending_approval' OR miq_requests.approval_state = 'approved' OR miq_requests.approval_state = 'denied'))", {}, {:supported_by_sql=>true}]

Note the parens around the second atom containing the ORs

I believe this is causing the MiqRequestController screen to be extremely slow with many, many miq_requests because it pulls back all of the rows and post-filters them.


[beta] left-hand preview is not appearing

Challenge Name: All lessons/challenges with a preview window
i.e.: http://beta.freecodecamp.com/en/challenges/jquery/delete-your-jquery-functions
http://beta.freecodecamp.com/en/challenges/applied-visual-design/create-visual-balance-using-the-textalign-property
Issue Description
HTML content is not appearing in the left-hand preview windows in beta. I tried clearing my cache and tested the issue in Safari, Chrome, and Firefox (having never previously logged in to FreeCodeCamp on Firefox) with identical results.
Browser Information

Browser Name, Version: Safari 10.1, Chrome 58.0.3029.96, Firefox 53.0.2
Operating System: OX 10.12.4
Mobile, Desktop, or Tablet: Desktop

Screenshot

Duplicate of #12923


submodule pythondata_software_picolibc does not have a license

submodule pythondata_software_picolibc does not have an explicit license.
@kgugala Since it has been "yoinked from pythondata-software-compiler_rt" perhaps it could also be Apache licensed?

https://github.com/picolibc/picolibc/blob/main/COPYING.picolibc

@mithro this is a different thing - it's a shim for picolibc, not picolibc itself.


Fixes #395: Support CSSO CSS compressor

Haven't submitted tests because as far as I can tell only the YUI compressor is tested?
Note that CSSO doesn't support stdin at this stage (there is a feature request for it to be added however).

Thanks a lot taking the time to propose this PR!
I'm not going to include it, but I would strongly advise you to ship your own package with this feature, as pipeline support third-party compressor adapter.

Ok - not sure why you wouldn't merge it, but that's obviously your decision :)
For anyone who would like to use CSSO with django-pipeline I'll be periodically updating my master to be inline with upstream and when I have time I may move it out into it's own repository.

No need to maintain a django-pipeline master, you can just create your own python package shipping only the csso compiler, see for example:

https://pypi.python.org/pypi/django-pipeline-browserify
https://github.com/j0hnsmith/django-pipeline-browserify


feat(inspectorMode): support tagging for cross space references []

Add the ability to add space and environment for inspectorMode attributes.
For the CSM they are automatically picked up
Closes #526

I wonder if we should include this in the docs? Maybe only after we have the opening x-space refs in new tab functionality in the webapp

As you mentioned, I would do it once we have also the counter part on the webapp :)


Find-in-Files unusable

From<EMAIL_ADDRESS>on 2013-09-11T04:17:48Z
Spyder Version:  <IP_ADDRESS>
Python Version:  2.7.4
Qt Version:      4.8.4, PyQt4 (API v2) 4.10 on Linux
What steps will reproduce the problem?

Ctrl-Shift-F 2. 3. What is the expected output? What do you see instead? Expect to see a useful, understandable dialog.
Instead, I don't know what this is supposed to be.

Please provide any additional information below
. The search-in-files, I'm sorry to say, is a f*cking disgrace!

Errors are not cleared at new search, so I don't know if it's busy or the same error occurs
It can't search in open files only
When I hide advanced options, it secretly
It searches a complete directory structure, useless when things like 3-rd party tool dirs are present
Options and buttons are all over the place
No feedback on what it's doing.
No hints on what to put in the search fields
No research on ENTER
I somehow entered wrong character, but can't for the love of god get the search to work again.
etc.

Original issue: http://code.google.com/p/spyderlib/issues/detail?id=1555

When I am looking for something in files, I tend to use Notepad++'s find/replace function.  I would be exceedingly happy if Spyder's find/replace/find all dialog were to completely mirror Notepad++'s including:
-default expansion of all hits
-search history maintained in main window
-when pressing up/down in the list of hits, the hit comes into view but the focus stays on the list
-Option to search current file or all currently open files
-Option to ignore case or use case (use case default)
-Shortcut to bring the list of hits into scope
-tab can cycle through the fields in the Find in Files dialog
Some of these things should be pretty easy and make it so I don't have to rely on Notepad++ to do any serious search and find.

Are you talking about the Find if Files pane, or the the Find dialog that's shown in the Editor when you press Ctrl+F?

The Find in Files pane.

@johnml1135 thanks for the suggestions, we are working on an improved version of the find in files tool for 3.1


Include information on 'fetch upstream' in developer documentation

Describe the bug
GitHub has a 'fetch upstream' function that allows the easy synchronisation of a fork with the original repository, which can be useful when a developer has not worked on their fork for some time and is many commits ahead.
Expected behavior
This information should be included in the documentation.

Solved by #330


Strip vendor package name in go-packages

When using Vendor directories, go-packages suggest a package name including a project name like a github.com/buzztaiki/usedep/vendor/github.com/golang/glog.
This PR strip preceding paths from vendoring package name in go-packages.
I think that it is useful when to use vendoring support tool like a dep.

PR stalled, closing.


Add breaking change for v0.2.2

What does this PR change?
Document breaking change for v0.2.2
Does the PR depend on any other PRs or Issues? If yes, please list them.
Closes #199
Checklist
I confirm, that I have...

[ ] Read and followed the contributing guide in CONTRIBUTING.md
[ ] Added tests for this PR
[ ] Formatted the code using go fmt (if applicable)
[ ] Updated documentation on the Paralus docs site (if applicable)
[ ] Updated CHANGELOG.md

Codecov Report

Merging #211 (7d97fb2) into main (a09f73e) will not change coverage.
The diff coverage is n/a.

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
@@           Coverage Diff           @@
##             main     #211   +/-   ##
=======================================
  Coverage   34.62%   34.62%
=======================================
  Files          74       74
  Lines       11692    11692
=======================================
  Hits         4048     4048
  Misses       7094     7094
  Partials      550      550


Make fields description available on pages (records, record, item)

Additionally extracted fields html fragment which can be re-used on multiple pages, sample from homepage:
<div th:replace="fragments/field-list.html::field-list(${fields})"></div>
story: https://trello.com/c/SwsyrCzo/619-make-field-descriptions-available-to-records-record-and-item-pages

Looking good


bug: Ionic Nav Bar appears before state change

Essentially, on slower iOS devices, the status bar is showing up before the actual transition. See attatched GIF. It should be attatched to the state when the previous one uses hide-nav-bar="true". I also used $ionicNavBarDelegate.showBar(false) but to no avail.

+1， same issue on android

I saw this too. I didn't found a solution.

Hello! Thanks for opening an issue with us, we just need a little more info from you so that we can better help you with your issue. Would you mind posting a code sample, plunkr or codepen that we can use to reproduce your issue? Also, would you mind running ionic info and posting the output? Thanks again!

Hello all! As it seems it has been a while since there was any activity on this issue i will be closing it for now. Feel free to comment if you are still running into this issue. Thanks for using Ionic!

@jgw96 Can you confirm it was fixed?

Cordova CLI: 6.0.0
Gulp version:  CLI version 3.9.0
Gulp local:   Local version 3.9.0
Ionic CLI Version: 1.7.12
Ionic App Lib Version: 0.6.5
OS: Windows 8.1
Node Version: v4.2.3

Hello! Unfortunately i am not able to reproduce this issue, can you still reproduce it? Thanks for getting back to me by the way (:

I'm not able to test this right now. All i can tell is that I have one view the login screen which is set like this
<ion-view view-title="Login" hide-nav-bar="true" >

@talamaska ok, thanks for the info! If you get a chance and can make a plunker or git repo that i can use to reproduce this issue that would be great! (: Thanks for using Ionic!


Helm improvments

This PR adds a GitHub action for linting Helm charts on pull requests and fixes minor issue with namespaces in the Helm chart installation guide.
Helm linter is basically validating helm chart values in a chart's values.yaml file with JSON schemas.

Here is the GitHub action result of the first linter run: https://github.com/containers/nri-plugins/actions/runs/5377726551/jobs/9756576779?pr=85

@fmuyassarov The PR as such looks fine to me, but my related question is: shouldn't/couldn't we please have a helm chart for the template policy as well ? One of the main point of the template policy is that it serves as a code monkey see, code monkey do template for folks to bootstrap developing their own custom policy, without having to first understand all the bits and pieces in this repo to get things right. IMO, this should also cover anything related to deployment, including helm charts (and event documentation).

@fmuyassarov The PR as such looks fine to me. That said, I have a tangentially related question now that I look at the changes: Shouldn't/couldn't we, please, have a helm chart for the template policy as well ?
One of the main points of the template policy is that it serves as a code monkey see, code monkey do-template for folks to bootstrap developing their own custom policy. This should happen without first having to understand all the bits and pieces in this repo to get things right/up and running. And IMO, this should cover anything related to the policy , including deployment, helm charts, and even documentation.
@marquiz, @jukkar WDYT ?

I can definitely add chart for the template policy + kustomize installation. Would you like that to happen on this PR or shall I send a seperate PR for that (personally I prefer to have separate PR)?

Shouldn't/couldn't we, please, have a helm chart for the template policy as well ?

Makes sense, +1 to this.

Yes, I also think separate PR is fine.


[values4k] BaseX values

Any interest in adding value classes for common bases, i.e. 16, 32, 36, 64?  They have applications not only in encoding binary, but also for setting easily understood constraints on identifiers.  All of these values can be built with the existing tools, but it might be nice to have additional shortcuts.
However, there's no single proper way to handle out-of-bound characters; rather than reject the entire string, the developer may choose to have the invalid characters stripped, or coerced (in some cases).  Making a single decision on which strategy to use might disqualify the value for many use-cases, but supporting multiple cases with options may be more than we want to handle in this library.  Thoughts?
Example: For a base16/36 value, the developer may choose to coerce to uppercase
Example: For a MAC address, the developer may choose to strip the colon separators to coerce it to base16

I quite like this idea. As for the invalid values, I think that rejecting them is a fair default. For custom cases (such as the MAC address) I'd tend to do a custom type with more targeted behaviour. Maybe we can try to modularise the aspects separately so you can compose custom types out of those behaviours? 🤔


Inserting a bearing offers more than just the bearing because the DO NOT USE PARTS is named 'PARTS DO NOT USE'

(This should be a 1 line fix...)
If you attempt to insert the vgroove bearings from goBILDA > MOTION > Bearings > Specialty Bearings > V-Groove Ball Bearings

It should just insert the bearing, but clicking on the first one https://cad.onshape.com/documents/9376d78e0e5488ef406ae789/w/93c5127fe5c4d6048341d3b4/e/4a4b8805aa32b34621b57335 gives you:

Clicking on the second one gives you
https://cad.onshape.com/documents/4f38146bc0abd0dbffa37cef/w/fa9064dc1dd6b37fbdfd1da8/e/5a7bddf1681952a8266aede6

Looking at both models, they seem to follow the standard of having the parts with a "Do not use these parts" and the tab and the information for it appears to be correct.

getInsertChoices should filter them out, but the check on line 1838 Looks for the string 'DO NOT USE THESE PARTS' but the string in the model is 'PARTS DO NOT USE' so we should update the app to look for that string too.

This should be resolved now, @toebes you can make sure.


Changing Cable Lock mode returns error

I really like this integration. The new set mode (or is it select mode) will make it much easier for new users to get started with controling their Garo.
I also like that it's now possible to select the lock mode for the cable. However It doesn't work for me. When I go into the integration and select a different lock setting I get the error message "Failed to perform the action select/select_option. list indices must be integers or slices, not str".
I have set my cable to be locked in the Garo "App" but it would be really handy if I could unlock it from HA so I wouldn't have to go through the Garo "App".
Is it something in the integration or am I doing something wrong?

@ahammas Hi, it's the integration I don't have a box with an outlet myself. So I haven't been able to test it. But I'll see if I can figure out where it goes wrong.

I found an error, give 2024.9.2 a go and see if it works better.

Wow! Quick action!
It works now, sort of. No error message anymore and it's possible to change the setting but when "Locked" is selected it also checks the "Locked with power loss unlock" option. Unlocked works fine, none of the options are checked if this is selected.
Almost there :)

@ahammas it looks like I've managed to flip the values of Locked and Locked+Power loss unlock

Give 2024.9.3 a try, the lock settings "should" be correct now

Great! Now it works as expected. Good job!


X11 forwarding from localhost docker to X11 server fails

A get_local_addr() issue again: with docker-native, $DOCKER_HOST is not set, and <IP_ADDRESS> is used, which connects inside Docker instead of the host.

Actually happens on any local Docker server, because I rely on $DOCKER_HOST...

9bc8f61b tries to connect to google.com if DOCKER_HOST is not set, or if it's set to 127.*.


Tinted directional windows need nuking from the repo

They don't work properly atm.
Prototype + pillar + packed + packedxmas changes req'd.

Besides all the current open issues that effect thindows as a whole, what about tinted windows don't work properly?

What about tinted windows don't work properly? I don't see what's working improperly with them, and I use them to clever effect on a few spots in my map. Please no nukerino.

non fulltile occluders aren't currently supported, in some situations they look fine but a lot of the time they completely break


Remove support for PHP 7.2 and 7.3

PHP 7.2 is not maintained at all anymore and PHP 7.3's security support ends in 2 months.

does this actually allow to reduce the maintenance work on Behat (by simplifying the code) or would it only push projects to ask for a longer support of Behat 3.8 due to needing to run their CI on those PHP versions ?

I'd say it makes maintenance and contributing easier since we wouldn't have to think whether a feature was introduced in PHP 7.2 or 7.3. At the same time, we'd be able to introduce typed properties in new or refactored code.

Please keep at least PHP 7.3 until some major unavailable language features are needed

Please keep at least PHP 7.3 until some major unavailable language features are needed

Currently you could not use behat in a Symfony 6 Project, because Symfony has a dependency on psr/container ^2 with has >=7.4

symfony/dependency-injection  v6.0.2  requires  psr/container (^1.1|^2.0)
symfony/service-contracts     v3.0.0  requires  psr/container (^2.0)

If you want to use behat you can still use an old version, but keeping unsupported PHP versions simply locks out everyone who wants current software.
I think doing a new Behat major version and dropping the php 7 support entirely should be the way to go.

@B4rb4ross4 symfony/service-contracts v3.0.0 indeed requires psr/container (^2.0). but Symfony 6 requires symfony/service-contracts (^1.1.6|^2.0|^3.0). So it is still possible to install things.
and Behat itself could add support for newer versions of psr/container without dropping support for older versions at the same time. That's 2 separate things

Yeah, I think that's the key (from @stof)

and Behat itself could add support for newer versions of psr/container without dropping support for older versions at the same time. That's 2 separate things.

Whenever PHP requirements are going to change, you can create the stable branch 3.10, keeping requirements unmodified and then go for all the new and breaking stuff in master, which first release will be 4.0.
And, at the same time, in the 3.10 branch, without changing requirements, fixes can be accepted towards allowing them to work with php81, php82, php83 (while possible and / or there are contributions to it) while keeping the old versions working.
So, that supports ^3, ^4... "semantic" versioning, with people adhering to the majors that their projects really need, being immune to "sudden" changes to requirements.
In fact, I recently commented @ "sister" https://github.com/FriendsOfBehat/MinkExtension/pull/11#issuecomment-1005970629 because of the very same problem (sudden raise of requirements).
I really think that things can be better organised, in fact I'm sure that if we go towards the branched alternative, people will be keen to try to keep the "old" ones working, because in practice, everybody out there uses "old" versions (because of distros, because of libraries...) a lot.
Anyway, that's the way I see it, how we could easily make things better for everybody.
Ciao :-)

There's no need to bump the major version for a dependency upgrade (bunmping requirements) if the api doesn't change (this is the case here), as stated in the semver document : https://semver.org/#what-should-i-do-if-i-update-my-own-dependencies-without-changing-the-public-api
So if you can't use the newest php version, you will be stuck on an inferior minor version, as composer won't install it. End of story.
If you want the newest features that are brought by with the requirements increase... then upgrade your stuff. You can't have both, as it's a hassle to maintain something for a version that is not even supported anymore by the upstream of php for example, and forces to use hacks to support newest and actual versions.

I agree there is not "need". Just saying it "may work", with a major or a minor branching, I don't mind how the "next", incompatible with old php versions, is named (3.11 or 4.0), just interested into keeping 3.10.x working as long as possible and accepting stuff there that may be interesting.
All this because using a "radical/quick" pace adopting new php versions (and discarding old ones, specially this) is not how the world, in practice, works.
Of course, I'm looking to this from the "client" POV, heh.
Also note that all this discussion is relatively non-sense beacuse, what I'm interested on, is about testing my products with old PHP versions (web servers using them). That's completely different from the PHP version to run behat (just it's a general commodity for both to be the same).
Thanks for all the hard work!
Ciao :-)

We've created a 4.x branch, @pamil can you please PR there with what you think a sensible support level would be?


Use Redis 6 for Azure Cache for Redis

Rule request
Suggested rule change
Use the latest supported version of Redis with Azure Cache for Redis.
Applies to the following
The rule applies to the following:

Resource type: Microsoft.Cache/Redis

Additional context
Set Redis version for Azure Cache for Redis

Unassigning myself from this one incase anyone else wants to have a go at this for a good first issue 🙂.

I've created a rule and will run test against it. Steps remaining:

Create a test to test the rule
Take a copy of JSON deployment and run test against it
Deploy Azure Cache for Redis and test against it (optional)
Update documentation


FIX: Streaming Ganglion over WIFI

I had to pass gains for Ganglion into the Wifi Shield server otherwise channel data was always empty when streaming. Added for Cyton too for consistency. #51
Also set high speed as false in the non-high speed script for streaming data over Wifi so it can output JSON data.

did this work? I'm about to try it


There is no format for download

I tried to use this package for more than video and playlist and each time I get this Exception
Masih\YoutubeDownloader\YoutubeDownloader::downloadVideo
C:\Users\Yazan\Desktop\Youtube Downloader\YTD\vendor\masih\youtubedownloader\Masih\YoutubeDownloader\YoutubeDownloader.php:974

Sorry, this package is abandoned and I'm not maintaining it anymore


Sync Leave

Implement sync group leaving, remove from both storage and memory

@tianyuan129 I can't add you as a reviewer , but this is my PR to add code back into your sync branch. Since this is my first commit for this project I am a bit shaky with the style/logic; would really appreciate any feedback you have.

Actually I think it's quite good to me.


Compilation fails when libpng does not support APNG

Compilation fails when linking against a libpng without the apng patch set applied.
Would it be possible to detect this at compile-time and disable APNG support if libpng does not support it either?
FAILED: Lagom/Userland/Libraries/LibGfx/CMakeFiles/LibGfx.dir/ImageFormats/PNGLoader.cpp.o
/usr/bin/c++ -DENABLE_COMPILETIME_FORMAT_CHECK -DLibGfx_EXPORTS -I/tmp/ladybird -I/tmp/ladybird/Userland/Services -I/tmp/ladybird/Userland/Libraries -I/tmp/ladybird/Build/ladybird/Lagom -I/tmp/ladybird/Build/ladybird/Lagom/Userland/Services -I/tmp/ladybird/Build/ladybird/Lagom/Userland/Libraries -I/tmp/ladybird/Meta/Lagom/../.. -I/tmp/ladybird/Meta/Lagom/../../Userland -I/tmp/ladybird/Meta/Lagom/../../Userland/Libraries -I/tmp/ladybird/Meta/Lagom/../../Userland/Services -I/tmp/ladybird/Build/ladybird -O2 -pipe -march=armv8-a+crc+crypto -mtune=cortex-a72.cortex-a53 -mabi=lp64 -fstack-protector-strong -mharden-sls=all -std=c++23 -fPIC -fdiagnostics-color=always -Wall -Wextra -fno-exceptions -ffp-contract=off -Wno-invalid-offsetof -Wno-unknown-warning-option -Wno-unused-command-line-argument -Werror -Wno-expansion-to-defined -Wno-literal-suffix -Wno-dangling-reference -fno-semantic-interposition -fvisibility-inlines-hidden -Wno-maybe-uninitialized -Wno-shorten-64-to-32 -fsigned-char -ggnu-pubnames -fPIC -D_FILE_OFFSET_BITS=64 -O2 -g1 -MD -MT Lagom/Userland/Libraries/LibGfx/CMakeFiles/LibGfx.dir/ImageFormats/PNGLoader.cpp.o -MF Lagom/Userland/Libraries/LibGfx/CMakeFiles/LibGfx.dir/ImageFormats/PNGLoader.cpp.o.d -o Lagom/Userland/Libraries/LibGfx/CMakeFiles/LibGfx.dir/ImageFormats/PNGLoader.cpp.o -c /tmp/ladybird/Userland/Libraries/LibGfx/ImageFormats/PNGLoader.cpp
/tmp/ladybird/Userland/Libraries/LibGfx/ImageFormats/PNGLoader.cpp: In function ‘AK::ErrorOr<AK::NonnullRefPtr<Gfx::Bitmap> > Gfx::render_animation_frame(const AnimationFrame&, const AnimationFrame&, const Bitmap&)’:
/tmp/ladybird/Userland/Libraries/LibGfx/ImageFormats/PNGLoader.cpp:210:10: error: ‘PNG_DISPOSE_OP_BACKGROUND’ was not declared in this scope
  210 |     case PNG_DISPOSE_OP_BACKGROUND:
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~
/tmp/ladybird/Userland/Libraries/LibGfx/ImageFormats/PNGLoader.cpp:213:10: error: ‘PNG_DISPOSE_OP_PREVIOUS’ was not declared in this scope
  213 |     case PNG_DISPOSE_OP_PREVIOUS:
      |          ^~~~~~~~~~~~~~~~~~~~~~~
/tmp/ladybird/Userland/Libraries/LibGfx/ImageFormats/PNGLoader.cpp:220:10: error: ‘PNG_BLEND_OP_SOURCE’ was not declared in this scope
  220 |     case PNG_BLEND_OP_SOURCE:
      |          ^~~~~~~~~~~~~~~~~~~
/tmp/ladybird/Userland/Libraries/LibGfx/ImageFormats/PNGLoader.cpp:223:10: error: ‘PNG_BLEND_OP_OVER’ was not declared in this scope
  223 |     case PNG_BLEND_OP_OVER:
      |          ^~~~~~~~~~~~~~~~~
/tmp/ladybird/Userland/Libraries/LibGfx/ImageFormats/PNGLoader.cpp: In member function ‘AK::ErrorOr<long unsigned int, AK::Error> Gfx::PNGLoadingContext::read_frames(png_structp, png_infop)’:
/tmp/ladybird/Userland/Libraries/LibGfx/ImageFormats/PNGLoader.cpp:234:9: error: ‘png_get_acTL’ was not declared in this scope; did you mean ‘png_get_sCAL’?
  234 |     if (png_get_acTL(png_ptr, info_ptr, &frame_count, &loop_count)) {
      |         ^~~~~~~~~~~~
      |         png_get_sCAL
/tmp/ladybird/Userland/Libraries/LibGfx/ImageFormats/PNGLoader.cpp:237:9: error: ‘png_set_acTL’ was not declared in this scope; did you mean ‘png_set_sCAL’?
  237 |         png_set_acTL(png_ptr, info_ptr, frame_count, loop_count);
      |         ^~~~~~~~~~~~
      |         png_set_sCAL
/tmp/ladybird/Userland/Libraries/LibGfx/ImageFormats/PNGLoader.cpp:240:13: error: ‘png_read_frame_head’ was not declared in this scope
  240 |             png_read_frame_head(png_ptr, info_ptr);
      |             ^~~~~~~~~~~~~~~~~~~
/tmp/ladybird/Userland/Libraries/LibGfx/ImageFormats/PNGLoader.cpp:250:51: error: ‘PNG_INFO_fcTL’ was not declared in this scope; did you mean ‘PNG_INFO_pCAL’?
  250 |             if (!png_get_valid(png_ptr, info_ptr, PNG_INFO_fcTL)) {
      |                                                   ^~~~~~~~~~~~~
      |                                                   PNG_INFO_pCAL
/tmp/ladybird/Userland/Libraries/LibGfx/ImageFormats/PNGLoader.cpp:254:13: error: ‘png_get_next_frame_fcTL’ was not declared in this scope
  254 |             png_get_next_frame_fcTL(png_ptr, info_ptr, &width, &height, &x, &y, &delay_num, &delay_den, &dispose_op, &blend_op);
      |             ^~~~~~~~~~~~~~~~~~~~~~~

I ran into a similar issue earlier. vcpkg should be getting libpng for us (with the patch set applied), because libpng is a vcpkg dependency. This problem arises because clangd trying to get use system's libpng.
The problem (on my system) was that I was overriding $CPATH and $LIBRARY_PATH (I overrode them trying to fix a separate build issue).

I'm neither using clang nor vcpkg.
I build directly from source using system tools.

We're in a similar situation to Firefox in this regard. APNG is supported by all the other browsers, so we want it as well. So whatever those distros do for Firefox wanting the APNG patch is the same deal we're going to ask for

I'm not against APNG, I'm just asking for APNG support being guarded behind #ifdef PNG_APNG_SUPPORTED.
This way, when Ladybird is compiled against a patched libpng you get the niceties of animated PNGs and if not, well, not.
A browser without APNG is still better than no browser, right?

I'm neither using clang nor vcpkg. I build directly from source using system tools and GCC.
That's weird, the build system is supposed to pull in libpng from vcpkg

That's weird, the build system is supposed to pull in libpng from vcpkg. Was that changed?

vcpkg is a package manager, not a build system. its job is to find packages for us, and help us link to them. In a perfect world using a system package manager would work as well.
That being said, we simply must have APNG. It is supported by everyone.
https://github.com/pnggroup/libpng/issues/267
https://caniuse.com/apng
We should be looking for a solution to get APNG working in more environments, rather than disabling the feature because some distros don't want to ship a patch they consider less than ideal.

Is there at least some way to give a better error message here?

I also had this issue on MacOS, and like @dzfrias said, it was because my system's libpng installation was getting included instead of the one installed by vcpkg. For me, the build system kept putting -isystem /opt/local/include into the compile command, and I couldn't figure out how to get rid of it, so I eventually just renamed /opt/local/include/png.h to /opt/local/include/png.h.bak and the error went away. Super hacky, but it seems to have worked.

@ADKaster while vcpkg currently preferred by developers, it is not the only way to find packages. If you must have APNG you need to check its existence and show correct error message if it is not present


Hermes not usable with Processing 3 in Eclipse

Might be related to #6
Exception in thread "Animation Thread" java.lang.NoSuchMethodError: processing.core.PApplet.addKeyListener(Ljava/awt/event/KeyListener;)V
at hermes.postoffice.PostOffice.POInit(Unknown Source)
at hermes.postoffice.PostOffice.<init>(Unknown Source)
at hermes.World.<init>(Unknown Source)

The above happens when I try to construct a World.
System info:

Elementary OS freya 64-bit
Oracle JDK 1.8.0_74
Eclipse MARS.2 (4.5.2)

Yes. This is the same bug. I'm closing this as a duplicate; please subscribe to notifications on #6 for updates.


IPFS Update Sept-Oct 2022 IPFS 1.3

** Describe the use case**
We are working through an update to the learning goals, names of sections, and where we arrange the content in that section. See the work here: https://miro.com/app/board/uXjVOB6tchQ=/
** Describe the problem**
Update the section(s) of the curriculum & learning Goals
To Dos

[ ] Update the Goals on curriculum page

[ ] Update sections (name if applicable) & come up with sub-goals

[ ] Move and re-write content (without deleting content) to align to learning goals

[ ] Update Scope & Sequence

[ ] Update the Assessment Qs

[ ] Update the Pre & section quizzes

When you work on this issue, start on the branch:
git checkout feat/ipfs-update
git checkout -b <name>/ipfs1.?

related to #156