Rework backend to be more efficient

Calculations for user rank and networth all now run by a ScheduledServlet, which is pinged by the Python script
Servlets reworked to only deliver required information and not perform ranking calculations

Servlets added:

RecentBuys servlet returns a list of recent purchases from other users in the same competition
CompetitionsServlet returns a list of competition summaries for all the competitions the user is in
SingleCompetitionServlet returns this information for just one competition, eg in case of a refresh of competition page
CompetitorsServlet returns a list of relevant information about all the other competitors in this competition

Objects added:

BasicCompetitor is a minimalist competitor object used only for ranking purposes in the ScheduledServlet
CompetitionSummary contains key info about a competition, for purposes of the scrolling competition dashboard display
CompetitorInfo contains networth and investment information about a competitor
RecentBuy contains summary information about a purchase

Resolves #85, resolves #86, resolves #87, resolves #88, resolves #89

The lack of colours makes this difficult but here for clarity - the crossed out ones are LGTM, the bolded ones just need clarification, the ones with no text decorations I assume don't exist at this point in time. Is this correct?

The lack of colours makes this difficult but here for clarity - the crossed out ones are LGTM, the bolded ones just need clarification, the ones with no text decorations I assume don't exist at this point in time. Is this correct?

Also can u pls fix the merge conflicts before merge

Also can u pls fix the merge conflicts before merge

The lack of colours makes this difficult but here for clarity - the crossed out ones are LGTM, the bolded ones just need clarification, the ones with no text decorations I assume don't exist at this point in time. Is this correct?

I have a servlet named InvestmentsServlet already in master. It returns info about every investment owned by the current user, including amt invested, investment date, sell date, current worth, as well as a list of all the data points on it starting from a week prior to investment date. In the case where the investment has not been sold, sell date is returned as 0. I'm going to assume this is sufficient for both the history of price of sgonks owned bullet point, as well as the list of unsold sgonks - all you have to do for that one is filter by the sell date.

The lack of colours makes this difficult but here for clarity - the crossed out ones are LGTM, the bolded ones just need clarification, the ones with no text decorations I assume don't exist at this point in time. Is this correct?

I have a servlet named InvestmentsServlet already in master. It returns info about every investment owned by the current user, including amt invested, investment date, sell date, current worth, as well as a list of all the data points on it starting from a week prior to investment date. In the case where the investment has not been sold, sell date is returned as 0. I'm going to assume this is sufficient for both the history of price of sgonks owned bullet point, as well as the list of unsold sgonks - all you have to do for that one is filter by the sell date.

I'm assuming this:

History of all competitor ranks (for the chart): I imagine this is a list, where each list item is:

Person name
A list of this person’s net worth over time
Doesn't yet exist, right?

no it doesn't. It would require me to maintain time series trends for user networth in datastore along with the trends data. It's doable but wasn't in the project plan so I didn't code it up. From my point of view it's not an essential feature, WDYT?

I'm assuming this:

History of all competitor ranks (for the chart): I imagine this is a list, where each list item is:

Person name
A list of this person’s net worth over time
Doesn't yet exist, right?

no it doesn't. It would require me to maintain time series trends for user networth in datastore along with the trends data. It's doable but wasn't in the project plan so I didn't code it up. From my point of view it's not an essential feature, WDYT?

The lack of colours makes this difficult but here for clarity - the crossed out ones are LGTM, the bolded ones just need clarification, the ones with no text decorations I assume don't exist at this point in time. Is this correct?

I have a servlet named InvestmentsServlet already in master. It returns info about every investment owned by the current user, including amt invested, investment date, sell date, current worth, as well as a list of all the data points on it starting from a week prior to investment date. In the case where the investment has not been sold, sell date is returned as 0. I'm going to assume this is sufficient for both the history of price of sgonks owned bullet point, as well as the list of unsold sgonks - all you have to do for that one is filter by the sell date.

Ah okay - so filtering for unsold sGonks for the "currently owned investments" will be done on my end, I see. That can be done easily enough.
Will this be a problem with querying for the "currently owned investments" when a user is deep into a competition and has waaaay more sold sgonks than unsold sgonks?

The lack of colours makes this difficult but here for clarity - the crossed out ones are LGTM, the bolded ones just need clarification, the ones with no text decorations I assume don't exist at this point in time. Is this correct?

I have a servlet named InvestmentsServlet already in master. It returns info about every investment owned by the current user, including amt invested, investment date, sell date, current worth, as well as a list of all the data points on it starting from a week prior to investment date. In the case where the investment has not been sold, sell date is returned as 0. I'm going to assume this is sufficient for both the history of price of sgonks owned bullet point, as well as the list of unsold sgonks - all you have to do for that one is filter by the sell date.

Ah okay - so filtering for unsold sGonks for the "currently owned investments" will be done on my end, I see. That can be done easily enough.
Will this be a problem with querying for the "currently owned investments" when a user is deep into a competition and has waaaay more sold sgonks than unsold sgonks?

The lack of colours makes this difficult but here for clarity - the crossed out ones are LGTM, the bolded ones just need clarification, the ones with no text decorations I assume don't exist at this point in time. Is this correct?

I have a servlet named InvestmentsServlet already in master. It returns info about every investment owned by the current user, including amt invested, investment date, sell date, current worth, as well as a list of all the data points on it starting from a week prior to investment date. In the case where the investment has not been sold, sell date is returned as 0. I'm going to assume this is sufficient for both the history of price of sgonks owned bullet point, as well as the list of unsold sgonks - all you have to do for that one is filter by the sell date.

Ah okay - so filtering for unsold sGonks for the "currently owned investments" will be done on my end, I see. That can be done easily enough.
Will this be a problem with querying for the "currently owned investments" when a user is deep into a competition and has waaaay more sold sgonks than unsold sgonks?

Oh and also, how do I get the price yesterday?

The lack of colours makes this difficult but here for clarity - the crossed out ones are LGTM, the bolded ones just need clarification, the ones with no text decorations I assume don't exist at this point in time. Is this correct?

I have a servlet named InvestmentsServlet already in master. It returns info about every investment owned by the current user, including amt invested, investment date, sell date, current worth, as well as a list of all the data points on it starting from a week prior to investment date. In the case where the investment has not been sold, sell date is returned as 0. I'm going to assume this is sufficient for both the history of price of sgonks owned bullet point, as well as the list of unsold sgonks - all you have to do for that one is filter by the sell date.

Ah okay - so filtering for unsold sGonks for the "currently owned investments" will be done on my end, I see. That can be done easily enough.
Will this be a problem with querying for the "currently owned investments" when a user is deep into a competition and has waaaay more sold sgonks than unsold sgonks?

Oh and also, how do I get the price yesterday?

I'm assuming this:

History of all competitor ranks (for the chart): I imagine this is a list, where each list item is:

Person name
A list of this person’s net worth over time
Doesn't yet exist, right?

no it doesn't. It would require me to maintain time series trends for user networth in datastore along with the trends data. It's doable but wasn't in the project plan so I didn't code it up. From my point of view it's not an essential feature, WDYT?

That would be for displaying this graph on the comp page:

What do you suggest might be the best thing to display in that graph?

I'm assuming this:

History of all competitor ranks (for the chart): I imagine this is a list, where each list item is:

Person name
A list of this person’s net worth over time
Doesn't yet exist, right?

no it doesn't. It would require me to maintain time series trends for user networth in datastore along with the trends data. It's doable but wasn't in the project plan so I didn't code it up. From my point of view it's not an essential feature, WDYT?

That would be for displaying this graph on the comp page:

What do you suggest might be the best thing to display in that graph?

I'm assuming this:

History of all competitor ranks (for the chart): I imagine this is a list, where each list item is:

Person name
A list of this person’s net worth over time
Doesn't yet exist, right?

no it doesn't. It would require me to maintain time series trends for user networth in datastore along with the trends data. It's doable but wasn't in the project plan so I didn't code it up. From my point of view it's not an essential feature, WDYT?

That would be for displaying this graph on the comp page:

What do you suggest might be the best thing to display in that graph?

You could just graph today vs yesterday for now?

I'm assuming this:

History of all competitor ranks (for the chart): I imagine this is a list, where each list item is:

Person name
A list of this person’s net worth over time
Doesn't yet exist, right?

no it doesn't. It would require me to maintain time series trends for user networth in datastore along with the trends data. It's doable but wasn't in the project plan so I didn't code it up. From my point of view it's not an essential feature, WDYT?

That would be for displaying this graph on the comp page:

What do you suggest might be the best thing to display in that graph?

You could just graph today vs yesterday for now?

I'm assuming this:

History of all competitor ranks (for the chart): I imagine this is a list, where each list item is:

Person name
A list of this person’s net worth over time
Doesn't yet exist, right?

no it doesn't. It would require me to maintain time series trends for user networth in datastore along with the trends data. It's doable but wasn't in the project plan so I didn't code it up. From my point of view it's not an essential feature, WDYT?

That would be for displaying this graph on the comp page:

What do you suggest might be the best thing to display in that graph?

You could just graph today vs yesterday for now?

Can do that for now yeah. Would look kinda sad but let's leave it to be something to improve on later if there is time.

I'm assuming this:

History of all competitor ranks (for the chart): I imagine this is a list, where each list item is:

Person name
A list of this person’s net worth over time
Doesn't yet exist, right?

no it doesn't. It would require me to maintain time series trends for user networth in datastore along with the trends data. It's doable but wasn't in the project plan so I didn't code it up. From my point of view it's not an essential feature, WDYT?

That would be for displaying this graph on the comp page:

What do you suggest might be the best thing to display in that graph?

You could just graph today vs yesterday for now?

Can do that for now yeah. Would look kinda sad but let's leave it to be something to improve on later if there is time.

The lack of colours makes this difficult but here for clarity - the crossed out ones are LGTM, the bolded ones just need clarification, the ones with no text decorations I assume don't exist at this point in time. Is this correct?

I have a servlet named InvestmentsServlet already in master. It returns info about every investment owned by the current user, including amt invested, investment date, sell date, current worth, as well as a list of all the data points on it starting from a week prior to investment date. In the case where the investment has not been sold, sell date is returned as 0. I'm going to assume this is sufficient for both the history of price of sgonks owned bullet point, as well as the list of unsold sgonks - all you have to do for that one is filter by the sell date.

Ah okay - so filtering for unsold sGonks for the "currently owned investments" will be done on my end, I see. That can be done easily enough.
Will this be a problem with querying for the "currently owned investments" when a user is deep into a competition and has waaaay more sold sgonks than unsold sgonks?

Oh and also, how do I get the price yesterday?

I can't imagine they would accumulate massive amounts of investments from a computer's pov. We originally estimated on average 1 a day would be quite a few over a competition duration.
The price yesterday is just the second to last point in the list of data points.

The lack of colours makes this difficult but here for clarity - the crossed out ones are LGTM, the bolded ones just need clarification, the ones with no text decorations I assume don't exist at this point in time. Is this correct?

I have a servlet named InvestmentsServlet already in master. It returns info about every investment owned by the current user, including amt invested, investment date, sell date, current worth, as well as a list of all the data points on it starting from a week prior to investment date. In the case where the investment has not been sold, sell date is returned as 0. I'm going to assume this is sufficient for both the history of price of sgonks owned bullet point, as well as the list of unsold sgonks - all you have to do for that one is filter by the sell date.

Ah okay - so filtering for unsold sGonks for the "currently owned investments" will be done on my end, I see. That can be done easily enough.
Will this be a problem with querying for the "currently owned investments" when a user is deep into a competition and has waaaay more sold sgonks than unsold sgonks?

Oh and also, how do I get the price yesterday?

I can't imagine they would accumulate massive amounts of investments from a computer's pov. We originally estimated on average 1 a day would be quite a few over a competition duration.
The price yesterday is just the second to last point in the list of data points.

I'm assuming this:

History of all competitor ranks (for the chart): I imagine this is a list, where each list item is:

Person name
A list of this person’s net worth over time
Doesn't yet exist, right?

no it doesn't. It would require me to maintain time series trends for user networth in datastore along with the trends data. It's doable but wasn't in the project plan so I didn't code it up. From my point of view it's not an essential feature, WDYT?

That would be for displaying this graph on the comp page:

What do you suggest might be the best thing to display in that graph?

You could just graph today vs yesterday for now?

Can do that for now yeah. Would look kinda sad but let's leave it to be something to improve on later if there is time.

Yeah I can add it easily enough, but it's not important for functionality so I'd rather not spend time on it right now.

I'm assuming this:

History of all competitor ranks (for the chart): I imagine this is a list, where each list item is:

Person name
A list of this person’s net worth over time
Doesn't yet exist, right?

no it doesn't. It would require me to maintain time series trends for user networth in datastore along with the trends data. It's doable but wasn't in the project plan so I didn't code it up. From my point of view it's not an essential feature, WDYT?

That would be for displaying this graph on the comp page:

What do you suggest might be the best thing to display in that graph?

You could just graph today vs yesterday for now?

Can do that for now yeah. Would look kinda sad but let's leave it to be something to improve on later if there is time.

Yeah I can add it easily enough, but it's not important for functionality so I'd rather not spend time on it right now.

The lack of colours makes this difficult but here for clarity - the crossed out ones are LGTM, the bolded ones just need clarification, the ones with no text decorations I assume don't exist at this point in time. Is this correct?

I have a servlet named InvestmentsServlet already in master. It returns info about every investment owned by the current user, including amt invested, investment date, sell date, current worth, as well as a list of all the data points on it starting from a week prior to investment date. In the case where the investment has not been sold, sell date is returned as 0. I'm going to assume this is sufficient for both the history of price of sgonks owned bullet point, as well as the list of unsold sgonks - all you have to do for that one is filter by the sell date.

Ah okay - so filtering for unsold sGonks for the "currently owned investments" will be done on my end, I see. That can be done easily enough.
Will this be a problem with querying for the "currently owned investments" when a user is deep into a competition and has waaaay more sold sgonks than unsold sgonks?

Oh and also, how do I get the price yesterday?

I can't imagine they would accumulate massive amounts of investments from a computer's pov. We originally estimated on average 1 a day would be quite a few over a competition duration.
The price yesterday is just the second to last point in the list of data points.

SGTM to the unsold sgonks thing.
As for price yesterday - I think I read in the code that the price (today/current price) has to be calculated using the today datapoint - since I need the price yesterday (as opposed to raw popularity) will I need to calculate that as well?
Or, are the datapoints all prices that have already been calculated?

The lack of colours makes this difficult but here for clarity - the crossed out ones are LGTM, the bolded ones just need clarification, the ones with no text decorations I assume don't exist at this point in time. Is this correct?

I have a servlet named InvestmentsServlet already in master. It returns info about every investment owned by the current user, including amt invested, investment date, sell date, current worth, as well as a list of all the data points on it starting from a week prior to investment date. In the case where the investment has not been sold, sell date is returned as 0. I'm going to assume this is sufficient for both the history of price of sgonks owned bullet point, as well as the list of unsold sgonks - all you have to do for that one is filter by the sell date.

Ah okay - so filtering for unsold sGonks for the "currently owned investments" will be done on my end, I see. That can be done easily enough.
Will this be a problem with querying for the "currently owned investments" when a user is deep into a competition and has waaaay more sold sgonks than unsold sgonks?

Oh and also, how do I get the price yesterday?

I can't imagine they would accumulate massive amounts of investments from a computer's pov. We originally estimated on average 1 a day would be quite a few over a competition duration.
The price yesterday is just the second to last point in the list of data points.

SGTM to the unsold sgonks thing.
As for price yesterday - I think I read in the code that the price (today/current price) has to be calculated using the today datapoint - since I need the price yesterday (as opposed to raw popularity) will I need to calculate that as well?
Or, are the datapoints all prices that have already been calculated?

The lack of colours makes this difficult but here for clarity - the crossed out ones are LGTM, the bolded ones just need clarification, the ones with no text decorations I assume don't exist at this point in time. Is this correct?

I have a servlet named InvestmentsServlet already in master. It returns info about every investment owned by the current user, including amt invested, investment date, sell date, current worth, as well as a list of all the data points on it starting from a week prior to investment date. In the case where the investment has not been sold, sell date is returned as 0. I'm going to assume this is sufficient for both the history of price of sgonks owned bullet point, as well as the list of unsold sgonks - all you have to do for that one is filter by the sell date.

Ah okay - so filtering for unsold sGonks for the "currently owned investments" will be done on my end, I see. That can be done easily enough.
Will this be a problem with querying for the "currently owned investments" when a user is deep into a competition and has waaaay more sold sgonks than unsold sgonks?

Oh and also, how do I get the price yesterday?

I can't imagine they would accumulate massive amounts of investments from a computer's pov. We originally estimated on average 1 a day would be quite a few over a competition duration.
The price yesterday is just the second to last point in the list of data points.

SGTM to the unsold sgonks thing.
As for price yesterday - I think I read in the code that the price (today/current price) has to be calculated using the today datapoint - since I need the price yesterday (as opposed to raw popularity) will I need to calculate that as well?
Or, are the datapoints all prices that have already been calculated?

The datapoints list the popularity over time, out of 100. You are correct that they can change as new days of data accumulate, but what doesn't change is their position relative to eachother. So, for example, if a user buys in on a day that has popularity 50 and invests 100, and then on a day in the future popularity is 100, they can cash out with 200. If they don't cash out and instead wait another day that ends up being more popular than the previous day, the datapoints all adjust proportionately. So the new day would be 100, the previous day might look more like 80, and the the day they bought in would look like 40 instead of 50. That's still double what they cashed in on either way.
I should confirm what you mean by price yesterday though. The investments themselves don't have a 'unit price' like a stock does, so the only data you have is the popularity score which is always going to be relative, or the amount they could have cashed out on that day, which is constant but would require you to do some basic percentage calculations. It depends what you're planning on using this data point for I guess, I'm not too sure what the issue is.

The lack of colours makes this difficult but here for clarity - the crossed out ones are LGTM, the bolded ones just need clarification, the ones with no text decorations I assume don't exist at this point in time. Is this correct?

I have a servlet named InvestmentsServlet already in master. It returns info about every investment owned by the current user, including amt invested, investment date, sell date, current worth, as well as a list of all the data points on it starting from a week prior to investment date. In the case where the investment has not been sold, sell date is returned as 0. I'm going to assume this is sufficient for both the history of price of sgonks owned bullet point, as well as the list of unsold sgonks - all you have to do for that one is filter by the sell date.

Ah okay - so filtering for unsold sGonks for the "currently owned investments" will be done on my end, I see. That can be done easily enough.
Will this be a problem with querying for the "currently owned investments" when a user is deep into a competition and has waaaay more sold sgonks than unsold sgonks?

Oh and also, how do I get the price yesterday?

I can't imagine they would accumulate massive amounts of investments from a computer's pov. We originally estimated on average 1 a day would be quite a few over a competition duration.
The price yesterday is just the second to last point in the list of data points.

SGTM to the unsold sgonks thing.
As for price yesterday - I think I read in the code that the price (today/current price) has to be calculated using the today datapoint - since I need the price yesterday (as opposed to raw popularity) will I need to calculate that as well?
Or, are the datapoints all prices that have already been calculated?

The datapoints list the popularity over time, out of 100. You are correct that they can change as new days of data accumulate, but what doesn't change is their position relative to eachother. So, for example, if a user buys in on a day that has popularity 50 and invests 100, and then on a day in the future popularity is 100, they can cash out with 200. If they don't cash out and instead wait another day that ends up being more popular than the previous day, the datapoints all adjust proportionately. So the new day would be 100, the previous day might look more like 80, and the the day they bought in would look like 40 instead of 50. That's still double what they cashed in on either way.
I should confirm what you mean by price yesterday though. The investments themselves don't have a 'unit price' like a stock does, so the only data you have is the popularity score which is always going to be relative, or the amount they could have cashed out on that day, which is constant but would require you to do some basic percentage calculations. It depends what you're planning on using this data point for I guess, I'm not too sure what the issue is.

The lack of colours makes this difficult but here for clarity - the crossed out ones are LGTM, the bolded ones just need clarification, the ones with no text decorations I assume don't exist at this point in time. Is this correct?

I have a servlet named InvestmentsServlet already in master. It returns info about every investment owned by the current user, including amt invested, investment date, sell date, current worth, as well as a list of all the data points on it starting from a week prior to investment date. In the case where the investment has not been sold, sell date is returned as 0. I'm going to assume this is sufficient for both the history of price of sgonks owned bullet point, as well as the list of unsold sgonks - all you have to do for that one is filter by the sell date.

Ah okay - so filtering for unsold sGonks for the "currently owned investments" will be done on my end, I see. That can be done easily enough.
Will this be a problem with querying for the "currently owned investments" when a user is deep into a competition and has waaaay more sold sgonks than unsold sgonks?

Oh and also, how do I get the price yesterday?

I can't imagine they would accumulate massive amounts of investments from a computer's pov. We originally estimated on average 1 a day would be quite a few over a competition duration.
The price yesterday is just the second to last point in the list of data points.

SGTM to the unsold sgonks thing.
As for price yesterday - I think I read in the code that the price (today/current price) has to be calculated using the today datapoint - since I need the price yesterday (as opposed to raw popularity) will I need to calculate that as well?
Or, are the datapoints all prices that have already been calculated?

The datapoints list the popularity over time, out of 100. You are correct that they can change as new days of data accumulate, but what doesn't change is their position relative to eachother. So, for example, if a user buys in on a day that has popularity 50 and invests 100, and then on a day in the future popularity is 100, they can cash out with 200. If they don't cash out and instead wait another day that ends up being more popular than the previous day, the datapoints all adjust proportionately. So the new day would be 100, the previous day might look more like 80, and the the day they bought in would look like 40 instead of 50. That's still double what they cashed in on either way.
I should confirm what you mean by price yesterday though. The investments themselves don't have a 'unit price' like a stock does, so the only data you have is the popularity score which is always going to be relative, or the amount they could have cashed out on that day, which is constant but would require you to do some basic percentage calculations. It depends what you're planning on using this data point for I guess, I'm not too sure what the issue is.

Thanks for the clarification. The intention of getting priceYesterday was so that there can be a +t$xxx or a -t$xxx value next to some displays of the currentPrice to compare what happened to your sGonk over night. But from what it sounds like I can calculate the price yesterday by doing a ratio of yesterday and buy-in date's popularity scores and multiplying it by the amount invested, right?

The lack of colours makes this difficult but here for clarity - the crossed out ones are LGTM, the bolded ones just need clarification, the ones with no text decorations I assume don't exist at this point in time. Is this correct?

I have a servlet named InvestmentsServlet already in master. It returns info about every investment owned by the current user, including amt invested, investment date, sell date, current worth, as well as a list of all the data points on it starting from a week prior to investment date. In the case where the investment has not been sold, sell date is returned as 0. I'm going to assume this is sufficient for both the history of price of sgonks owned bullet point, as well as the list of unsold sgonks - all you have to do for that one is filter by the sell date.

Ah okay - so filtering for unsold sGonks for the "currently owned investments" will be done on my end, I see. That can be done easily enough.
Will this be a problem with querying for the "currently owned investments" when a user is deep into a competition and has waaaay more sold sgonks than unsold sgonks?

Oh and also, how do I get the price yesterday?

I can't imagine they would accumulate massive amounts of investments from a computer's pov. We originally estimated on average 1 a day would be quite a few over a competition duration.
The price yesterday is just the second to last point in the list of data points.

SGTM to the unsold sgonks thing.
As for price yesterday - I think I read in the code that the price (today/current price) has to be calculated using the today datapoint - since I need the price yesterday (as opposed to raw popularity) will I need to calculate that as well?
Or, are the datapoints all prices that have already been calculated?

The datapoints list the popularity over time, out of 100. You are correct that they can change as new days of data accumulate, but what doesn't change is their position relative to eachother. So, for example, if a user buys in on a day that has popularity 50 and invests 100, and then on a day in the future popularity is 100, they can cash out with 200. If they don't cash out and instead wait another day that ends up being more popular than the previous day, the datapoints all adjust proportionately. So the new day would be 100, the previous day might look more like 80, and the the day they bought in would look like 40 instead of 50. That's still double what they cashed in on either way.
I should confirm what you mean by price yesterday though. The investments themselves don't have a 'unit price' like a stock does, so the only data you have is the popularity score which is always going to be relative, or the amount they could have cashed out on that day, which is constant but would require you to do some basic percentage calculations. It depends what you're planning on using this data point for I guess, I'm not too sure what the issue is.

Thanks for the clarification. The intention of getting priceYesterday was so that there can be a +t$xxx or a -t$xxx value next to some displays of the currentPrice to compare what happened to your sGonk over night. But from what it sounds like I can calculate the price yesterday by doing a ratio of yesterday and buy-in date's popularity scores and multiplying it by the amount invested, right?

The lack of colours makes this difficult but here for clarity - the crossed out ones are LGTM, the bolded ones just need clarification, the ones with no text decorations I assume don't exist at this point in time. Is this correct?

I have a servlet named InvestmentsServlet already in master. It returns info about every investment owned by the current user, including amt invested, investment date, sell date, current worth, as well as a list of all the data points on it starting from a week prior to investment date. In the case where the investment has not been sold, sell date is returned as 0. I'm going to assume this is sufficient for both the history of price of sgonks owned bullet point, as well as the list of unsold sgonks - all you have to do for that one is filter by the sell date.

Ah okay - so filtering for unsold sGonks for the "currently owned investments" will be done on my end, I see. That can be done easily enough.
Will this be a problem with querying for the "currently owned investments" when a user is deep into a competition and has waaaay more sold sgonks than unsold sgonks?

Oh and also, how do I get the price yesterday?

I can't imagine they would accumulate massive amounts of investments from a computer's pov. We originally estimated on average 1 a day would be quite a few over a competition duration.
The price yesterday is just the second to last point in the list of data points.

SGTM to the unsold sgonks thing.
As for price yesterday - I think I read in the code that the price (today/current price) has to be calculated using the today datapoint - since I need the price yesterday (as opposed to raw popularity) will I need to calculate that as well?
Or, are the datapoints all prices that have already been calculated?

The datapoints list the popularity over time, out of 100. You are correct that they can change as new days of data accumulate, but what doesn't change is their position relative to eachother. So, for example, if a user buys in on a day that has popularity 50 and invests 100, and then on a day in the future popularity is 100, they can cash out with 200. If they don't cash out and instead wait another day that ends up being more popular than the previous day, the datapoints all adjust proportionately. So the new day would be 100, the previous day might look more like 80, and the the day they bought in would look like 40 instead of 50. That's still double what they cashed in on either way.
I should confirm what you mean by price yesterday though. The investments themselves don't have a 'unit price' like a stock does, so the only data you have is the popularity score which is always going to be relative, or the amount they could have cashed out on that day, which is constant but would require you to do some basic percentage calculations. It depends what you're planning on using this data point for I guess, I'm not too sure what the issue is.

Thanks for the clarification. The intention of getting priceYesterday was so that there can be a +t$xxx or a -t$xxx value next to some displays of the currentPrice to compare what happened to your sGonk over night. But from what it sounds like I can calculate the price yesterday by doing a ratio of yesterday and buy-in date's popularity scores and multiplying it by the amount invested, right? (and I assume the buy-in date's popularity score is simply the index 0 on the list?

Easiest to do it relative to today's data point. priceYesterday = currentValue * (popularityYesterday / popularityToday). Don't even need to backtrack to investment date.

The lack of colours makes this difficult but here for clarity - the crossed out ones are LGTM, the bolded ones just need clarification, the ones with no text decorations I assume don't exist at this point in time. Is this correct?

I have a servlet named InvestmentsServlet already in master. It returns info about every investment owned by the current user, including amt invested, investment date, sell date, current worth, as well as a list of all the data points on it starting from a week prior to investment date. In the case where the investment has not been sold, sell date is returned as 0. I'm going to assume this is sufficient for both the history of price of sgonks owned bullet point, as well as the list of unsold sgonks - all you have to do for that one is filter by the sell date.

Ah okay - so filtering for unsold sGonks for the "currently owned investments" will be done on my end, I see. That can be done easily enough.
Will this be a problem with querying for the "currently owned investments" when a user is deep into a competition and has waaaay more sold sgonks than unsold sgonks?

Oh and also, how do I get the price yesterday?

I can't imagine they would accumulate massive amounts of investments from a computer's pov. We originally estimated on average 1 a day would be quite a few over a competition duration.
The price yesterday is just the second to last point in the list of data points.

SGTM to the unsold sgonks thing.
As for price yesterday - I think I read in the code that the price (today/current price) has to be calculated using the today datapoint - since I need the price yesterday (as opposed to raw popularity) will I need to calculate that as well?
Or, are the datapoints all prices that have already been calculated?

The datapoints list the popularity over time, out of 100. You are correct that they can change as new days of data accumulate, but what doesn't change is their position relative to eachother. So, for example, if a user buys in on a day that has popularity 50 and invests 100, and then on a day in the future popularity is 100, they can cash out with 200. If they don't cash out and instead wait another day that ends up being more popular than the previous day, the datapoints all adjust proportionately. So the new day would be 100, the previous day might look more like 80, and the the day they bought in would look like 40 instead of 50. That's still double what they cashed in on either way.
I should confirm what you mean by price yesterday though. The investments themselves don't have a 'unit price' like a stock does, so the only data you have is the popularity score which is always going to be relative, or the amount they could have cashed out on that day, which is constant but would require you to do some basic percentage calculations. It depends what you're planning on using this data point for I guess, I'm not too sure what the issue is.

Thanks for the clarification. The intention of getting priceYesterday was so that there can be a +t$xxx or a -t$xxx value next to some displays of the currentPrice to compare what happened to your sGonk over night. But from what it sounds like I can calculate the price yesterday by doing a ratio of yesterday and buy-in date's popularity scores and multiplying it by the amount invested, right? (and I assume the buy-in date's popularity score is simply the index 0 on the list?

Easiest to do it relative to today's data point. priceYesterday = currentValue * (popularityYesterday / popularityToday). Don't even need to backtrack to investment date.

The lack of colours makes this difficult but here for clarity - the crossed out ones are LGTM, the bolded ones just need clarification, the ones with no text decorations I assume don't exist at this point in time. Is this correct?

I have a servlet named InvestmentsServlet already in master. It returns info about every investment owned by the current user, including amt invested, investment date, sell date, current worth, as well as a list of all the data points on it starting from a week prior to investment date. In the case where the investment has not been sold, sell date is returned as 0. I'm going to assume this is sufficient for both the history of price of sgonks owned bullet point, as well as the list of unsold sgonks - all you have to do for that one is filter by the sell date.

Ah okay - so filtering for unsold sGonks for the "currently owned investments" will be done on my end, I see. That can be done easily enough.
Will this be a problem with querying for the "currently owned investments" when a user is deep into a competition and has waaaay more sold sgonks than unsold sgonks?

Oh and also, how do I get the price yesterday?

I can't imagine they would accumulate massive amounts of investments from a computer's pov. We originally estimated on average 1 a day would be quite a few over a competition duration.
The price yesterday is just the second to last point in the list of data points.

SGTM to the unsold sgonks thing.
As for price yesterday - I think I read in the code that the price (today/current price) has to be calculated using the today datapoint - since I need the price yesterday (as opposed to raw popularity) will I need to calculate that as well?
Or, are the datapoints all prices that have already been calculated?

The datapoints list the popularity over time, out of 100. You are correct that they can change as new days of data accumulate, but what doesn't change is their position relative to eachother. So, for example, if a user buys in on a day that has popularity 50 and invests 100, and then on a day in the future popularity is 100, they can cash out with 200. If they don't cash out and instead wait another day that ends up being more popular than the previous day, the datapoints all adjust proportionately. So the new day would be 100, the previous day might look more like 80, and the the day they bought in would look like 40 instead of 50. That's still double what they cashed in on either way.
I should confirm what you mean by price yesterday though. The investments themselves don't have a 'unit price' like a stock does, so the only data you have is the popularity score which is always going to be relative, or the amount they could have cashed out on that day, which is constant but would require you to do some basic percentage calculations. It depends what you're planning on using this data point for I guess, I'm not too sure what the issue is.

Thanks for the clarification. The intention of getting priceYesterday was so that there can be a +t$xxx or a -t$xxx value next to some displays of the currentPrice to compare what happened to your sGonk over night. But from what it sounds like I can calculate the price yesterday by doing a ratio of yesterday and buy-in date's popularity scores and multiplying it by the amount invested, right? (and I assume the buy-in date's popularity score is simply the index 0 on the list?

Easiest to do it relative to today's data point. priceYesterday = currentValue * (popularityYesterday / popularityToday). Don't even need to backtrack to investment date.
Technically buy in date is index 7, I'm providing a week of context data for new sgonks otherwise there will be nothing there. But yeah, you don't need that datapoint anyway.

Yup SGTM.

The lack of colours makes this difficult but here for clarity - the crossed out ones are LGTM, the bolded ones just need clarification, the ones with no text decorations I assume don't exist at this point in time. Is this correct?

I have a servlet named InvestmentsServlet already in master. It returns info about every investment owned by the current user, including amt invested, investment date, sell date, current worth, as well as a list of all the data points on it starting from a week prior to investment date. In the case where the investment has not been sold, sell date is returned as 0. I'm going to assume this is sufficient for both the history of price of sgonks owned bullet point, as well as the list of unsold sgonks - all you have to do for that one is filter by the sell date.

Ah okay - so filtering for unsold sGonks for the "currently owned investments" will be done on my end, I see. That can be done easily enough.
Will this be a problem with querying for the "currently owned investments" when a user is deep into a competition and has waaaay more sold sgonks than unsold sgonks?

Oh and also, how do I get the price yesterday?

I can't imagine they would accumulate massive amounts of investments from a computer's pov. We originally estimated on average 1 a day would be quite a few over a competition duration.
The price yesterday is just the second to last point in the list of data points.

SGTM to the unsold sgonks thing.
As for price yesterday - I think I read in the code that the price (today/current price) has to be calculated using the today datapoint - since I need the price yesterday (as opposed to raw popularity) will I need to calculate that as well?
Or, are the datapoints all prices that have already been calculated?

The datapoints list the popularity over time, out of 100. You are correct that they can change as new days of data accumulate, but what doesn't change is their position relative to eachother. So, for example, if a user buys in on a day that has popularity 50 and invests 100, and then on a day in the future popularity is 100, they can cash out with 200. If they don't cash out and instead wait another day that ends up being more popular than the previous day, the datapoints all adjust proportionately. So the new day would be 100, the previous day might look more like 80, and the the day they bought in would look like 40 instead of 50. That's still double what they cashed in on either way.
I should confirm what you mean by price yesterday though. The investments themselves don't have a 'unit price' like a stock does, so the only data you have is the popularity score which is always going to be relative, or the amount they could have cashed out on that day, which is constant but would require you to do some basic percentage calculations. It depends what you're planning on using this data point for I guess, I'm not too sure what the issue is.

Thanks for the clarification. The intention of getting priceYesterday was so that there can be a +t$xxx or a -t$xxx value next to some displays of the currentPrice to compare what happened to your sGonk over night. But from what it sounds like I can calculate the price yesterday by doing a ratio of yesterday and buy-in date's popularity scores and multiplying it by the amount invested, right? (and I assume the buy-in date's popularity score is simply the index 0 on the list?

Easiest to do it relative to today's data point. priceYesterday = currentValue * (popularityYesterday / popularityToday). Don't even need to backtrack to investment date.
Technically buy in date is index 7, I'm providing a week of context data for new sgonks otherwise there will be nothing there. But yeah, you don't need that datapoint anyway.

Yup SGTM.


added functions (actual size, save/load settings).

Thanks for submitting, @ytx . It looks great, and I have some time over the next couple of weeks to merge.
I see save settings is a manual menu item. Did you investigate saving settings automatically when the application is quit?

Thank you for your viewing my source codes.

I see save settings is a manual menu item. Did you investigate saving settings automatically when the application is quit?

I like manual saving. I did not investigate it.


Error: Can't resolve<EMAIL_ADDRESS>

Bug, feature request, or proposal:
Bug
What is the expected behavior?
The webapp should be built.
What is the current behavior?
Generating a new angular project (ng new <name>) and adding angular material into it (npm install --save @angular/material @angular/cdk, npm install --save @angular/animations and adding imports as per the getting started documentation) results in an error upon ng build or ng serve:

ERROR in ./node_modules/css-loader?{"sourceMap":false,"import":false}!./node_modules/postcss-loader/lib?{"ident":"postcss","sourceMap":false}!./src/styles.css
Module build failed: Error: Can't resolve<EMAIL_ADDRESS>in 'C:\Users\cgu\Documents\Projekte\pckgtest\src'
    at onError (C:\Users\cgu\Documents\Projekte\pckgtest\node_modules\enhanced-resolve\lib\Resolver.js:61:15)
    at loggingCallbackWrapper (C:\Users\cgu\Documents\Projekte\pckgtest\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
    at runAfter (C:\Users\cgu\Documents\Projekte\pckgtest\node_modules\enhanced-resolve\lib\Resolver.js:158:4)
    at innerCallback (C:\Users\cgu\Documents\Projekte\pckgtest\node_modules\enhanced-resolve\lib\Resolver.js:146:3)
    at loggingCallbackWrapper (C:\Users\cgu\Documents\Projekte\pckgtest\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
    at next (C:\Users\cgu\Documents\Projekte\pckgtest\node_modules\tapable\lib\Tapable.js:252:11)
    at C:\Users\cgu\Documents\Projekte\pckgtest\node_modules\enhanced-resolve\lib\UnsafeCachePlugin.js:40:4
    at loggingCallbackWrapper (C:\Users\cgu\Documents\Projekte\pckgtest\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
    at runAfter (C:\Users\cgu\Documents\Projekte\pckgtest\node_modules\enhanced-resolve\lib\Resolver.js:158:4)
    at innerCallback (C:\Users\cgu\Documents\Projekte\pckgtest\node_modules\enhanced-resolve\lib\Resolver.js:146:3)
    at loggingCallbackWrapper (C:\Users\cgu\Documents\Projekte\pckgtest\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
    at next (C:\Users\cgu\Documents\Projekte\pckgtest\node_modules\tapable\lib\Tapable.js:252:11)
    at innerCallback (C:\Users\cgu\Documents\Projekte\pckgtest\node_modules\enhanced-resolve\lib\Resolver.js:144:11)
    at loggingCallbackWrapper (C:\Users\cgu\Documents\Projekte\pckgtest\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
    at next (C:\Users\cgu\Documents\Projekte\pckgtest\node_modules\tapable\lib\Tapable.js:249:35)
    at resolver.doResolve.createInnerCallback (C:\Users\cgu\Documents\Projekte\pckgtest\node_modules\enhanced-resolve\lib\DescriptionFilePlugin.js:44:6)
 @ ./src/styles.css 4:14-138
 @ multi ./src/styles.css

What are the steps to reproduce?
ng new <projectname>
cd <projectname>
npm install --save @angular/material @angular/cdk
npm install --save @angular/animations
import BrowserAnimationsModule in app.module.ts
add @import<EMAIL_ADDRESS>in styles.css
ng build
Which versions of Angular, Material, OS, TypeScript, browsers are affected?
Windows 7 Enterprise x64
Angular CLI: 1.6.4
Node: 6.11.4
OS: win32 x64
Angular: 5.2.0
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router

@angular/cdk: 5.0.4
@angular/cli: 1.6.4
@angular/material: 5.0.4
@angular-devkit/build-optimizer: 0.0.38
@angular-devkit/core: 0.0.25
@angular-devkit/schematics: 0.0.48
@ngtools/json-schema: 1.1.0
@ngtools/webpack: 1.9.4
@schematics/angular: 0.1.13
@schematics/schematics: 0.0.13
typescript: 2.5.3
webpack: 3.10.0

Is there anything else we should know?
Removing the '~' from the theme import seems to fix the issue. I'm also getting a couple of peer dependency warnings on npm installs, since the angular version seems to be too new:
npm WARN<EMAIL_ADDRESS>requires a peer of<EMAIL_ADDRESS>but none was installed.
so, this may be related.
Not sure if removing the '~' has any other effects, so an update of the getting started documentation may be all that's needed

@import<EMAIL_ADDRESS>check to see if the import is included... I had the same problem.

Same problem.
The problem is there is no intellisense or hints in styles.css as to what the path is to my node_modules like there is when doing imports to typescript compnents.

solved issue ,instead of using
@import<EMAIL_ADDRESS>use=>
"@import <EMAIL_ADDRESS>

I had the same problem has you and I fixed it this way
`npm install --save @angular/material @angular/cdk @angular/animations`

for Ubuntu 18.04 user.
step 1 :  npm install --save @angular/material @angular/cdk
step 2 :  npm install --save @angular/animations
step 3 : import in styles.css
@import<EMAIL_ADDRESS>I hope  it fixed yours also

solved issue ,instead of using
@import<EMAIL_ADDRESS>use=>
"@import <EMAIL_ADDRESS>
Thanks, this found for me!


Integrate Waterloo spam scores and other static priors into index

We should develop a generic mechanism to store and use Waterloo spam scores, PageRank, HITS, and other static priors.
@iorixxx Do you have some code to contribute along these lines?

Here is what I do for the spam rankings: I split huge (15BG) spamFusion file into chunks, these chunks (spam scores) are saved into a directory structure that is identical to the ClueWeb09B *.warc directory structure.
To perform the aforementioned operation, I rely on [voldemort] (http://www.project-voldemort.com/voldemort/) to store docID, and spamScore pairs of category B.
However, when dealing with category A, voldemort can be the only source during indexing. No need to dump data into files into a directory structure that is identical to CW09B.
What do you think about storing spam scores, in key value database such as voldemort?
For fast retrieval during indexing and/or searching?
Is this feasible ? Or generic enough?

Hrm... that's pretty heavyweight and requires an external dependency. I suppose for catB everything can fit in memory. Perhaps we can assume the same for catA? 500m * ( 2 bytes for value + 4 bytes for key) = 30 GB... reasonable on a server?

My ClueWeb09B_SpamFusion (contains chunks) directory is 1.4G in size. Indexer loads a single chunk file per a warc file. So memory won't be a problem. But preparing these chunks ( aligned with the warc files ) is heavy. I again rely on voldemort for producing chunks.
Here by saying chunk : I mean a miniature spam ranking file just for a single warc file.

It looks like, we can resolve warc folder path for a given docid deterministically.
e.g. docid =  clueweb09-en0000-00-35369
path = ClueWeb09_English_1/en0000/00.war.gz
Then we can create miniature fusion files from the clueweb09spam.Fusion directly?
Spam scores will be used for skipping documents (given threshold ) during indexing?

I'd rather index everything and use spam as a feature during retrieval. That way we don't need to develop a cutoff.

aha I see. So you just want to percolate the result list?
Then we need ability to query arbitrary document id.
I cannot think of a solution without a key-value database or something.
How about we index spam rankings with lucene? for arbitrary lookup?

Just a big hashmap we load into memory at startup? Using, fastuil, for example?

Let me try fastutil tomorrow. If it does not blow the memory that would be the best solution.

I played with Object2IntOpenHashMap<String> however following program java -server -Xmx20g resulted in out of memory error. I think, even if we don't insert into a map, just sequentially traversing this big file will take time. What is the preferred course of action here?
/**
     * Try to load clueweb09spam.Fusion (15 GB) file to memory
     *
     * @param clueweb09spam spam file name
     * @throws IOException
     */
 public static void loadSpamFusion(String clueweb09spam) throws IOException {

        Object2IntOpenHashMap<String> map = new Object2IntOpenHashMap<>();

        Path clueweb09spamFusion = Paths.get(clueweb09spam);

        if (!Files.isRegularFile(clueweb09spamFusion) || !Files.exists(clueweb09spamFusion) || !Files.isReadable(clueweb09spamFusion))
            throw new IllegalArgumentException(clueweb09spamFusion + " does not exist or is not a file");

        try (BufferedReader reader = Files.newBufferedReader(clueweb09spamFusion, StandardCharsets.US_ASCII)) {

            for (; ; ) {
                String line = reader.readLine();
                if (line == null)
                    break;

                // lines with the following format: percentile-score clueweb-docid
                String[] parts = line.split("\\s+");
                map.put(parts[1], Integer.parseInt(parts[0]));
            }
        }

        System.out.println(map.size() + "many entries loaded into the map");
        map.clear();
    }

How much memory do you have on your machine?
The machine I use at UMD has 0.75 TB RAM :)

I have 64 GB :) Is there a maximum  -Xmx value we should aim here?
Can you try the loading code? I wonder how much heap it will take.

Try using max heap?

with 80GB, 503903810 many entries loaded into the map in 00:42:27. If you think this resource is reasonable, I can replace voldemort with fastutil map in the code that percolates trec submission file.

I found a better data structure ReferenceOpenHashSet<String> for the task. I am abandoning voldemort for my self too. The program will take three arguments : spam threshold, submission file and waterloo spam scores file/folder. And then it will remove spammiest documents from the submission file. Does this reasonable?

Hi @iorixxx sorry for the late reply - was at TREC and starting to dig out of a backlog. Yes, this seems reasonable!

This is probably the right way to implement this: https://lucene.apache.org/core/8_11_0/core/org/apache/lucene/document/FeatureField.html


spike(preview): feat - sync to currently active note when open preview

Initial note render, render note using passed in noteId via `queryParam.
Docs here -> [[Details|pkg.dendron-next-server.arch#details]]

Some observations:

The docs [[Details|pkg.dendron-next-server.arch#details]] currently don't have a "details" section.
It looks to me that the initNoteId replaces the code here https://github.com/dendronhq/dendron/blob/feat/preview-sync-on-open/packages/plugin-core/src/commands/ShowPreviewV2.ts#L131-L140
initNoteId is not passed in _app.tsx

Are you using the dev branch of dendron-site?
https://github.com/dendronhq/dendron-site/blob/dev/vault/pkg.dendron-next-server.arch.md#L50:L50
And yes, we crossed stream on this one. I'm going to discard my change in
favor of yours since this introduces additional state. initNoteId is
passed in by {...pageProps}
On Tue, Jul 6, 2021 at 2:51 AM Samuel Hobl @.***> wrote:

Some observations:

The docs [[Details|pkg.dendron-next-server.arch#details]] currently
don't have a "details" section.
It looks to me that the initNoteId replaces the code here
https://github.com/dendronhq/dendron/blob/feat/preview-sync-on-open/packages/plugin-core/src/commands/ShowPreviewV2.ts#L131-L140
initNoteId is not passed in _app.tsx

—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/dendronhq/dendron/pull/921#issuecomment-874622366,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AABPIPUCOQNB45LMJXHNN6LTWLGY3ANCNFSM47ZTZETQ
.

Are you using the dev branch of dendron-site?
https://github.com/dendronhq/dendron-site/blob/dev/vault/pkg.dendron-next-server.arch.md#L50:L50

ah no, will checkout dev branch to find these then.

And yes, we crossed stream on this one. I'm going to discard my change in
favor of yours since this introduces additional state. initNoteId is
passed in by {...pageProps}

I see. I was looking into where pageProps gets filled with data and nextjs seems to point to getStaticProps which we don't implement. Just a question that popped up. Feel free to not answer.


Refactor to fix and simplify

Your changes were on the right track but there was no need to create a new property (changedFilePath ), or check for that if a single file was provided.
In fact, there’s already an object which is patched on every run (the CLI). As in, on the first run it’s empty, but future runs are completely patched, so we can check for that (see lib/cli/file-set-pipeline/configure.js:31).
Additionally, instead of creating a new system for these one-file processes, changedFilePath, I opted to re-use the existing cli.globs, which is used by traverser.
Traverser can do some funky stuff when needed and when directories are given, but in this case it doesn’t really do too much. Performance is a lot higher when processing just one file (and of course, other files added by plug-ins like mdast-validate-links) versus a huge batch of documentation.
Currently, changing mdastrc(5) files is ignored (the config has a cache by file-path at cli.config.cache). Changing mdastignore(5) files however do take affect, as they are reloaded on each run. I’m not sure whether any choice is good here: having no caching can be expensive, having to exit a watch for changes to take affect isn’t very user-friendly either.

This PR ensured your branch worked for me (perfectly :smile:). IMO you can just squash all our commits together on a branch and update your PR on wooorm/mdast, than I’m fine with merging!

Let's continue the discussion in woorm#85.


Fix issue related to python3 conversion

Fix issue for python3 version at unsupported operand type at addition between int and str.
data variable has the type  bytearray in python3. Referencing 1 element from it defaults to int.

Thanks for the patch, though this was already fixed in my fork (287512e8ebc511f05277c29e6f4a66037bb4c864) and just needs to get pulled into the main repo.


Bad GPG signature warnings again

Hi,
Had to grab Cygwin for development purposes on Windows and noticed that this was among the most up-to-date forks of apt-cyg. However, the GPG signatures are broken, once again (this seems to have been the problem years ago already, i.e. #25 ) :
gpg: assuming signed data in `setup.bz2'
gpg: Signature made Mon Jul  5 21:04:09 2021 IDT using RSA key ID E2E56300
gpg: Good signature from "Cygwin<EMAIL_ADDRESS>gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 5640 5CF6 FCC8 1574 682A  5D56 1A69 8DE9 E2E5 6300

I found only one reference to the RSA key ID and it too seemed to have originated from the odditudes of Cygwin itself. [ Link ]
All help/advice appreciated. Thanks.

It's working and correct behavior.
The cygwin public key with the fingerprint "5640 5CF6 FCC8 1574 682A  5D56 1A69 8DE9 E2E5 6300" are still available for validating products by Cygwin.
Above "WARNING:" means that the cygwin public key is not signed by any trusted keys.
If you want to do not be warned it, do following steps:
First, make your key pair:
GNUPGHOME="$(apt-cyg pathof cache)/.apt-cyg" gpg --gen-key

Second, sign the cygwin public key with your secret key:
GNUPGHOME="$(apt-cyg pathof cache)/.apt-cyg" gpg --sign-key E2E56300

It's working and correct behavior.

Ah, okay, thanks a lot! I thought the other thread was speaking of this being an unsafe practice, maybe I read it wrong in a haste.


Gateway raises exception when server is deleted

Summary
When a gateway listener receives a deletion event from a server, it produces the following error, whether or not the bot.server_delete event is being listened for.
Discord using gateway protocol version: 6, requested: 6
Gateway message error!
Exception: #<NoMethodError: undefined method `map' for nil:NilClass>
/discordrb-3.3.0/lib/discordrb/data.rb:2896:in `initialize'
/discordrb-3.3.0/lib/discordrb/events/guilds.rb:64:in `new'
/discordrb-3.3.0/lib/discordrb/events/guilds.rb:64:in `init_server'
/discordrb-3.3.0/lib/discordrb/events/guilds.rb:15:in `initialize'
/discordrb-3.3.0/lib/discordrb/bot.rb:1233:in `new'
/discordrb-3.3.0/lib/discordrb/bot.rb:1233:in `handle_dispatch'
/discordrb-3.3.0/lib/discordrb/bot.rb:654:in `dispatch'
/discordrb-3.3.0/lib/discordrb/gateway.rb:714:in `handle_dispatch'
/discordrb-3.3.0/lib/discordrb/gateway.rb:679:in `handle_message'
/discordrb-3.3.0/lib/discordrb/gateway.rb:617:in `websocket_loop'
/discordrb-3.3.0/lib/discordrb/gateway.rb:569:in `connect'
/discordrb-3.3.0/lib/discordrb/gateway.rb:463:in `block in connect_loop'
/discordrb-3.3.0/lib/discordrb/gateway.rb:462:in `loop'
/discordrb-3.3.0/lib/discordrb/gateway.rb:462:in `connect_loop'
/discordrb-3.3.0/lib/discordrb/gateway.rb:168:in `block in run_async'

It's not clear to me which line of source is actually causing the error due to how data.rb is constructed (there is no actual line 2896 - data.rb is just a list of requires).
Environment
Mac OSX Catalina
ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-darwin19]
discordrb (3.3.0)

Hi, thanks for reporting. This is a duplicate of https://github.com/discordrb/discordrb/issues/684 and is fixed in https://github.com/discordrb/discordrb/commit/bb457fe981d2b997b704ad85008ec3b185b046e8.
The data.rb file was split into multiple files following the release of v3.3.0 - you have to browse the tag in order to locate the specific line if you get a backtrace from that file.

Thanks for incredibly fast response and sorry for dupe issue (I only searched open issues - my bad).
Just a bit of feedback: using the sha mentioned, I'm seeing that when capturing the event data in bot.server_delete, the server id comes back as event.server whereas most other event blocks expose this as event.server.id. Maybe not a bug, just unexpected as a user of the gem.

No worries. And, that is basically was the issue - Discord (mistakenly) gave you a full server object when a server was deleted when it was documented to only give you the server ID. As such we can't furnish the whole server object, because we aren't given the full object anymore.  With the current caching mechanisms that discordrb uses, we release our reference to the server data before calling event handlers - so the lib can't directly provide its last known data either.
The recommended approaches for these kinds of scenarios is to:

a) Override the internal event handler method to access the data before it is dropped from the cache https://github.com/discordrb/discordrb/blob/master/lib/discordrb/bot.rb#L925-L929

class Discordrb::Bot
  def delete_guild(id)
    deleted_server = @servers.delete(id)
    # do something with deleted_server
  end
end

You could also subclass Discordrb::Bot if you don't want to reopen it directly.

b) Hold your own references to the server objects in the cache, so that you are the last reference holder.

bot_servers = {}

bot.ready do
  # This performs a "shallow copy", so that your hash and the cache will point to the same server objects
  # that are mutated as the library receives events that update them, etc.
  bot_servers = bot.servers.clone
end

bot.server_create do |event|
  # Update your references when servers are joined
  bot_servers[event.server.id] = event.server
end

bot.server_delete do |event|
  # Remove the reference from your storage, so that you don't leak the object / hold on to it forever
  deleted_server = bot_servers.delete(event.server)

  # Do something with deleted_server. The reference will be dropped after this event handler ends,
  # releasing the memory to be GC'd at some point
  Discordrb::LOGGER.info("Left #{deleted_server.name}")
end

As such, with the current design, event.server is left as just the server ID as a compromise with Discord's behavior and the library's current design.
It may be possible to consistently change this in the future.


fix fast scan does not take effect when partition scan

What problem does this PR solve?
Issue Number: close #7527
Problem Summary:
What is changed and how it works?
Check List
Tests

[ ] Unit test
[ ] Integration test
[ ] Manual test (add detailed scripts or steps below)
[ ] No code

Side effects

[ ] Performance regression: Consumes more CPU
[ ] Performance regression: Consumes more Memory
[ ] Breaking backward compatibility

Documentation

[ ] Affects user behaviors
[ ] Contains syntax changes
[ ] Contains variable changes
[ ] Contains experimental features
[ ] Changes MySQL compatibility

Release note

None

/merge

/run-integration-test

/run-integration-test


String > int/long converter fails with decimal expression

Can't even get what was the intention, but at least this doesn't work with decimal expression... it should work with rounding.
https://github.com/atlasmap/atlasmap/blob/914b68d3719ef959cc31792a0cbb62aead0be550/runtime/core/src/main/java/io/atlasmap/converters/StringConverter.java#L203-L206
https://github.com/atlasmap/atlasmap/blob/914b68d3719ef959cc31792a0cbb62aead0be550/runtime/core/src/main/java/io/atlasmap/converters/StringConverter.java#L246-L249

The converter checks for Min and Max Long bounds. Detecting for decimals isn’t handled, and makes sense be as a use case w specific detection and behavior.

@paoloantinori I think this is a blocker though, wonder if we want to backport to 1.34.x branch.


docs: fix example with paths relative from git repo root

This PR fixes the readme's glob option to match files from the git root, since the filepaths globbed are absolute.
Fixes https://github.com/okonet/lint-staged/issues/689

Was it a mistake in the PR or why did you close it without merging?

Oops, I removed the remote branch by accident. I had messed up the commit message during rebase.


Diag session fix

This fixes issue #277
A new package with updated DiagnosticHub dlls (now Dev 15).
The vast majority of the update is updating the version for the support package.
however the key fix is to move the DiagnosticHub.Interop.dll OUT of the architecture specific directory.

Codecov Report

Merging #278 into master will increase coverage by <.01%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master     #278      +/-   ##
==========================================
+ Coverage   24.35%   24.35%   +<.01%
==========================================
  Files         197      197
  Lines      112394   112394
  Branches    11210    11210
==========================================
+ Hits        27373    27374       +1
+ Misses      84994    84993       -1
  Partials       27       27

Flag
Coverage Δ

#2015
24.35% <ø> (ø)
:arrow_up:

#2017
24.35% <ø> (ø)
:arrow_up:

#Debug
15.82% <ø> (ø)
:arrow_up:

#Release
14.9% <ø> (ø)
:arrow_up:

Impacted Files
Coverage Δ

src/PerfView/StackViewer/StackWindow.xaml.cs
34.43% <0%> (+0.03%)
:arrow_up:

Continue to review full report at Codecov.

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


Bump to version v0.2.1

@JuliaRegistrator register

@JuliaRegistrator register

Registration pull request created: JuliaRegistries/General/85173
After the above pull request is merged, it is recommended that a tag is created on this repository for the registered package version.
This will be done automatically if the Julia TagBot GitHub Action is installed, or can be done manually through the github interface, or via:
git tag -a v0.2.1 -m "<description of version>" d40bc49e8c8cb317b8b2714b1f7edb1e2b1e01f4
git push origin v0.2.1


[Issue] Reading values from .azure/[env]/config.json

[x] Make sure you've installed the latest version using instructions in the wiki

Output from azd version
Run azd version and copy and paste the output here:
azd version 1.6.1 (commit eba2c978b5443fdb002c95add4011d9e63c2e76f)
Describe the bug
I can get all the environment variables by running the azd env get-values command. However, how can I get the values stored in the .azure/[env]/config.json? [env] is the environment name, by the way.
I also want to access those values through hooks like postprovision or postdeploy, but it doesn't seem to be possible, unless I manually set those values through the azd env set command.
Expected behavior
I'm able to access those config values through azd env get-values and through the hooks.
Additional context
Here's a workaround:
If I set up the output variables in the main.bicep with the desirable environment variable names, then the azd provision part stores the output variables into the .env file, and I can access that.

@justinyoo thanks for the issue. Don't think we support reading this today cc @weikanglim @vhvb1989

@rajeshkamal5050 Thanks for the answer!
However, according to #3035, it seems that azd pipeline config reads .azure/[env]/config.json. Can we also apply this behaviour to azd provision and azd deploy so that I can access to the values?

@justinyoo , ideally you would never need to access values from the config.json, as it should be seen as implementation details.
Can you share your use-case for what you want to get the values from there?


Dependency Upgrades Sept 7, 2018

Upgrading things is fun. Especially TypeScript things.
Lock version of css-size while waiting for https://github.com/cssnano/cssnano/pull/596 to land.

I'm working on a TypeScript 3.0 update for css-blocks. let's wait to land this until both are ready.


Optimize stock warehouse resolver performance

I want to merge this change because it optimizes stock warehouse resolver performance.
⚠ should wait until #9571 is merged
Local testing:
before: 103 queries @180ms
after: 3 queries @20ms

Impact

[ ] New migrations
[ ] New/Updated API fields or mutations
[ ] Deprecated API fields or mutations
[ ] Removed API types, fields, or mutations
[ ] Documentation needs to be updated

Pull Request Checklist

[ ] Privileged queries and mutations are guarded by proper permission checks
[ ] Database queries are optimized and the number of queries is constant
[ ] Database migration files are up to date
[ ] The changes are tested
[ ] GraphQL schema and type definitions are up to date
[ ] Changes are mentioned in the changelog

Task linked: SALEOR-6607 Optimize stocks warehouse resolver


Added delete route for topics

Added new DELETE /topics/{topicId} with tests

Bimal tested this with the front-end, and it is working well.


Cloning animated models doesn't work

I tried it very simply with:
clone = viewer.entities[0].clone()
viewer.app.root.addChild(clone)
clone.translate(1, 0, 0)
clone.anim.playing

Anything I'm doing wrong? The second model is just not animated, even though all properties seem right.

I'm assigning this to @ellthompson to investigate. When the entity set up for animation is cloned, it should be able to play the animation. This would be great to add as a test to some animation engine example perhaps as well.

Looks like if the stategraph is built in code (as done via the viewer here https://github.com/playcanvas/playcanvas-viewer/blob/4b2868ef938db592c358685f6b3c130ec73c0716/src/viewer.ts#L1202), cloning the component doesn't clone or reference that data.

The PR has been merged to master but hasn't been released to stable yet (IE not been through our test plan etc)

The PR has been merged to master but hasn't been released to stable yet (IE not been through our test plan etc)
When you say tested with latest engine, are you testing against master or stable version of the engine?

Thanks for quick response!
I tried with npm run local, which is using latest engine:
"local": "cross-env ENGINE_PATH=../playcanvas-engine/build/playcanvas.js EXTRAS_PATH=../playcanvas-engine/build/playcanvas-extras.js concurrently --kill-others \"npm run build:watch\" \"npm run serve\"",

e.anim.system.cloneComponent in devtools also shows me the latest code (just for double-checking):

And I added debugger; just to see what's going on - didn't figure anything out yet 😅

The npm modules are always the stable version so it still hasn't got the fix from the PR.
The next release with this fix would be in v1.44.0

Hm.. All the data and information is available in the clone, wondering if this is a viewer or engine issue right now 🤔

Thanks a lot for all pointers @yaustar
I dived in a little bit more with your information, starting from this code (basically e=original, ee=clone):
e = viewer.entities[0];
ee = e.clone()
viewer.app.root.addChild(ee)
ee.translate(1, 0, 0)
ee.anim.playing

The clone is lacking the targets e.anim._layers[0]._controller._animEvaluator._targets:

I found the rebind method, but the animation still doesn't work after calling it:

Then, in a "fresh" scene, I found some NaN's:

If this NaN curves number is used inside a loop, it will basically never do anything (all comparisons are false).
Might be an artifact generated of two things called target and mixing them up:

While class AnimTarget has no curves: https://github.com/playcanvas/engine/blob/master/src/anim/evaluator/anim-target.js

@kungfooman We are looking at the issue and looks like it be a bigger thing to handle and needs discussion with the wider team.
Work around is to call .rebind() on the anim component after the clone:
cloneEntity.anim.rebind();

Thanks for the response @yaustar
Looking forward to when it works after team discussion, I just tried your suggestion to call AnimComponent#rebind, which doesn't work for me at least:

Is that on latest engine? Can you send me that model/anim that you are using please?

I just pulled latest changes again and rebuild (added console.log to see it is actually using latest changes):

I don't know which test model you mean, could you link it as well?
This is the SambaDancing model, no clue who owns it (kinda used for testing often):
SambaDancing.zip

Thanks, we used this one: https://github.com/cx20/gltf-test/tree/master/sampleModels/BoxAnimated/glTF-Binary

Thanks, I can confirm, that one works for me as well, couldn't get any other animated model to work (more complex ones with skinned meshes and many bones)

It's probably worth noting you shouldn't have this issue with a Model Component and Anim Component combo. It's only the newer Render Component and Anim Component combination that has this issue at the moment

Hi @kungfooman, it looks like the issue with cloning an entity with a render component and anim component is now isolated to the viewer. It's likely because the viewer has a specific code path for single entity that's loaded into it.
I've tested cloning in this project and it's working ok: https://playcanvas.com/project/808975/overview/renderanimtest
(Note that the launch page will require a use_local_engine url param as the latest clone changes are yet to be released)

@ellthompson - any update on this please? I'd be great to figure out, considering we're switching to render/anim component as the recommended path.


Compiletime crash pipeline CI

Adds a CI pipeline that builds each individual reproducer in CompiletimeCrashTests/

Although I think this Github actions approach is cool, it won't really scale for the amount of tests that we have planned. I'm afraid we'll have to write a tool to run these builds (and also execute them for the runtime pipeline)

What about it isn't scalable? You just mean there will be dozens+ of these tests running in a single job for each swift version?

Yeah there'll be hundreds of tests ideally. That times the versions of swift we want to test. Seems like an endless list of individual jobs. So seems like not the best way to do it to me.

Makes sense - my initial reaction is a job per swift version that runs all tests (so the matrix we have it at right now) but that runs all compile checks

Yeah agreed that's what this new iteration does.


Fix imported forward references in type hints

Summary
In type hints, strings are converted to typing.ForwardRef instances,
which only attempt to evaluate to a true reference when the are the
subject of a typing.get_type_hints call, which defines the scoped
names they can resolve over.  Further, the instances store their
resolved value, so they only need to be evaluated once.  Together, this
means that the evaluation order of type hints can change the result of a
program, if a ForwardRef is imported into a different scope.
In Terra, this happened within a type alias in the pulse module.  The
fix in this case is to ensure that the type aliases were concrete types
(by putting them after the definition of the classes they aliased over),
and references to the aliases within the same file were done by
forward reference.

Details and comments
Fix #7534.

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

14 of 14 (100.0%)  changed or added relevant lines in 1 file are covered.
5 unchanged lines in 2 files lost coverage.
Overall coverage decreased (-0.008%) to 83.134%

Files with Coverage Reduction
New Missed Lines
%

qiskit/extensions/quantum_initializer/uc.py
2
87.94%

qiskit/pulse/library/waveform.py
3
89.36%

Totals

Change from base Build<PHONE_NUMBER>:
-0.008%

Covered Lines:
52028

Relevant Lines:
62583

💛  - Coveralls

I thought a little about that, but I was worried about causing concrete code to run in all cases for something that should be handled entirely statically. In principle we could put something like
typing.get_type_hints(Schedule.<method that uses ScheduleComponent>)
typing.get_type_hints(ScheduleBlock.<method that uses BlockComponent>)

at the bottom of the file, but that will cause actual evaluation during normal code imports, and that's badly behaved; type hints are meant to be an optional feature of Python with no runtime overhead.  If we gate it inside a if typing.TYPE_CHECKING block, then there's no guarantee that the references would be evaluated, because those should only be read by static analysis.
There shouldn't be any problems with refactoring tools - they should all understand forward references within the same file.  The previous issue was that these references were being imported into other files, which didn't have the full context.


TEXT-91: RandomStringGenerator should be able to generate a String wi…

…th a random length

Looks good to me!


mysterious test failures, inability to check changes in state

Component
Forge
Have you ensured that all of these are up to date?

[X] Foundry
[X] Foundryup

What version of Foundry are you on?
forge 0.0.2 (0989cdc 2024-06-20T00:20:02.912238865Z)
What command(s) is the bug in?
forge test --zksync -vvvv --use 0.8.20
Operating System
Linux
Describe the bug
pragma solidity >=0.8 <0.9.0;

import { Test } from "forge-std/Test.sol";
import { console } from "forge-std/console.sol";

interface IMiningContract {
    function multiMint_SameAddress(address mintToAddress, uint256[] memory nonces) external;
    function usedCombinations(bytes32) external view returns (bool);
}

bytes32 constant DIGEST = 0x000000000000a8d299d120846e9c48444fbe330d9407a8c005848c491b2556f5;
address constant MINER = address(0xFaf20E5cA7E39d43A3aabc450602b4147c3aA62E);
uint256 constant NONCE = 0x29d48001900813c807e0aff4bbdc0ff11ff9b81c9e789bd91c3907e0000095c5;
address constant MINING_CONTRACT_ADDRESS = address(0x366d17aDB24A7654DbE82e79F85F9Cb03c03cD0D);
uint constant BLOCKNUM = 36_852_529;

contract Test1 is Test {
    function test1() external {
        vm.createSelectFork("zksync_era", BLOCKNUM - 2);
        IMiningContract mc = IMiningContract(MINING_CONTRACT_ADDRESS);
        uint256[] memory nonces = new uint256[](1);
        nonces[0] = NONCE;
        vm.startPrank(MINER);
        assertFalse(mc.usedCombinations(DIGEST), "entry in mapping, shouldn't be");
        mc.multiMint_SameAddress(MINER, nonces);
        assertTrue(mc.usedCombinations(DIGEST), "entry not in mapping, should be");
        vm.stopPrank();
    }
}

contract Blah {
    IMiningContract public mc;
    constructor(address a) {
        mc = IMiningContract(address(a));
    }
    function doit(address miner, uint256[] memory nonces) external {
        console.log("address of mining contract: %s", address(mc));
        mc.multiMint_SameAddress(miner, nonces);
    }
}

contract Test2 is Test {
    function test2() external {
        vm.createSelectFork("zksync_era", BLOCKNUM - 2);
        Blah blah = new Blah(MINING_CONTRACT_ADDRESS);
        uint256[] memory nonces = new uint256[](1);
        nonces[0] = NONCE;
        vm.startPrank(MINER);
        assertFalse(blah.mc().usedCombinations(DIGEST), "entry in mapping, shouldn't be");
        blah.doit(MINER, nonces);
        assertTrue(blah.mc().usedCombinations(DIGEST), "entry not in mapping, should be");
        vm.stopPrank();
    }
}

Above is test/Whatever.sol in a stock forge init project, except that I added the following to foundry.toml:
[rpc_endpoints]
zksync_era = "https://mainnet.era.zksync.io"

I'm testing with forge test --zksync -vvvv --use 0.8.20.
This code is about replaying this transaction: https://era.zksync.network/tx/0x14f963c64f1800aa2d8b938556ba662daecf55801869d96903398639d7a888a8
That tx was submitted in block 36_852_529 by 0xFaf20E5cA7E39d43A3aabc450602b4147c3aA62E. Without getting into the weeds about what the destination contract does, after the call to multiMint_SameAddress, there was an observable change, an additional entry in the map called usedCombinations. So after that call, usedCombinations(0x000000000000a8d299d120846e9c48444fbe330d9407a8c005848c491b2556f5) became true. It's still true, which we can see at https://era.zksync.network/address/0x366d17adb24a7654dbe82e79f85f9cb03c03cd0d#readContract#F47 .
Test1 / test1 represents my first attempt to replay the tx. It works like I expect. I go back to a block or two before the tx and do exactly what it did. Before the call, the entry is not in the map, and after the call, the entry is in the map. OK.
Test2 / test2 is a contrived attempt to show what happens when I start taking simplistic caveman code and splitting it up into sensical parts -- it stops working. It seems to stop being able to see the changes in the contract I'm testing. Can you help me understand why test1 works and test2 doesn't? Thanks.

Thanks for the report!
Could you let us know exactly the error you are getting? Is is the last assertion that fails or is there some other error message?

It's just the assertion that doesn't pass, no error message. I think test1 and test2 should either both pass, or both fail. Thanks.

Hey @0xBrian, I investigated the issue. Thanks for the reproducible example, it was really helpful!
I actually tried fetching the source and luckily the contract was verified on the explorer so I could take a look at how it worked, and noticed that the DIGEST is computed using a few items from the contract state, but also the msg.sender.
Unfortunately, the answer to your issue is rather bland: prank simply doesn't set the msg.sender for nested calls!
So, in test2, the msg.sender would end up being the address where Blah was deployed, and not MINER, as it would be in the test1.
I hope this helps!

OK, thank you for investigating. We figured it was something like that. But does it work this way in normal Foundry, or is it something related to the changes required for ZKSync? To me it seems like this behavior would prevent anyone from writing realistic tests.

Yes, that's intended foundry behaviour, we can also see this in the test suite here.
What we do require for ZKSync is that any contract running inside zkVM isn't able to use cheatcodes (in this case Blah), but you can work around that by disabling zkVM before the call to the external contract, run your cheatcodes there, and re-enable zkVM afterwards.
For example:
vm.zkVm(false);
blah.doit(...);

and inside doit:
vm.zkVm(true); //here or after prank is fine either way
// the important part is that `doit` isn't run inside zkVM
vm.prank(MINER);
...

As far as realistic test, I'm not sure I understand what you mean. If instead of Blah you had another contract, on chain, which handled the calls to MINING_CONTRACT_ADDRESS somehow, shouldn't you be calling tha contract instead then? And if instead it was some other kind of program off chain, wouldn't that basically be Test1?
You can always create other functions in the Test1 contract to group functionality, and as long as it's not prefixed with test (or a few others like invariant) then it won't be executed as a standalone test.
I'll go ahead and close the issue since we clarified it's intended behaviour, but if you have any more questions you can just comment here on the issue and I'll still reply :)


Deprecate Format and use LogFormat instead

Description
Deprecate field Format and use LogFormat instead to avoid confusion in field name with other exporter.
Changes include

[ ] Bugfix (non-breaking change that solves an issue)
[ ] New feature (non-breaking change that adds functionality)
[x] Breaking changes (change that is not backward-compatible and/or changes current functionality)

Checklist

[x] I have tested this code
[x] I have added unit test to cover this code
[x] I have updated the documentation (README.md and /docs)
[x] I have followed the contributing guide

Coverage decreased (-0.1%) to 94.169% when pulling 48e47cdd49020770a843fcb23e608fc69b13b49e on deprecate/deprecate-log-format-exporter into<PHONE_NUMBER>273b69772333fef594b77749996d78 on main.


Document and test "page" and "rows_per_page" parameters

The API supports those parameters to implement quick pagination.
The parameters are used by cartodb rails application, only in conjunction with the JSON (default) format.
We'll want to officialize these parameters by documenting them in doc/API.md.
I'd still like to drop the support (SQL is already capable of doing pagination) but as the currently provided mechanism is in use it's best to document and test.

Can we expect these parameters to continue to be supported? I'd like to use them for an app I'm working on. Thanks!


Plugin Recorder no types, broken import.

Bug description
Upgraded from 7.5.3 -> 7.5.6.
import RecordPlugin from "wavesurfer.js/dist/plugins/record.esm.js";
Next.js project, everything normal. Been running Wavesurfer for months no issues.
Could not find a declaration file for module 'wavesurfer.js/dist/plugins/record.esm.js'. '/home/cjft/Documents/github/lalaland/lalaland-app/node_modules/wavesurfer.js/dist/plugins/record.esm.js' implicitly has an 'any' type.
  If the 'wavesurfer.js' package actually exposes this module, consider sending a pull request to amend 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/wavesurfer.js't

I have suspicion it's from this commit here: https://github.com/katspaugh/wavesurfer.js/commit/add8c247b3e638682d69d723178bb1e19d57c9d6
Something not correct with plugin types.
Installing: @types/wavesurfer.js did not help.
Environment

Browser: Chrome

Minimal code snippet
create-next-app
import RecordPlugin from "wavesurfer.js/dist/plugins/record.esm.js";
Expected result
Recorder plugin imports.
Obtained result
It breaks everything and fails.
Screenshots

downgrading to: 7.5.4 fixes it.

Thanks for the report! Closing to merge with #3446 (same issue).

Thanks for the report! Closing to merge with #3446 (same issue).

fastest bug fixer in the metaverse! great work!


Create test for ART2

create example and debug module

Completed but does not work. ART2 is just a bad algorithm. Warnings added


[REVIEW]: No plots in plot_jax.py

Dear authors,
The name of the example script examples/miscellaneous/plot_jax.py does not perform any plotting. It may be helpful to either rename the script to better reflect its functionality or modify the script to include plotting if that was the intended purpose.
REVIEW ISSUE: https://github.com/openjournals/joss-reviews/issues/7360

Indeed, we used plot_jax for the same reason as #64. We renamed the file for examples/miscellaneous/plot_jax.py.
Thanks !


Add basic GET test to check core functionality

Currently windows systems will blindly install this module despite not having curl.
This causes frustrating issues for upstream for modules who fail due to their reliance on this module.
By running a simple test we should be able to deduce if the module can be installed or not on a system.

If we checked whether users had curl or not, we would use Build.pm, not tests.

OK, that is probably a better way to test curl specifically.
Currently the module installs even when it doesn't function. This is particularly frustrating when this module is brought as a dependency of another module. In this situation the module which depends will fail its tests and look like it's failing, this failure to report this modules failure makes debugging failures much more time consuming.
What would be the best way forward to fix this?


pointerConfig on AreaGraph (Android)

Hello!
The Android integration for pointerConfig is quite jaggy
When will that be fixed?

Any update on this?

Not yet @PROda221
Will try to fix it and release an update by this weekend.

Looking forward to it! Hoping for the best this weekend👍

Hi @PROda221 👋
The issue has been resolved in version 1.2.18🎉
Cheers!🍺

Hello @Abhinandan-Kushwaha,
I added the updated library to my project but the problem still persists. Let me attach a video here:
https://user-images.githubusercontent.com/31884259/168488626-1dc0adfe-68cd-49ac-bb05-63eea9abb99b.mp4

Hi @PROda221
The issue on Android no more exists if you set autoAdjustPointerLabelPosition to false.
When autoAdjustPointerLabelPosition is true, it's still jaggy on Android.
Will look into it soon.

Hi @PROda221
Yes, the issue still persists, but it's much better than the previous video.
And this seems to be an issue with Android itself. I am still working on this. Hoping to get it fixed in 1-2 weeks.

Oh ok got it. Thanks.
Waiting on the fix <3

Any updates?

@Abhinandan-Kushwaha Same here, is there already an fix or workaround after such a time? :)

Any updates for this situation?

any update still having the same issue

Hey, any news on this issue?

Hey, any news on this issue?
Researching a bit more this seems to be connected with this RN issue: facebook/react-native#31843
Some proper rewrite might be need on the lineChart side

Hi guys, with the issue share by @rodrigolourenco, I did some research and testing and found a way to fix this.
So I notice that the issue in Android is that when our pointer (finger touch) hit the Label component. The GestureEvent location will be relative to that Label and no longer relative to our chart. So I set the pointerEvent of my Label component to none and now the issue is gone.
You guys can checkout the video I attached below
https://github.com/Abhinandan-Kushwaha/react-native-gifted-charts/assets/114563576/a95b6289-7285-4935-a4b0-38e26a169887

Sometime the flicker event still happen, I noticed the same issue above also occur when our finger touch the pointer (usually the pointer dot in LineChart) so you will need to make a patch to remove pointerEvent for the pointer of the chart as below

FYI: I use verion 1.3.11

Hi @loc-nguyenthien 👋
Kudos to your research and thanks a ton! This actually solved the problem. I have added pointerEvents='none' as per your suggestion and it works like a charm 🎉
Fixed in version 1.3.12

Hi @Abhinandan-Kushwaha
I should be thankful for your library  🎉 And just to be sure, since we are allowed other to add their own customize pointerLabelComponent, I think we should note this into the document (i.e. in Common issues) so that other will notice this

@loc-nguyenthien
I will make this update. Thanks again!

Hi @loc-nguyenthien 👋
I have addedpointerEvents='none' as per your suggestion in version 1.3.13`


PHP Catchable fatal error:  Object of class WP_Error could not be converted to string

Steps to reproduce behavior
I don't know how to reproduce, but here's the story:
Suddenly my site become only plain text, no CSS, no JS. But WP-Admin works fine.
I disabled all plugins and the site works (with Twentyseventeen theme). Then I proceed to reactivating them one by one to see. But after all is reactivated, no more error and the site works fine just like before.
What version of WordPress, PHP and Timber are you using?

WordPress
Timber 1.8.4
PHP 5.6.40

My hosting is INMOTION with this specs:

Hosting Package
default

Server Name
vps36227

cPanel Version
78.0 (build 13)

Apache Version
2.4.38

PHP Version
5.6.40

MySQL Version
10.2.22-MariaDB

Architecture
x86_64

Operating System
linux

Shared IP Address
172.81.119.xxx

Path to Sendmail
/usr/sbin/sendmail

Path to Perl
/usr/bin/perl

Perl Version
5.16.3

Kernel Version
3.10.0-042stab127.2

How did you install Timber? (for example, from GitHub, Composer/Packagist, WP.org?)
From WordPress dashboard
Cause of Error
I checked the Error Log and saw tons of these errors:
PHP Catchable fatal error:
Object of class WP_Error could not be converted to string in
/home/mysite/public_html/mysite.com/wp-content/plugins/timber-library/vendor/twig/twig/lib/Twig/Environment.php(462) : eval()'d code on line 58

Followed by occasional Memory limit error:
PHP Fatal error:
Allowed memory size of 67108864 bytes exhausted (tried to allocate 81 bytes) in
 /home/mysite/public_html/mysite.com/wp-includes/functions.php on line 5213

I believe Memory limit is the reason why the site became broken. But I'm not sure whether Timber's bug is related to it.
But I still want to fix the Timber's bug because I still get that message every few minutes in my Error Log.
Anyone else experience this before?
Thanks

@hrsetyono thanks for providing such thorough information. From the looks of it, something in the WP/PHP layer is triggering an error which Twig is trying to output in one of your templates (something within {{ }}). Because the error can't be converted to a string you get a fatal.
Take a look and see if there's a specific theme PHP or Twig file listed in the error stack. You might have to narrow in on the specific chunk using a wolf fence

Hi thanks for the reply!
Just for an update, I have narrowed out the cause of the error. It's apparently the WP Super Cache plugin.
When I reactivated WP Super Cache, the setting is set to off. After turning it on, I get that same error.
So the Twig error is not related to my site being broken. But I will still check what cause it using wolf fence.


Drop Node 14 and require Node 16 or higher

tsconfig target and liv can be bumped to es2021, see https://github.com/kamilkisiela/graphql-config/blob/master/tsconfig.json#L4-L5

Done @n1ru4l 👍