The conversion of accucor to unicorr results in an incorrect formula on rows when there is no C12 PARENT row for a compound

BUG DESCRIPTION
Problem
When the accucor original sheet has a compound with no row for the C12 PARENT, the conversion to unicorr results in that compound being given the formula from the preceding compound.  This manifests as a ConflictingValueError once the loader gets to the row with the correct formula.
Steps to reproduce

Run the load_peak_annotations script on col005d_tissue B H L Q TA_corrected.xlsx in the cold exposure study (after having loaded all other data from the study doc):

python ../../tracebase/manage.py load_peak_annotations --infile col005d_tissue\ B\ H\ L\ Q\ TA_corrected.xlsx --peak-annotation-details-file "TraceBase Animal and Sample Table Templates_Cold Exposure.xlsx"

Note that all other study doc sheets (except the files sheet) must be loaded prior to running this command.
Current behavior
The first few PeakGroup records for 3-hydroxyisobutyrate load without error, but with the wrong formula, but once it gets to the correct formula, you get a ConflictingValueError:
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase-rabinowitz-data/cold_exposure/../../tracebase/manage.py", line 22, in <module>
    main()
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase-rabinowitz-data/cold_exposure/../../tracebase/manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/DataRepo/management/commands/load_table.py", line 409, in handle_wrapper
    retval = fn(self, *args, **options)
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/DataRepo/management/commands/load_peak_annotations.py", line 256, in handle
    self.load_data()
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/DataRepo/management/commands/load_table.py", line 450, in load_data
    return self.loader.load_data(*args, **kwargs)
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/DataRepo/loaders/base/table_loader.py", line 2236, in load_wrapper
    retval = fn(*args, **kwargs)
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/DataRepo/models/maintained_model.py", line 1243, in wrapper
    return fn(*args, **kwargs)
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/DataRepo/loaders/peak_annotations_loader.py", line 501, in load_data
    pgrec, _ = self.get_or_create_peak_group(
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/contextlib.py", line 79, in inner
    return func(*args, **kwds)
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/DataRepo/loaders/peak_annotations_loader.py", line 768, in get_or_create_peak_group
    self.handle_load_db_errors(e, PeakGroup, rec_dict)
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/DataRepo/loaders/base/table_loader.py", line 2814, in handle_load_db_errors
    errs_found = self.check_for_inconsistencies(
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/DataRepo/loaders/base/table_loader.py", line 2627, in check_for_inconsistencies
    self.aggregated_errors_object.buffer_exception(
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/DataRepo/utils/exceptions.py", line 2345, in buffer_exception
    buffered_tb_str = self.get_buffered_traceback_string()
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/DataRepo/utils/exceptions.py", line 2325, in get_buffered_traceback_string
    for step in traceback.format_stack()

The above caught exception had a partial traceback:

  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/DataRepo/loaders/peak_annotations_loader.py", line 747, in get_or_create_peak_group
    rec, created = PeakGroup.objects.get_or_create(**rec_dict)
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/.venv/lib/python3.9/site-packages/django/db/models/manager.py", line 87, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/.venv/lib/python3.9/site-packages/django/db/models/query.py", line 923, in get_or_create
    return self.create(**params), True
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/.venv/lib/python3.9/site-packages/django/db/models/query.py", line 658, in create
    obj.save(force_insert=True, using=self.db)
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/DataRepo/models/peak_group.py", line 199, in save
    return super().save(*args, **kwargs)
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/DataRepo/models/hier_cached_model.py", line 187, in save
    super().save(*args, **kwargs)  # Call the "real" save() method.
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/DataRepo/models/maintained_model.py", line 557, in save
    super().save(*args, **kwargs)
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/.venv/lib/python3.9/site-packages/django/db/models/base.py", line 814, in save
    self.save_base(
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/.venv/lib/python3.9/site-packages/django/db/models/base.py", line 877, in save_base
    updated = self._save_table(
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/.venv/lib/python3.9/site-packages/django/db/models/base.py", line 1020, in _save_table
    results = self._do_insert(
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/.venv/lib/python3.9/site-packages/django/db/models/base.py", line 1061, in _do_insert
    return manager._insert(
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/.venv/lib/python3.9/site-packages/django/db/models/manager.py", line 87, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/.venv/lib/python3.9/site-packages/django/db/models/query.py", line 1805, in _insert
    return query.get_compiler(using=using).execute_sql(returning_fields)
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/.venv/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 1822, in execute_sql
    cursor.execute(sql, params)
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/.venv/lib/python3.9/site-packages/django/db/backends/utils.py", line 102, in execute
    return super().execute(sql, params)
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/.venv/lib/python3.9/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/.venv/lib/python3.9/site-packages/django/db/backends/utils.py", line 80, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/.venv/lib/python3.9/site-packages/django/db/backends/utils.py", line 89, in _execute
    return self.cursor.execute(sql, params)
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/.venv/lib/python3.9/site-packages/django/db/utils.py", line 91, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/Users/rleach/PROJECT-local/TRACEBASE/tracebase/.venv/lib/python3.9/site-packages/django/db/backends/utils.py", line 89, in _execute
    return self.cursor.execute(sql, params)
EXCEPTION55(ERROR): ConflictingValueError: Conflicting field values encountered in row [12655] of sheet [Peak Annotations] in col005d_tissue B H L Q TA_corrected.xlsx in PeakGroup record [{'name': '3-hydroxyisobutyrate', 'formula': 'C5H8O3', 'msrun_sample': 3148, 'peak_annotation_file': 76, 'compounds': [<Compound: 3-hydroxyisobutyrate>]}]:
	formula in
		database: [C5H8O3]
		file: [C4H8O3]

Expected behavior
The correct formula should be on every row for 3-hydroxyisobutyrate and no exception should occur.
Suggested Change
This is happening due to the "fill down" strategy used to fill in missing formulas.  An assumption had been made that every compound would have a C12 PARENT row.  That may be a reasonable assumption, and perhaps the data in this file was manually edited incorrectly, but the old loading code did not have a problem with it, and loaded the parent row as if there were 0 observations without heavy carbon.
Instead, the new loader should catch this issue and buffer an exception about the C12 PARENT row being missing.  It should suggest that the user re-pick the peaks to include the C12 PARENT peak.
Comment

None

ISSUE OWNER SECTION
Assumptions

List of assumptions made WRT the code
E.g. We will assume input is correct (explaining why there is no validation)

Limitations

A list of things this work will specifically not do
E.g. This feature will only handle the most frequent use case X

Affected Components

change: File path or DB table ...
add: Environment variable or server setting
delete: External executable or cron job

Requirements

[ ] 1. List of numbered conditions to be met for the feature
[ ] 2. E.g. Every column/row must display a value, i.e. cannot be empty
[ ] 3. Numbers for reference & checkboxes for progress tracking

DESIGN
GUI Change description

None provided
Code Change Description

None provided
Tests

[ ] 1. A description of at least one test for each requirement above.
[ ] 2. E.g. Test for req 2 that there's an exception when display value is ''
[ ] 3. Numbers for reference & checkboxes for progress tracking

Some notes on the solution I'm about to push...
The cold exposure data takes about 5 hours to load, so it just get to the issue quickly, I loaded all the data individually:
python ../../tracebase/manage.py load_compounds --infile "TraceBase Animal and Sample Table Templates_Cold Exposure.xlsx"
python ../../tracebase/manage.py load_tracers --infile "TraceBase Animal and Sample Table Templates_Cold Exposure.xlsx"
python ../../tracebase/manage.py load_infusates --infile "TraceBase Animal and Sample Table Templates_Cold Exposure.xlsx"
python ../../tracebase/manage.py load_protocols --infile "TraceBase Animal and Sample Table Templates_Cold Exposure.xlsx"
python ../../tracebase/manage.py load_sequences --infile "TraceBase Animal and Sample Table Templates_Cold Exposure.xlsx"
python ../../tracebase/manage.py load_msruns --infile "TraceBase Animal and Sample Table Templates_Cold Exposure.xlsx"
python ../../tracebase/manage.py load_animals --infile "TraceBase Animal and Sample Table Templates_Cold Exposure.xlsx"

Then I tested the issue using the peak annotations loader:
python ../../tracebase/manage.py load_peak_annotations --infile col005d_tissue\ B\ H\ L\ Q\ TA_corrected.xlsx --peak-annotation-details-file "TraceBase Animal and Sample Table Templates_Cold Exposure.xlsx"

I had some debug prints of the row data in the loader that showed me that the DataFrame had the problem in it - associating the compound with the wrong formula, so I knew it was the conversion from accucor to unicorr.
I then started converting the dataframe manually step by step in the shell:
In [1]: from DataRepo.utils.file_utils import read_from_file

In [2]: origdf = read_from_file("../tracebase-rabinowitz-data/cold_exposure/col005d_tissue B H L Q TA_corrected.xlsx", sheet=None)

In [4]: origdf["Original"]["C_Label"] = origdf["Original"]["isotopeLabel"].str.split("-").str.get(-1).replace({"C12 PARENT": "0"}).astype(int)

In [17]: outdf = {"Corrected": origdf["Corrected"].melt(var_name="Sample Header", value_name="Corrected Abundance", id_vars=["Compound","C_Label","adductName"]), "Original": origdf["Original"].melt(var_name="Sample Header", value_name="Corrected Abundance", id_vars=["label", "metaGroupId", "groupId", "goodPeakCount
    ...: ", "medMz", "medRt", "maxQuality", "adductName", "isotopeLabel", "compound", "compoundId", "formula", "expectedRtDiff", "ppmDiff", "parent", "Compound", "C_Label"])}

In [26]: mergeddf = pd.merge(left=outdf["Corrected"], right=outdf["Original"], on=["Compound", "C_Label", "Sample Header"], how="left")

In [28]: mergeddf[["Compound", "C_Label", "Sample Header", "isotopeLabel", "Compound", "formula", "Corrected Abundance_y"]][0:20]
Out[28]:
                                      Compound  C_Label Sample Header isotopeLabel                                    Compound   formula  Corrected Abundance_y
0   2-keto-isocaproate / 2-keto-methylvalerate        0  col005d_01_B   C12 PARENT  2-keto-isocaproate / 2-keto-methylvalerate   C6H10O3           6.866678e+06
1   2-keto-isocaproate / 2-keto-methylvalerate        1  col005d_01_B          NaN  2-keto-isocaproate / 2-keto-methylvalerate       NaN                    NaN
2   2-keto-isocaproate / 2-keto-methylvalerate        2  col005d_01_B          NaN  2-keto-isocaproate / 2-keto-methylvalerate       NaN                    NaN
3   2-keto-isocaproate / 2-keto-methylvalerate        3  col005d_01_B          NaN  2-keto-isocaproate / 2-keto-methylvalerate       NaN                    NaN
4   2-keto-isocaproate / 2-keto-methylvalerate        4  col005d_01_B          NaN  2-keto-isocaproate / 2-keto-methylvalerate       NaN                    NaN
5   2-keto-isocaproate / 2-keto-methylvalerate        5  col005d_01_B          NaN  2-keto-isocaproate / 2-keto-methylvalerate       NaN                    NaN
6   2-keto-isocaproate / 2-keto-methylvalerate        6  col005d_01_B  C13-label-6  2-keto-isocaproate / 2-keto-methylvalerate   C6H10O3           7.798782e+05
7                           2-keto-isovalerate        0  col005d_01_B   C12 PARENT                          2-keto-isovalerate    C5H8O3           3.448402e+06
8                           2-keto-isovalerate        1  col005d_01_B          NaN                          2-keto-isovalerate       NaN                    NaN
9                           2-keto-isovalerate        2  col005d_01_B          NaN                          2-keto-isovalerate       NaN                    NaN
10                          2-keto-isovalerate        3  col005d_01_B          NaN                          2-keto-isovalerate       NaN                    NaN
11                          2-keto-isovalerate        4  col005d_01_B          NaN                          2-keto-isovalerate       NaN                    NaN
12                          2-keto-isovalerate        5  col005d_01_B  C13-label-5                          2-keto-isovalerate    C5H8O3           4.703913e+05
13                        3-hydroxyisobutyrate        0  col005d_01_B          NaN                        3-hydroxyisobutyrate       NaN                    NaN
14                        3-hydroxyisobutyrate        1  col005d_01_B          NaN                        3-hydroxyisobutyrate       NaN                    NaN
15                        3-hydroxyisobutyrate        2  col005d_01_B          NaN                        3-hydroxyisobutyrate       NaN                    NaN
16                        3-hydroxyisobutyrate        3  col005d_01_B          NaN                        3-hydroxyisobutyrate       NaN                    NaN
17                        3-hydroxyisobutyrate        4  col005d_01_B  C13-label-4                        3-hydroxyisobutyrate    C4H8O3           3.491334e+04
18                                       C16:0        0  col005d_01_B   C12 PARENT                                       C16:0  C16H32O2           5.762502e+08
19                                       C16:0        1  col005d_01_B          NaN                                       C16:0       NaN                    NaN

That showed me that it clearly must be the next step (fill down of the formula) that was causing the wrong formula to get applied.  I figured that I just needed to create a lookup of compound to formula, because each compound has at least 1 row where it has a formula.  This creates that lookup dict:
In [52]: mergeddf.loc[mergeddf["formula"].notna(), ["Compound", "formula"]].set_index("Compound")["formula"].to_dict()
Out[52]:
{'2-keto-isocaproate / 2-keto-methylvalerate': 'C6H10O3',
 '2-keto-isovalerate': 'C5H8O3',
 '3-hydroxyisobutyrate': 'C4H8O3',
 'C16:0': 'C16H32O2',
 'C18:1': 'C18H34O2',
 'C18:2': 'C18H32O2',
 'a-ketoglutarate': 'C5H6O5',
 'alanine': 'C3H7NO2',
 'arginine': 'C6H14N4O2',
 'asparagine': 'C4H8N2O3',
 'aspartate': 'C4H7NO4',
 'citrate/isocitrate': 'C6H8O7',
 'creatine': 'C4H9N3O2',
 'creatinine': 'C4H7N3O',
 'glutamate': 'C5H9NO4',
 'glutamine': 'C5H10N2O3',
 'glycine': 'C2H5NO2',
 'homocarnosine': 'C10H16N4O3',
 'isoleucine': 'C6H13NO2',
 'lactate': 'C3H6O3',
 'leucine': 'C6H13NO2',
 'lysine': 'C6H14N2O2',
 'malate': 'C4H6O5',
 'methionine': 'C5H11NO2S',
 'phenylalanine': 'C9H11NO2',
 'proline': 'C5H9NO2',
 'pyruvate': 'C3H4O3',
 'serine': 'C3H7NO3',
 'succinate': 'C4H6O4',
 'threonine': 'C4H9NO3',
 'tyrosine': 'C9H11NO3',
 'uracil': 'C4H4N2O2',
 'valine': 'C5H11NO2'}

Then I could use apply to do a lookup for each row of the dataframe:
In [54]: mergeddf["formula"] = mergeddf["formula"].fillna(mergeddf["Compound"].apply(lambda x: mergeddf.loc[mergeddf["formula"].notna(), ["Compound", "formula"]].set_index("Compound")["formula"].to_dict().get(x)))

In [57]: mergeddf[["Compound", "C_Label", "Sample Header", "isotopeLabel", "Compound", "formula", "Corrected Abundance_y"]][0:20]
Out[57]:
                                      Compound  C_Label Sample Header isotopeLabel                                    Compound   formula  Corrected Abundance_y
0   2-keto-isocaproate / 2-keto-methylvalerate        0  col005d_01_B   C12 PARENT  2-keto-isocaproate / 2-keto-methylvalerate   C6H10O3           6.866678e+06
1   2-keto-isocaproate / 2-keto-methylvalerate        1  col005d_01_B          NaN  2-keto-isocaproate / 2-keto-methylvalerate   C6H10O3                    NaN
2   2-keto-isocaproate / 2-keto-methylvalerate        2  col005d_01_B          NaN  2-keto-isocaproate / 2-keto-methylvalerate   C6H10O3                    NaN
3   2-keto-isocaproate / 2-keto-methylvalerate        3  col005d_01_B          NaN  2-keto-isocaproate / 2-keto-methylvalerate   C6H10O3                    NaN
4   2-keto-isocaproate / 2-keto-methylvalerate        4  col005d_01_B          NaN  2-keto-isocaproate / 2-keto-methylvalerate   C6H10O3                    NaN
5   2-keto-isocaproate / 2-keto-methylvalerate        5  col005d_01_B          NaN  2-keto-isocaproate / 2-keto-methylvalerate   C6H10O3                    NaN
6   2-keto-isocaproate / 2-keto-methylvalerate        6  col005d_01_B  C13-label-6  2-keto-isocaproate / 2-keto-methylvalerate   C6H10O3           7.798782e+05
7                           2-keto-isovalerate        0  col005d_01_B   C12 PARENT                          2-keto-isovalerate    C5H8O3           3.448402e+06
8                           2-keto-isovalerate        1  col005d_01_B          NaN                          2-keto-isovalerate    C5H8O3                    NaN
9                           2-keto-isovalerate        2  col005d_01_B          NaN                          2-keto-isovalerate    C5H8O3                    NaN
10                          2-keto-isovalerate        3  col005d_01_B          NaN                          2-keto-isovalerate    C5H8O3                    NaN
11                          2-keto-isovalerate        4  col005d_01_B          NaN                          2-keto-isovalerate    C5H8O3                    NaN
12                          2-keto-isovalerate        5  col005d_01_B  C13-label-5                          2-keto-isovalerate    C5H8O3           4.703913e+05
13                        3-hydroxyisobutyrate        0  col005d_01_B          NaN                        3-hydroxyisobutyrate    C4H8O3                    NaN
14                        3-hydroxyisobutyrate        1  col005d_01_B          NaN                        3-hydroxyisobutyrate    C4H8O3                    NaN
15                        3-hydroxyisobutyrate        2  col005d_01_B          NaN                        3-hydroxyisobutyrate    C4H8O3                    NaN
16                        3-hydroxyisobutyrate        3  col005d_01_B          NaN                        3-hydroxyisobutyrate    C4H8O3                    NaN
17                        3-hydroxyisobutyrate        4  col005d_01_B  C13-label-4                        3-hydroxyisobutyrate    C4H8O3           3.491334e+04
18                                       C16:0        0  col005d_01_B   C12 PARENT                                       C16:0  C16H32O2           5.762502e+08
19                                       C16:0        1  col005d_01_B          NaN                                       C16:0  C16H32O2                    NaN

Given Michael's response to issue 138 on the data repo, re-opening this issue to change the strategy.  Instead of handling the formula fill in an inefficient manner, there should be an exception about the C12 PARENT row being missing from the original peak annotations file.
There are 2 components to this issue:

Detect and buffer the exception on the submission start page
Detect and raise the issue in the loading pipeline

I think that both contexts use ConvertedTableLoader, to get the data, so if the solution is implemented in the PeakAnnotationsLoader, it should get buffered in both contexts.  Just test both before creating a pull request.

This is done and merged.  There should exist a parent for every compound.  A new errors is buffered now.


add portIndex portValue portName support for health-check

Current coverage is 43.75% (diff: 76.81%)

No coverage report found for master at 82ac7c3.

Powered by Codecov. Last update 82ac7c3...9c0779b

LGTM


Add a cmd line options to suppress warnings

Instead of adding a Boolean argument for each warning we want to suppress implement a more generic method to suppress, the warnings.
e.g instead of the --noFallthroughCasesInSwitch just suppress warning 7029

:+!:

why?

--warn x,y,z pulls all the "even stricter" flags under a single flag. Otherwise we'll end up with a million optional strictness flags that will drown out the other flags in documentation.

looking at --noFallthroughCasesInSwitch tells you what it does., but --suppressWarning 7029 is meaningless.
The other issue here is diluting the value proposition. the main value of typescript is to catch type errors. the tooling quality depends on some of these errors being addressed by the user. if we muffle some of these errors, the whole experience would degrade. On the other hand, what we provide is a set of known knobs to switch off certain groups of errors, that we have deemed as safe to ignore.
I do not think there is anything wrong with being prescriptive here. For documentation, we could split the help into main, and extended to make sure we are not drowning common flags in the --suppres* ones


feat: new plugin hatsu

Description
This is an updated version of the same plugin in Aoba.
Check List

[x] Have you read the
CODE OF CONDUCT
[x] Have you read the document
CONTRIBUTING

[x] One pull request per feature. If you want to do more than one thing,
send multiple pull request.
[x] Write tests.
[x] Run deno fmt to fix the code format before commit.
[ ] Document any change in the CHANGELOG.md.

Please, give me some time to review this PR (and the middleware too). I didn't know the hatsu library and want to understand what this plugin does and what's the problem to solve. 🙏
Thanks!

I didn't know the hatsu library and want to understand what this plugin does and what's the problem to solve. 🙏

The Hatsu plugin gets ActivityPub integration from Hatsu by setting up a static .well-known file and setting an activity+json alternate for matching urls.
https://hatsu.cli.rs/users/redirecting-with-static-files-and-markup.html
On top of this, Hatsu middleware goes a step further and redirects for well-known and activity+json requests to be compatible with more Fediverse software.

Thanks for the detailed explanation!
If I understand correctly, this plugins does two things:

It creates a static version of the webfinger file to support requests like .well-known/webfinger?query_params. Due the file is static, the query parameters are really not used, it shows always the same content.

I understand the middleware in https://github.com/lumeland/lume/pull/632/ does this redirect to the hatsu server.

It also creates alternate links tags in some pages, which seems to be a special feature of hatsu, right?

What do you thing about split this plugin in two?
For example, a webfinger plugin to generate the /.well-known/webfinger file (and other files that may be required in the .well-known folder). This plugin could generate the file using static data and/or fetch the data from other services. For example:
site.use(webfinger({
    data: {}, // Data passed directly
    remote: // Url with a remote bridge, like  https://hatsu.local
});

Does it make sense to you?
This could allow to generate webfinger files with different methods and would be more flexible.
And hatsu plugin could be a different plugin to implement hatsu specific features.
Let me know your thoughts.

It creates a static version of the webfinger file to support requests like .well-known/webfinger?query_params. Due the file is static, the query parameters are really not used, it shows always the same content.

I understand the middleware in feat: new middleware hatsu #632 does this redirect to the hatsu server.

yes.

It also creates alternate links tags in some pages, which seems to be a special feature of hatsu, right?

right, I think this is the main feature of this plugin, to provide search discovery on Fediverse for website URLs.

What do you thing about split this plugin in two?
For example, a webfinger plugin to generate the /.well-known/webfinger file (and other files that may be required in the .well-known folder). This plugin could generate the file using static data and/or fetch the data from other services. For example:

The implementation is simple, though it will make configuration more cumbersome.
People who only need webfinger can always simply create a static webfinger file.

Does it make sense to you? This could allow to generate webfinger files with different methods and would be more flexible.
And hatsu plugin could be a different plugin to implement hatsu specific features. Let me know your thoughts.

I feel necessary to think about the configuration format to try to avoid getting more complicated.


Remove upper bound from wagtail dependency

Since wagtail-factories is now a testing dependency of Wagtail itself, having an upper bound of <5.0 is blocking us from testing the now-in-development Wagtail 5.0.
There shouldn't be any risk in doing this, since if Wagtail makes a breaking change in future that breaks wagtail-factories, we (as Wagtail core devs) will need to fix wagtail-factories in order to proceed :-)

@jams2 can we get this in? or perhaps #70 with the upper bound removed?

Superceded by #74


Each flowchart should have its separate folder for static files.

Sometimes,i have a lot of flowcharts. the flowchart needs to store some static files. Thus, each flowchart should have its separate folder,and nodeRED should give each of these flowcharts a root directory.

Hi,
for general feature requests/discussions, please use the mailing list
Nick

The storage mechanism is pluggable. If this is how you want node-red to store flows, you can create your own storage implementation and use that. We won't change the default filesystem storage plugin to split the flows across multiple files.


Add /installed_extensions endpoint to collect statistics about extension usage.

Also log this information on compute start
Problem
We want to collect statistics about postgres extensions usage.
Summary of changes
Add /extensions endpoint to collect statistics about extension usage.
Also log this information on compute start.
We probably should leave only one option?
Feature design comments are welcome.

How is the new API endpoint going to be called? Who's going to call it and when?
Did you consider exporting this information as a prometheus metric, instead?

How is the new API endpoint going to be called? Who's going to call it and when?

In my idea the caller will be cplane, similar to GetStartupMetrics.

Did you consider exporting this information as a prometheus metric, instead?

Is it possible to add arbitrary hashmap as prometheus metric? I thought, it only supports prometheus metric types.


Remove ICEndpoint reference in ICEmail

After #190 and #192 the reference to an ICEndpoint in ICEmail could be removed

will be discussed in #190


Use package.json engines semver expression

Update the nvm use algorithm to dynamically interpret the semver expression from the local package.json's engines.node value.
Key:
:white_check_mark: : completed
:ballot_box_with_check: : existing nvm functionality
:soon: : in progress
:x: : not started
Update to nvm use algorithm:

☑ try to resolve to node version in local .nvmrc
✅ try to resolve to node version in package.json "engines.node" value (tested ✅)

✅ Retrieve semver from local package.json's engines.node (tested ✅)
✅ Resolve retrieved semver to the newest compatible node version (tested ✅)

☑ try to resolve to node version in inherited .nvmrc
☑ try to resolve to use default
☑ if error and show help text

I'd love to see this become part of nvm! 👍
@edwmurph I wonder if you could limit the network requests even further (once per day or even per configurable time interval) by saving the curl'd data to a file, possibly a hidden file in $NVM_DIR or $HOME or , and checking that file's modification time to determine whether a new copy should be downloaded?

overwriting shell builtins is a huge no
I completely agree however I think there are other ways nvm could leverage the ability to dynamically interpret semver expressions. For instance what do you think about instead hooking this logic into calls to "nvm use" when there are no other arguments and there isn't a version specified in a local .nvmrc?

"overwriting shell builtins is a huge no"
I completely agree however I think there are other ways nvm could leverage the ability to dynamically interpret semver expressions. For instance what do you think about instead hooking this logic into calls to "nvm use" when there are no other arguments and there isn't a version specified in a local .nvmrc?

@edwmurph i totally agree that the current algorithm when no version is supplied:

check for .nvmrc
use default, if present
error and show help text

could be enhanced to, for example:

check for local .nvmrc
check for package.json "engines"
check for inherited .nvmrc
use default, if present
error and show help text

Assuming that reading the semver range and interpreting it is something we can ship.

That sounds great! There's still a little work left to do but I don't see why we couldn't get this ready to ship. Most of the remaining work is just ironing out some implementation decisions that I could use your input on.

When interpreting ranges, how do you think a version should be chosen? E.g. Should the newest version be chosen or the oldest? The current implementation has a flag that lets you choose but is this configuration point something you think we should keep?
The algorithm for interpreting semver expressions relies on having a list of up-to-date node versions. Right now I'm retrieving them from http://nodejs.org/dist/. Do you feel comfortable with this dependency? Also per @joshdick's suggestion, do you think this list should be cached in a file to further limit the number of network requests?
What do you think about the name nvm_helper?

I don't want to get your hopes up, though - this (and any implementation of semver parsing) is almost certainly too large to be included in nvm with its current architecture.
It's wonderful to be exploring what it would look like - but please don't be under any illusions.

I don't think that's a necessary configuration point; when choosing two semver ranges (the one in package.json, and the one representing all installed versions) always choose the latest matching version, full stop.
Semver is a static format - i'm confused why we need a list of the remote versions at all for nvm use/nvm ls/nvm alias. Potentially for install, but we already grab that list as part of ls-remote during install, so that's not really an issue.
As I said above, 100% of the code needs to live in nvm.sh or nvm-exec, so the name isn't really important right now.

Good points I agree with all three of your responses thanks.
Also, could you clarify your concern about this logic being too large to be included? Are you saying you don't like that "visually" there are too many lines of code to add to nvm.sh for an edge use case?

It's not really about visual size, it's about how much code there is to reason about, how likely bugs will be, how hard it will be to fix those bugs, etc.

Ok that makes sense. I have some ideas I'd like to explore around how to simplify the semver parser logic so I'm going to pursue this a little further. My goal is to update this PR by this weekend with a more polished proposal of the enhanced nvm use algorithm that accommodates your concerns as best as possible. Thanks for all your input.

In order to setup a dev environment, I'm assuming I need to run the makefile but I can't get it to complete because 3 tests are locally failing out of the box for me. Any chance you could try to help me debug? If so Is this thread the best space for that?

You don't need to run the Makefile to get set up.
@edwmurph let's continue that discussion (including which tests are failing) on #1339

Oh perfect thanks for pointing that out. I'm guessing my questions will be answered in that thread but I'll message you in there if I'm still stuck.

Cannot wait for this feature!

@ljharb Is the continuous-integration check flaky by any chance? I'm specifically asking about my previous two commits. Are the errors reported in the failed build accurate?
My last commit only removed some comments and the build is indicating that that commit broke the installation_node test suite.
If I just keep retrying will they eventually pass?

Occasionally it can be, due to network conditions - particularly the io.js ones. I've reran the errored builds.

@ljharb Is there a way I can manually trigger a rebuild? Also What do you think about the PR in it's current state? It basically extends the same functionality of .nvmrc to package.json files. If this idea were to ever be incorporated into nvm, this might be a good slice to stop at for now.

@edwmurph unfortunately no, travis-ci doesn't give you that ability. I can do it, or you can force push to trigger a whole new build.
I'll give the whole PR a review now if you're ready :-)

@ljharb

parsing the semver range (there's an entire node lib, semver, to handle this - replicating all of the relevant logic in posix is not likely to be easy)

I have some ideas on how to make this implementation simpler. Specifically, the range evaluation can be built off some existing nvm functionality (e.g. nvm_version_greater etc.) and maybe it can just extend the functionality in nvm_remote_version (this would in turn extend the functionality of the .nvmrc)? Regardless this would still be a lot of work so if there's a way this implementation could be delivered in iterations, it would make this feature a lot more approachable.
My new proposal is for this PR to only copy the functionality that exists for interpreting the node version from .nvmrc (only support a  node version as defined by the nvm --help output and unsupported versions would be handled the same as .nvmrc handles them today). Then the next iteration can tackle the rest of the semver parser evaluation.

Since existing "engines" fields already most commonly contain a full semver range, I don't think an MVP for this feature can support any less than that :-/

Any updates here?

@jhenaoz I finished the implementation for interpreting basic semver's from the package.json.
Also I'm currently still working on the logic for interpreting complex semver expressions. My idea for this is the following algorithm:
step 1: convert complex input semver range into the following grammar

semver         ::= comparator_set ( ' || '  comparator_set )*
comparator_set ::= comparator ( ' ' comparator )*
comparator     ::= ( '<' | '<=' | '>' | '>=' | '' ) version_part '.' version_part '.' version_part
version_part   ::= ['0'-'9']+ | 'x'

e.g. ~1.2.3 || ^1.4.0 -> >=1.2.3 <1.3.0 || >=1.4.0 <2.0.0

step 2: resolve each comparator set (e.g. comparator_set1 || comparator_set2) to the newest possible compatible node version

The naive way to implement this would be to iterate (from newest to oldest) through the list of existing node versions, and find the first one that satisfies all comparators. Version range comparisons could leverage existing nvm functions. Also there is an existing way in nvm to retrieve all current node versions but that list doesn't appear to be cached so I may or may not need to implement caching logic.

step 3: choose the highest node version among the resolved comparator sets .

this should be pretty straightforward.

Current status:
I'm nearly finished with step 1 and have partial implementations for step 2 and step 3. Then after this main logic is implemented, I'll need to develop a strategy for extensively testing all of this. Also while reading/interpreting semver expressions in nvm's environment is definitely possible, it's still unclear to me whether the final implementation of this PR will end up being too large to be included in nvm.

@ljharb I completed the first step of this implementation of extracting the engines.node value from the local package.json file and finished extensively testing this logic. Could you review nvm_get_node_from_pkg_json() and "test/fast/Unit Tests/nvm_get_node_from_pkg_json"?
I also got the rest of the implementation working but am still refactoring/optimizing/testing it so those other areas are not worth your full review at this point.
Also I added a temporary file called "semver.md" that documents the overall design of the implementation.

(Sorry for the delay; I will hopefully be able to review soon)

Hello all. Question: Is this feature still in the works? I was about to hand-role my own system to create a single-source-of-truth for the node version, but if this is going to be released in the near future, I would hold-off on doing so. Thanks for your hard work!

@paulswebapps The current implementation in this PR works but there is still some optimizing and testing left to do. Now that we have a proof of concept, I'm just waiting to do the remaining work until I get some review from @ljharb to help figure out whether the current approach has the potential to be a feature of nvm.

@edwmurph Thanks for the update 👍

@edwmurph @ljharb Sorry for arriving late to the party here, but has this effort stalled or is there another implementation somewhere else?

@markmhx  What's there is not polished code yet, but it does prove that the algorithm works so I was hoping to get some high-level feedback on the changes in nvm.sh before I continued with the implementation. However, I think the biggest fear people have with this functionality is that it requires a lot of code to support a small use case. So I guess one path forward would be for me to work on simplifying/optimizing it in the coming month and maybe it'll get a little more traction.

Just a simple remark, maybe we can use something easier to parse like a custom nvm field in package.json:
{
  "nvm" : {
     "use" : "8.10.0"
   }
}

we can even use aliases
{
  "nvm" : {
     "use" : "lts"
   }
}

@edwmurph many popular tools like babel, eslint, jest, etc. allows the configuration to be embeded in package.json.. That allows a simpler repository structure without a lot of hidden/rc files (.editorconfig, .nvmrc, .npmrc, .gitignore, .mailmap, etc..) 🤷♂
PS: I personally prefer the config to be explicit instead of parsing semver and ending with an approximate node version

@yvele I appreciate the feedback and could go either way on a custom field in the package.json vs. just using the engines.node field.
As for your P.S., I agree with you and also previously proposed something similar. Specifically I think that this PR should just focus on interpreting node versions in the format defined in nvm --help output. E.g.:
Note: <version> refers to any version-like string nvm understands. This includes:
  - full or partial version numbers, starting with an optional "v" (0.10, v0.1.2, v1)
  - default (built-in) aliases: node, stable, unstable, iojs, system
  - custom aliases you define with `nvm alias foo`

But @ljharb indicated earlier in this thread that this feature couldn't support anything less than full semver range interpretation. That being said, I'm not sure if his opinion has changed or not because that was said almost a year ago.

Ok so .npmrc within package.json should have it's own issue. Sorry for the digression 😉

Somehow I messed up the git history for my branch and it was causing problems merging in changes from upstream so I had to squash merge all my changes up to this point.

@ljharb At this point I believe I've simplified/optimized this to the best of my ability and am looking for feedback on the approach before I write the rest of the tests.

@edwmurph thanks, i'll take another pass

@ljharb Thank you for your previous review. At this point I have addressed all your comments. I also finished writing the rest of the tests and now believe the implementation has extensive test coverage. So when you have time, I would appreciate another round of review.
Currently, this feature requires the addition of 536 lines to nvm.sh which is ~14.6% (536/3651=.146..) increase.
Also I understand that this work is exploratory in that it's unclear if this feature is too large to be included in nvm with the current architecture. However, I would really like to understand the particular bottlenecks to see if they can be overcome.

Any chance this can be approved/merged soon?

@danawoodman right now it looks like this PR is currently stalled on the problem of it being prohibitively complex. It does have extensive test coverage which provides some solid assurances. But admittedly debugging any issues that arise would not be easy for someone unfamiliar with the implementation.
So while this implementation does work for all the test cases I could think of, for this to be merged it would probably need to be further simplified to the point where it's easier to understand/debug. How much more simplification can take place is a question I'm not sure about but I would welcome anyone with more POSIX experience than me to open a PR against the fork I've been working out of to move this along.

I’d recommend anyone cheering for this feature request to look into using nix for managing their dev environments. Combine it with direnv and never look back at language specific version managers.

@edwmurph wondering if you are still planning to rewrite the implementation?
Apparently you're the only one who took the effort to solve this (imho) shortcoming in nvm.
Would be a shame to let your earlier work go to waste!

@distinctgrey i can definitely give this another shot but i need an nvm maintainer to provide some buy in and direction to avoid wasting time


Disabled input-group still opens the calendar

Hello!
Sometimes the date input is disabled so the user can't type on it, or open the calendar popup to select a date.
But there is a problem when using input-group with a disabled input, because the "data-toggle" or "data-open" will still open the calendar popup, even if the "data-input" has a "disabled" attribute.
Would be possible to not open the calendar popup through data-toggle or data-open, if the data-input has a disabled attribute?
I tried intercepting the click event on the data-toggle element, and calling preventDefault(), but it did not work, because flatpickr toggle event was fired first. I also tried removing the "data-toggle" attribute after the input was disabled, but even after that the calendar was still being called.
Best regards,
Rafael Pacheco.

Thank you for the report.
Disabled inputs shouldn't have calendars.
Fix coming in the next release, soon.

Fixed in latest release


LICENSE file

Hi, would you mind adding the MIT LICENSE.md file to the repo please (as in https://github.com/mswjs/msw/blob/main/LICENSE.md)?
Thanks very much.

Hey, @domarmstrong. Thanks for raising this.
Done in https://github.com/mswjs/cookies/commit/a28d293a4d47a63e86e79573d842816a32bba7d2.


font lists / font perf

posting so I have a record somewhere
currently
WINDOWS - isPlatformFont (single pass vs MS Shell Dlg \32 )
   all  219 (was 251)
   rfp   82 (was 115) (kBaseFonts - size collisions of expected)
    tb   83 (was 159) (whitelist - size collisions of expected)

todo:

[x] keep trimming size collisions of expected fonts: e.g. "Cordia New", "CordiaUPC"

but make sure we keep at least one font from each of 8, 8.1, 10, 11

[x] expand tb with bundled unique sizes
[x] update with new win11 fonts - see this

MAC - isPlatformFont (single pass vs -apple-system)
   all  438 (this is too large)
   rfp  213 (kBaseFonts)
    tb   26 (whitelist - bundled (expected))

todo:

[ ] expand tb with bundled unique sizes
[ ] remove expected fonts with size collisions
[ ] update with fonts from last two (or is it three?) macOS releases

including optional fonts (which makes the list excessively big)
did we add san francisco?
should we add symbol

[ ] check if on mac when you add a "font", it adds all of them

e.g. if you add  "Gill Sans", does it auto add "Gill Sans Light","Gill Sans SemiBold","Gill Sans UltraBold"

LINUX
   all  467
    tb   60 (was all 134 bundled)

currently checks against 3 basefonts (but skips subsequent basefonts if already detected).  It needs a clean out. I wonder if we could try and detect a known common font from a select list (not noto, we want as unique a size as possible) and use the first found of those so we can do a single pass
todo:

[x] tb: just one of each size
[x] tb: add isPlatformFont, e.g. Arimo (something unique) since we are restricted to an always expected 134 fonts all fonts listed are expected so will be found on the first basefont anyway = same as a single pass not quite true, most fonts will be found on the first pass, and if I know Noto fonts from android, it takes all three basefonts to get everything

this does not work, but it's OK, see https://github.com/arkenfox/TZP/commit/8ac97bf04f46001c4be22573aa1cf0f6ed5c83b7

[ ] all: this is way too big: do some tests, remove shit old unlikely fonts, remove some size collisions if super common

ANDROID
   all  140

currently checks against 3 basefonts (but skips subsequent basefonts if already detected). It's not so bad at 140 fonts: e.g. my android finds 105 total: 100 or so on the first baseFont.

I'm seeing these as font families here. Matches my machine too.
 They are each Google Fonts.
https://support.apple.com/en-us/HT212587
K2D
Fahkwang
Charmonman
Chakra Petch
Bai Jamjuree
Sarabun
Srisakdi
Kodchasan
KoHo

hmmm, that's weird .. doesn't seem to match other font naming conventions. Regular, you drop the regular part. Bold, Bold Italic and Italic are faces.
If I run this in Chrome, I get the above returned as font families
console.log(await queryLocalFonts().then(fonts => [...new Set(fonts.map(font => font.family))].join('\n')))

Powershell also returns Segoe UI Variable Display as a family (no Segoe UI Variable family)
[System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
(New-Object System.Drawing.Text.InstalledFontCollection).Families

Font folder

FF Nightly

Chrome only works with "...Display" added

Powershell also returns Segoe UI Variable Display as a family (no Segoe UI Variable family)
Chrome only works with "...Display" added

right, there is no such font as Segoe UI Variable or Segoe UI Variable Regular. That's the way I see it. In actual fact, to be sure of the font name, you open the font in windows and read the title/name: e.g.

https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41307

wow, so nothing was detected from all of these ... yikes, WTF is going on

Yeah, it seems these are not available apart from CSS Font Loading API.

Not even Segoe Fluent Icons ? The whole lot looks caputsky. I wonder if mozilla hasn't gotten around to adding them somewhere
I was planning on using the CSS Font Loading API to get win versions - I think you said it was super fast

that's some sweet perf on that mini vid bro. 90ms (with the console open, on nightly which is slower). I'm around 135 nightly and 125 stable - it's approx 50/50 between glyphs/textmetrics + fonts sizes - and that's on a 12yr old machine

sweet perf

Nice, I missed that. It's a custom tower. I think the fastest I can get on TZP is 178ms and 68ms on fonts. Actually, I mostly develop on this $100 Chromebook I got on eBay. It's stuck on Chrome 84, but I can test latest FF Android on it. I just remotely connect to more performant machines when I need to.

Segoe Fluent Icons

Yep, missing.  Same in Chrome.

CSS Font Loading API

It's fast, doesn't touch the DOM, and runs asynchronous.
function getLocalFontFamily(font) {
    return new FontFace(font, `local("${font}")`)
        .load()
        .then((font) => font.family)
        .catch(() => null)
}

function loadFonts(fontList) {
    return Promise.all(fontList.map(getLocalFontFamily))
        .then(list => list.filter(font => font !== null))
}

loadFonts(['Segoe Fluent Icons']).then(fonts => console.log(fonts))

It's fast

Great that it doesn't touch the DOM etc .. but this is not fast. I piped the default windows list of 219 fonts thru it and it took approx 200ms - but sure, on a few select fonts for extra entropy this can come in handy. By comparison, the getDimensions and touching the DOM takes approx 60ms, including an additional 10 base fonts and number crunching everything into pretty objects for FP storage

It should speed up the overall script if run in a Promise.all execution.
 Promise.all([
   doSomeDomWork() // blocks other dom work or non-async operations (200ms)
   getFontFace() // runs in the event loop while doSomeDomWork() is running (200ms)
   getDomFonts() // waits for doSomeNonAsyncTask() to finish (50ms)
 ])

 // Overall time to complete ~250ms

a lot has changed in 2 years

I sped fonts up recently by using objects rather than sets, each detected result was already unique as it included the font name (and base style if required)
on a refresh, I got the collection of base sizes and font detection + sizes down from ~23ms to ~15ms .. for testing 201 fonts - not sure I can do much more
unique sizes is interesting and I worked out how to increase it by mixing scripts
unique sizes is not that important, and I reduced the fntString used to also speed up perf but return max unique sizes in almost all cases (OS and TB/FF)
not going to reduce font lists to save perf, it's not worth it

for TB we can't as we need to ensure no fonts are missing
for FF: mac is speedy as they have top hardware so 400+ fonts is fine. And windows we can't drop much if we want to cover FPP and unexpected fonts for FPP
FF linux and android are a work in progress

mac fonts are up to date as per Sequoia
windows fonts have been up to date as of win 11 for ages
android fonts got an overhaul from some moz telemetry data
linux is a work in progress

might try and work FPP into it, but it's problematic
the easiest solution I think is to load up 50 VMs or something (https://www.osboxes.org/vmware-images/) and check the font lists and add some from each that are unique, as well as some common popular ones .. getting there

anyway .. closing ... thanks for listening :)


[bundle-size] Fetch APPROVERS.json file from ampproject/amphtml and process bundle-size deltas with it

Related to #617
Does the pre-processing, but doesn't actually do anything with it yet.
Tag-along changes:

Better error messages in the log (app.log(error) gives a stack trace, app.log(`${error}`) does not)
More log statements
Fix a type in README.md

Are all these PR check errors expected? https://travis-ci.org/ampproject/amp-github-apps/builds/615770892#L353

Are all these PR check errors expected? https://travis-ci.org/ampproject/amp-github-apps/builds/615770892#L353

Yes - these are errors from the Probot logs, the tests are testing that those errors are handled gracefully

Can you silence that logging during tests?

I could, but I like them there

I could, but I like them there

Would it make sense to at least set LOG_LEVEL=warn?

Those debugging statements are super helpful when tests fail, or worse - when tests pass when they should fail...

But couldn't you just have a different default locally vs Travis? It's helpful when debugging but not so much when just trying to check where a test failed on Travis

It helps on Travis too. I definitely used it multiple times, or inspected the logs and saw unexpected debugging output

Are all these PR check errors expected? travis-ci.org/ampproject/amp-github-apps/builds/615770892#L353

Yes - these are errors from the Probot logs, the tests are testing that those errors are handled gracefully

In that case, can we silence all logs on Travis in the passing case while printing error messages when tests fail? It will make Travis PR logs much easier to read, and scale well as more tests are added.

Can we punt this?

Can we punt this?

Can you file a tracking issue plz? :smiley:


Fix broken travis build

Somehow ubuntu on the travis server does not have
/usr/lib/python2.7/dist-packages in the path and thus the xcbgen module
cannot be found. Adding it to the PYTHONPATH fixes this

nice


onload autoscroll to iframe unexpected behavior

I have 2 iframes within a wordpress page, each iframe targeted by iframe-resizer.
When my page loads, after few seconds, it scrolls automatically to one of the iframe

Actually, it is about the iframe url having an anchor, not an iframe-resizer issue...

Actually, it is about the iframe url having an anchor, not an iframe-resizer issue...


Add synchronous workflow execution

Added: https://github.com/conductor-sdk/conductor-python/blob/main/tests/integration/workflow/test_workflow_execution.py#L95


Incorrect offset for the vanilla example

Describe the bug
A number of entity component pages have incorrect offsets when referencing a part of vanilla file.
Affected pages:

https://docs.microsoft.com/en-us/minecraft/creator/reference/content/entityreference/examples/entitycomponents/minecraftcomponent_annotation_break_door
https://docs.microsoft.com/en-us/minecraft/creator/reference/content/entityreference/examples/entitycomponents/minecraftcomponent_annotation_open_door
https://docs.microsoft.com/en-us/minecraft/creator/reference/content/entityreference/examples/entitycomponents/minecraftcomponent_breathable
https://docs.microsoft.com/en-us/minecraft/creator/reference/content/entityreference/examples/entitycomponents/minecraftcomponent_burns_in_daylight
https://docs.microsoft.com/en-us/minecraft/creator/reference/content/entityreference/examples/entitygoals/minecraftbehavior_follow_target_captain

To Reproduce
Steps to reproduce the behavior:

Go to the URL
Look at the vanilla example
See error

Expected behavior
Vanilla example should properly show a full example of vanilla component.

Corrections are made. Staged for review.


[Feature] Support Different authentication methods for External Prometheus

Is your feature request related to a problem? Please describe.
m trying to follow Cloud Service Integration. The integration works seamlessly to connect to external Grafana but how can i use external prometheus service with other auth mechanisms other than tokens. For Example Managed Service for Prometheus uses SigV4 auth vs Access tokens.
Describe the solution you'd like
Support to use external prometheus service with other auth mechanisms other than tokens. For Example Managed Service for Prometheus uses SigV4 auth vs Access tokens.
Describe alternatives you've considered
None
Additional context
None

which metric do you want to collect? kubevela's pod or your applications' pod?


Mervat: behavior, strategy and implementation week 1

Analyzing Functions:

You can analyze a function written at or near your level. This includes:
[ ] Behavior: How would you document the function, what test cases does it pass, and how might you use it in a program
[ ] Strategy: Roughly, how could you translate this solution to pseudo-code.
[ ] Implementation: What language features were used, and what are some alternate language features that could be used
Testing Existing Functions:
[ ] You can write unit tests for a working function using the describe/it/expect().to Equal() syntax. This includes grouping test cases into logical test suites.
Function Design:
[ ] You can explain the function-design process and can successfully apply it to write 2+ solutions matching the behavior of a given function (assuming the behavior is at your level). The solutions do not need to implement different strategies, consider edge cases, or check for invalid arguments.
Generating Documentation:
[ ] You can write a correct JSDoc for your functions and use a provided script to generate markdown documentation in a separate file.
Declarative Programming:
[ ] You can explain how Declarative Programming is different from Imperative programming
[ ] Tell which paradigm is used in a program.
[ ] Use built-in JS methods to write Declarative solutions to simple coding challenges.
Array Strategies:
[ ] You can determine which of the primary array strategies (map, filter, reduce, every, some) are helpful for a specific problem at your level.
Higher-Order Functions in Array Methods:
[ ] You can explain how a higher order function works, and write a callback for use in the primary array methods (for a problem at your level).
Prototype Delegation:
[ ] You can inspect a JS value in the browser's debugger/console
[ ] Explain how to find which methods are available for that value.
Nested Data:
[ ] Given a nested data structure containing arrays, objects and primitive values, you can 1) access a given value 2) update a given entry 3) filter the data
Test-Driven Development:
[ ] You can write basic unit tests for a problem you understand without having a solution to validate your tests.
[ ] Use your tests as a guide to develop a solution. You do not need to consider edge cases or invalid arguments.
Fuzz Testing:
[ ] You can interpret random test cases for a challenge to guide your development of a solution.
Testing Side-Effects:
You can write a suite of unit tests to ensure that:
[ ]  function does not modify it's reference-type arguments
[ ] The function returns a new array/object.
ECMAScript Modules:
[ ] You can use export const functionName = () => {}; and import { functionName } from './file-name.js' syntax to separate unit tests from the function definition.
Continuous Integration:
[ ] You can check CI scripts locally to ensure your code will pass CI checks when it is pushed
[ ] Read CI results when conducting a code review.
Code Review:
[ ] You can use a provided checklist and passing/failing CI checks to review a classmate's function (given the solution is at your level). Code Coverage:
[ ] You can explain what code coverage is, why it's important
[ ] Write unit tests for a code challenge with 100% coverage.
Testing Edge Cases:
[ ] You can identify and write unit tests for tricky edge cases.
Writing Guards:
[ ] You can write guards for your function parameters that enforce the function's documented parameter types.
[ ] Testing Guards:
[ ] You can use expect(() => ).toThrow() to unit-test your guards' error type and message.

Week 1

[ ] I have pushed my progress to my fork of exercises repo

Check-In
I Need Help With:
What went well?
doing some exercises and examples
joining a study group and study together.
What went less well?
Need more time to catch up with all the information.
Lessons Learned
Study groups really help and motivate.
Sunday Prep Work

What went less well?
Need more time to catch up with all the information.

We understand. And you are doing very well managing your time. keep it up!


iPad- The tooltip is not disappearing after the vertical scroll moves

Feature request type
Enhance component
Component name
No response
Is your feature request related to a problem?
On touch devices, the tooltip does not disappear.

Describe the solution you'd like
Please provide
Have you seen this feature anywhere else?
No response
Describe alternatives you've considered
No response
Pull Request

[ ] I would like to do a Pull Request

Code of Conduct

[X] I agree to follow this project's Code of Conduct

Duplicate of #8794 or #3073


Cannot build examples on the rPi

When trying to build the rgb keyboard examples (or any of them) I get the following error
CMake Error at CMakeLists.txt:10 (pico_add_extra_outputs):
Unknown CMake command "pico_add_extra_outputs".
Steps to replicate

Prove I can build the pico samples using the instructions on Pi
Build the pimoroni pico library successfully
browse to the pimoroni-pico/examples/pico_rgb_keypad and make a directory called build
in the build directory running cmake ..

Full output
`pi@rPi4:~/pico/pimoroni-pico/examples/pico_rgb_keypad/build $ pwd
/home/pi/pico/pimoroni-pico/examples/pico_rgb_keypad/build
pi@rPi4:~/pico/pimoroni-pico/examples/pico_rgb_keypad/build $ cmake ..
CMake Error at CMakeLists.txt:10 (pico_add_extra_outputs):
Unknown CMake command "pico_add_extra_outputs".
CMake Warning (dev) in CMakeLists.txt:
No cmake_minimum_required command is present.  A line of code such as
cmake_minimum_required(VERSION 3.13)

should be added at the top of the file.  The version specified may be lower
if you wish to support older CMake versions for this project.  For more
information run "cmake --help-policy CMP0000".
This warning is for project developers.  Use -Wno-dev to suppress it.
-- Configuring incomplete, errors occurred!
See also "/home/pi/pico/pimoroni-pico/examples/pico_rgb_keypad/build/CMakeFiles/CMakeOutput.log".
pi@rPi4:~/pico/pimoroni-pico/examples/pico_rgb_keypad/build $`

OK - I missed the instructions for the build at the root - all good :-)
That's an evening of my life I'm not getting back


Make intro a bit friendlier

I really want to add the quote from We Can Do Better Than SQL as IMO it explains EdgeDB best in the fewest number of words - would have been great to see front and centre in September when first learning about EdgeDB. I added it as text but ideally it would be cool to replace the horn image with an image containing the quote (maybe a link to the blog post too when clicked):
https://www.edgedb.com/blog/we-can-do-better-than-sql/

This is for the https://edgedb-staging.vercel.app/docs/datamodel/index page

This is for the https://edgedb-staging.vercel.app/docs/datamodel/index page

but ideally it would be cool to replace the horn image with an image containing the quote (maybe a link to the blog post too when clicked):

Sadly it's not possible to replace the illustration at this stage -- our UI design and doc illustrations are optimized for each other. But we can link the blog post(s), for sure.

but ideally it would be cool to replace the horn image with an image containing the quote (maybe a link to the blog post too when clicked):

Sadly it's not possible to replace the illustration at this stage -- our UI design and doc illustrations are optimized for each other. But we can link the blog post(s), for sure.

@Dhghomon Merging this in https://github.com/edgedb/edgedb/pull/2273 -- I had to update our doc linter to understand pull quotes. Thanks for working on this Dave!


gerrit-272990-7

Why?

why what?

Why you run this? remarks are not resolved.
06.09.2017. 14.05, "Tomasz Magulski"<EMAIL_ADDRESS>је
написао/ла:

why what?
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/magul/pywikibot-core/pull/1418#issuecomment-327462664,
or mute the thread
https://github.com/notifications/unsubscribe-auth/Abnx5wAXunynK3bePaYKAs-uwqKnv0mVks5sfoqRgaJpZM4POEHk
.

Because for some reason wikimedia/pywikibot-core runs these suits on
Travis and AppVeyor and from my perspective there are only two possible
solutions:

solve Travis and AppVeyor issues (see:
https://phabricator.wikimedia.org/T151145)

remove Travis and AppVeyor from wikimedia/pywikibot-core repository
alltogether.

Because we (as pywkibot team) don't have simple solution to test patches
from gerrit on Travis and AppVeyor, I made simple bot to do so.
On 06.09.2017 14:07, zoranzoki21 wrote:

Why you run this? remarks are not resolved.
06.09.2017. 14.05, "Tomasz Magulski"<EMAIL_ADDRESS>је
написао/ла:

why what?
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub

https://github.com/magul/pywikibot-core/pull/1418#issuecomment-327462664,

or mute the thread

https://github.com/notifications/unsubscribe-auth/Abnx5wAXunynK3bePaYKAs-uwqKnv0mVks5sfoqRgaJpZM4POEHk

.

—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/magul/pywikibot-core/pull/1418#issuecomment-327463087,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ABHHUh3YGPu5DNdiQ-kRnUJoyPhbRI_Hks5sfosGgaJpZM4POEHk.

Ok


Publish new version

@astrism, could you publish a new version? I've added two things that my project is dependent on. See what they are in the Changelog. One is a breaking change, though it's not seriously breaking. But if we're going to be strict semver (I vote yes) then this will be angular-formly 2.0. I'll leave that up to you. Thanks!

+1

Done :-)


Error message not displayed in the output

Testing #8357
The error was not shown in the cell's output when using an untitled notebook:

It was shown after I saved the notebook and ran it again.

I was using the Python 3 dev container (using the Python 3 definition in Remote-Containers). I cannot reproduce it anymore.

Let's close this for now.


Implement edit features in user group settings overlay.

Added features for user group name/description and member ship edit on right panel of #groups overlay.  Tried to replicate the behavior of members table and member add remove feature similar to stream settings but varies slightly due to difference in behavior of API of user group member add/remove endpoint.
Fixes a part of : #19526

Screenshots and screen captures:

Self-review checklist

[x] Self-reviewed the changes for clarity and maintainability
(variable names, code reuse, readability, etc.).

Communicate decisions, questions, and potential concerns.

[x] Explains differences from previous plans (e.g., issue description).
[x] Highlights technical choices and bugs encountered.
[x] Calls out remaining decisions and concerns.
[] Automated tests verify logic where appropriate.

Individual commits are ready for review (see commit discipline).

[x] Each commit is a coherent idea.
[x] Commit message(s) explain reasoning and motivation for changes.

Completed manual review and testing of the following:

[x] Visual appearance of the changes.
[x] Responsiveness and internationalization.
[x] Strings and tooltips.
[x] End-to-end functionality of buttons, interactions and flows.
[ ] Corner cases, error conditions, and easily imagined bugs.

Looks reasonable; posted a few comments. I assume it's expected that live update isn't implemented yet.

I've updated this PR with a minor change as suggested at https://github.com/zulip/zulip/pull/22833#discussion_r960050928. I haven't yet added live update and was working on few small follow-ups suggested by @sahil839 at #frontend > User groups UI and planned to add live update as follow up for this PR.
Should I add live-update commits to this PR itself?

Thanks for the explanation, merged, thanks @m-e-l-u-h-a-n!
I think we can do live-update in the next one; it's nice to integrate big chunks like this when they're at nice checkpoints so I don't end up spending a bunch of time rereading the same changes :)


Built-in skybox

Objective

Closes https://github.com/bevyengine/bevy/issues/8008

Solution

Add a skybox plugin/node that renders a unit cube at the origin, and then modifies the vertices in a vertex shader to enforce that it renders as a skybox background.
In the future, it would be nice to get something like bevy_atmosphere built-in, and have a default skybox+environment map light.

Changelog

Added Skybox.

I'm happy that this exists! Unsure if this is the right crate for it: I really wish the rendering crate structure was better split up so users could more easily pull in only the things they need for their games.

Part of the value of the current skybox example is to show use of cubemaps with some different compressed texture types. So, I would say, update the current skybox example to use this plugin.

A fullscreen triangle is probably possible, but I couldn't figure out the math myself. This seems simpler, and works. Someone else could try and get the triangle working if they want.

@robtfm is the environment map sampling now correct?

@robtfm is the environment map sampling now correct?

I checked, it is now correct! :)


TuMangaOnline not loading chapters

Source information
TuMangaOnline 1.4.50
Source language
Spanish
Steps to reproduce

select some of the new mangas or nsfw content
chapter list works well but chapter does not load
in vwebview page redirects you to google.
it is not getting the good address after selected.
https://visortmo.com/library/manhwa/78067/cazador-de-milfs-de-otro-mundo does not work
https://visortmo.com/library/manhwa/217/solo-leveling does work well.
there are differences on the network tracing

Expected behavior
Images should load at least in webview but apparently it is not capturing the good link
Actual behavior
images do not load after a long loop
Mihon/Tachiyomi version
0.16.1
Android version
Android 14
Other details
No response
Acknowledgements

[X] I have searched the existing issues and this is a new ticket, NOT a duplicate or related to another open or closed issue.
[X] I have written a short but informative title.
[X] I have updated the app to version 0.15.3.
[X] I have updated all installed extensions.
[X] I have tried the troubleshooting guide.
[ ] I have admitted that I am a clown by having checked this box, as I have not read these acknowledgements.
[X] If this is an issue with the app itself, I should be opening an issue in the app repository.
[X] I will fill out all of the requested information in this form.

Check and update your extension to the latest version before making reports please. The latest version is 1.4.51.

i did try on 1.4.51. still not working.
in webview the error is.
The webpage at https://animationdraw.com/ could not be loaded because:
net::ERR_CACHE_MISS

I had that same problem, I just changed the User Agent in the Mihon settings and it worked for me

it just goes into an infinite loop and goes back to main page.
I did also tried all user agents listed on the troubleshoot guide without success


Use string as routing url

By default, version 2.0.0 no longer allows direct use of String to perform routing.
However, we can achieve this by making RouterTable follow the ExpressibleByStringLiteral protocol and adding some default implementations when the follower is a string enumeration:
public protocol RouterTable: ExpressibleByStringLiteral { ... }

public extension RouterTable where Self: RawRepresentable, Self.RawValue == String {

    init(stringLiteral value: String) {
        self.init(rawValue: value)!
    }
}

But it has some shortcomings:

When the passed value cannot match any case, the program will crash (the consequence of using !). And we cannot give the caller a clearer error to handle this problem.

At the same time, it has certain limitations:

Cannot pass parameters through string variables, only use string literals directly. Refer to the following code:

let routerURL = "RaRouter://Test/some"

Router<Global>.do(routerURL) // ❌ Error because `String` is not of `Module.Table`

Router<Global>.do("RaRouter://Test/some") // ✅ Success, because `RouterTable` follows `ExpressibleByStringLiteral`, `string literals` can be converted to `Model.Table`

The above two concerns are the reason why we did not make RouterTable follow ExpressibleByStringLiteral in 2.0.0-beta.1 version.
In actual use, we mostly perform routing through string variables, and almost never directly use string literals to perform routing. This leads to the above function is redundant.
We are still evaluating whether it is necessary to add this feature. Please tell us in your reply whether you need this feature, thanks.

In version 2.1.0, we adjusted the parameters of the method used to perform routing.
The parameter type is adjusted from <Table: RouterTable> generic type to RouterTable protocol.
This change allows callers to directly use string variables to perform routing.


[BUG] Brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 1)

Information

Apktool Version (apktool -version) - 2.7.1 snapshots
Operating System (Mac, Linux, Windows) - Windows
APK From? (Playstore, ROM, Other) - other

Stacktrace/Logcat
Compiling APK file... (Press ESC to cancel)
Command: java.exe -jar "C:\Users\Desktop\APKEASYTOOL\Apktool\apktool-2.7.1-7a15c7-SNAPSHOT-small.jar" b -f --use-aapt2 -o "C:\Users\Desktop\APKEASYTOOL\2-Recompiled APKs\Mobile Legends_<IP_ADDRESS>62_apkcombo.apk" "C:\Users\Desktop\New folder (2)\Mobile Legends_<IP_ADDRESS>62_apkcombo.com"

I: Using Apktool 2.7.1-7a15c7-SNAPSHOT
I: Smaling smali folder into classes.dex...
I: Smaling smali_classes2 folder into classes2.dex...
I: Smaling smali_classes3 folder into classes3.dex...
I: Building resources...
W: C:\Users\Desktop\New folder (2)\Mobile Legends_<IP_ADDRESS>62_apkcombo.com\AndroidManifest.xml:318: error: '@1963524123' is incompatible with attribute theme (attr) reference.
W: C:\Users\Desktop\New folder (2)\Mobile Legends_<IP_ADDRESS>62_apkcombo.com\AndroidManifest.xml:319: error: '@1963524105' is incompatible with attribute theme (attr) reference.
W: C:\Users\Desktop\New folder (2)\Mobile Legends_<IP_ADDRESS>62_apkcombo.com\AndroidManifest.xml:320: error: '@1963524106' is incompatible with attribute theme (attr) reference.
W: C:\Users\Desktop\New folder (2)\Mobile Legends_<IP_ADDRESS>62_apkcombo.com\AndroidManifest.xml:321: error: '@1963524106' is incompatible with attribute theme (attr) reference.
W: C:\Users\Desktop\New folder (2)\Mobile Legends_<IP_ADDRESS>62_apkcombo.com\AndroidManifest.xml:324: error: '@1963524121' is incompatible with attribute theme (attr) reference.
W: C:\Users\Desktop\New folder (2)\Mobile Legends_<IP_ADDRESS>62_apkcombo.com\AndroidManifest.xml:325: error: '@1963524121' is incompatible with attribute theme (attr) reference.
W: C:\Users\Desktop\New folder (2)\Mobile Legends_<IP_ADDRESS>62_apkcombo.com\AndroidManifest.xml:326: error: '@1963524121' is incompatible with attribute theme (attr) reference.
W: C:\Users\Desktop\New folder (2)\Mobile Legends_<IP_ADDRESS>62_apkcombo.com\AndroidManifest.xml:327: error: '@1963524121' is incompatible with attribute theme (attr) reference.
W: error: failed processing manifest.
brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 1): [C:\Users\ZON~1\AppData\Local\Temp\brut_util_Jar_56748126938330069724491926415446654028.tmp, link, -o, C:\Users\ZON~1\AppData\Local\Temp\APKTOOL16340924013034490676.tmp, --package-id, 127, --min-sdk-version, 17, --target-sdk-version, 31, --version-code, 17598262, --version-name, <IP_ADDRESS>62, --no-auto-version, --no-version-vectors, --no-version-transitions, --no-resource-deduping, --allow-reserved-package-id, -e, C:\Users\ZON~1\AppData\Local\Temp\APKTOOL1317251957468066490.tmp, -0, arsc, -I, C:\Users\AppData\Local\apktool\framework\1.apk, --manifest, C:\Users\Desktop\New folder (2)\Mobile Legends_<IP_ADDRESS>62_apkcombo.com\AndroidManifest.xml, C:\Users\Desktop\New folder (2)\Mobile Legends_<IP_ADDRESS>62_apkcombo.com\build\resources.zip]
Compile failed. Please read the log

Steps to Reproduce

apktool d
apktool b

Frameworks
N/A
APK
If [this APK can be freely shared, please upload/attach a link to it.] https://apkcombo.com/downloader/#package=com.mobile.legends
Questions to ask before submission

Have you tried apktool d, apktool b without changing anything? YES
Are you using the latest apktool version? YES

any answer from the developer of apktool ? @iBotPeaches

@jokerart06 Hello,I had the same problem. Have you solved it now?

I took a look. It appears that we have some resources that we cannot find the framework package from and thus result to the undecoded value (casted to numeric) and that becomes the numeric invalid values you see.
Seems we have a few packages packed in.
➜  3025 aapt d --values resources 3025.apk | grep 'Package'
Package Groups (3)
Package Group 0 id=0x76 packageCount=1 name=com.mobile.legends.Gumiho
  Package 0 id=0x76 name=com.mobile.legends.Gumiho
Package Group 1 id=0x79 packageCount=1 name=com.mobile.legends.Danmaku
  Package 0 id=0x79 name=com.mobile.legends.Danmaku
Package Group 2 id=0x7f packageCount=1 name=com.mobile.legends
  Package 0 id=0x7f name=com.mobile.legends
      spec resource 0x7f0301b9 com.mobile.legends:attr/fontProviderPackage: flags=0x00000000
        resource 0x7f0301b9 com.mobile.legends:attr/fontProviderPackage: <bag>
➜  3025

brut.androlib.exceptions.CantFindFrameworkResException: Can't find framework resources for package of id: 118

So now this reminds me of an existing issue - https://github.com/iBotPeaches/Apktool/issues/2514
So closing for that. Sorry for the delay.


command problem

Hello,
When i run the installer everything is good, the installation run normally but then when i type fsociety i don't get nothing. How do i fix that?

Try just running:

"python fsociety.py"


Include Positive Predictive Value in GSD evalution

See title :)

Isn't PPV the same thing as precision?
https://en.wikipedia.org/wiki/Precision_and_recall#Definition

Sorry I am stupid... Was just looking through one of the old papers and compared the list of what we used and what we reimplemented and did not think any further


--from-file not taking, always prompts

I'm trying to load prompts from a file --from-file filename  but not matter what I try, without a --prompt "prompt" parameter, it comes back asking for a prompt.   Looking at the code, I don't think --from-file is ever hit since around line 327 it's specific to looking for the prompt..

Same here.

I would same but using --img as the parameter.


Null safety and support iOS

Thank You @up9cloud
null safety checked & plugin supports IOS platform by help of ffi.


migrated_years variable in the GLD

I want to seek anyone's thoughts about the variable, "migrated_years" in the GLD codebook. Should the response to number of years since last migrated be limited only to people who claimed that they have migrated during the reference period? If that is the case, then all the responses we will get for migrated_years will be equal to migrated_ref_time, which is the "reference time applied to migration questions." The following lines of code are from the do file template:
*<_migrated_ref_time_>
	gen migrated_ref_time = 1
	label var migrated_ref_time "Reference time applied to migration questions"
*</_migrated_ref_time_>

*<_migrated_binary_>
	destring B3_q8, gen(migrated_binary)
	recode migrated_binary (2 = 0)
	label de lblmigrated_binary 0 "No" 1 "Yes"
	label values migrated_binary lblmigrated_binary
	label var migrated_binary "Individual has migrated"
*</_migrated_binary_>

*<_migrated_years_>
	gen migrated_years = .
	destring B31_c16, gen(helper_var)
	replace migrated_years = helper_var if migrated_binary == 1
	label var migrated_years "Years since latest migration"
	drop helper_var
*</_migrated_years_>

I don't think so, because the codebook also says the question can be interpreted as "how long you've lived in your current location." -- and that answer shouldn't be conditional based on if you migrated in the reference period or not, in my opinion. Then, like you say, the question really just turns into asking the reference period twice for some observations, or you have to drop them, or whatever.

Thanks for that information from the codebook, @buscandoaverroes!

@giofsantos11 I see you closed this, but let me give you my two cents, still.
The way I structured this bit was to think of that first migrated_ref_time like the age application variables for the education and labour modules. This is because I had seen some questionnaires that limit migration to, for example, the last five years.
So you may have five years in migrated_ref_time and then migrated_years could be 2 since I migrated to years ago. If I have migrated 7 years ago, migrated_years should be 7, but since it is larger than migrated_ref_time the questions were never asked.
This was to help understand a reader who may see "wait, all people who migrated here are very recent, is there none that migrated 6, 7, 8 years ago?" There migrated_ref_time explains the questionnaire was limited to five years, w/o you having to go back to the questionnaire to understand this. This is why there are two time periods.
On the particular issue you raise, migrated_ref_time  should be answered for all, just like the age module restriction as it should be one and the same number for all (a general questionnaire limit), while migrated_years will vary (and be missing for those that have 0 for migrated_binary.

Sorry that I closed too soon and thanks for still sharing, @gronert-m.
So does this mean that your example of a person who migrated 7 years ago will not keep that information under the migrated_years variable? In India 2005 case, the variable migrated_ref_time is equal to 1 year. If I keep only those who have migrated over the past year (as indicated by migrated_binary), the implication is that all the responses under migrated_years will be equal to either 1 or missing, which does not show any interesting variation.

@giofsantos11 I will preface this by saying that I do not see the system as closed and if there is a way we can define the variables better, I am up for updating the system.
On the particular case of 2005 India I have just checked and I don't see migration questions there (which block is it?)
On the case described of a person who migrated 7 years ago, if the questionnaire were to ask did you migrate in the last year, then that person would say no. If the questionnaire then skips the rest of the migration questions, then migration_ref_time is 1 year as this is limiting the set of people the question is asked to. If the question is just a check box and the migration questions are asked to anyone else, then it is not functioning as a module limiter and thus migration_ref_time is not 1.
Further, if we assume that (for some reason) questionnaire limits the questions to only those who migrated last year, you are right that migration_years does not have a big range (in essence only between 0 and 1). Maybe not very informative, I agree, but that is a product of the questionnaire design, which is beyond what we can do.

My apologies, I was referring to 2007 survey not the 2005 one. My bad!
I should have added other important details here: the survey has two migration variables: B3_q8 (whether the HH migrated to the village during the last 365 days), and B31_c6 (period, in years, since leaving the HH). The latter variable is from a module, Block-3dot1-out-migrants-records, which contains "particulars of the out-migrants, who migrated out any time in the past". The B31_6 variable asks everyone who has migrated even beyond the one year reference period.

Indeed B3_q8 asks whether the household migrated (as a whole) in the past 12 months. But the questions of block 3.1 are about members who migrated out of the household (question B3_12)

That question is not time limited and thus you have those answers that can go back in time.
whether   any   former   member   of   the household  migrated  out  any  time  in  the past (yes  -1, no –2)

Got it. The GLD variable, migrated_binary, as defined in the guidelines, is at the individual level. That means, I am not supposed to use the 2005 India EUE variable, B3_q8 since it is asked for the household.
My next question now is, should I use information from the B31 module (module on out-migrants) to code the GLD variable, migrated_binary (defined as "whether the individual has ever migrated)? And if so, the value for migrated_ref_time should be equal to 99, correct?

I had not thought about it, but I guess I share your view that migration is defined at the individual level in the guidelines and this is only household so I would not use that information.
Neither would I use the migration out of a household because that is not migration (necessarily) as we think about a household moving but rather certain members (that are not interviewed) left it. That is a different view and one that is (in my view) not common in questionnaires and not one we are interested in. So I would, in the case of 2007, leave all of migration blank.

Thanks @gronert-m!

@giofsantos11 If you are happy with the outcome of the discussion, please close the issue.


The gravity generator sprite is weird.

Description

If you look at it closely, it is 3 prongs around a ring that is kept in place which likely provides gravity for the Station. But... it's asymmetrical. For something intended for "containment", this is an insecure design. Once i noticed this, it bothers me a lot. I would be fine if it was 3 prongs but in triangle formation, or with an extra added prong so it's boxy. You can see the sprite in the image below, and how it currently looks like vs. what it should ideally look like. The sprite seems really hard to make though because it's extremely high quality, so i don't expect this to be done any time soon.
Screenshots

I figure the fourth prong is omitted (or the three prongs are not angled) for a very simple reason: This design works good with 3/4ths and allows you to see the fancy glowy ring, instead of obscuring it. Sprites should look good first, make perfect sense second imo.

agree with moony. the sprite is fine and i don't think something like this is really a reason to be respriting anything


Add 0.5 download page with extraball apt repo info

Signed-off-by: Ryan Beck-Buysse<EMAIL_ADDRESS>

To test:
docker build -t splintercommunity/splinter.dev -f ci/website.dockerfile .
docker run -it --rm -p 80:80  splintercommunity/splinter.dev

Open http://localhost/releases/0.5/download.html


i have one doubt in Angular 2 , i have created 2 components parent and child, in parent am displaying table of data and i am displaying selected data in child component using (onrowselect) property binding but the problem is without using eventbinding whatever the changes i m doing in child component its reflecting in parent how its possible but i dont want that how can overcome this anyone plz help me how to solve this?

gridexample.zip

I think this repo is not right place for your question This repo is specific to the Angular website. You should ask on stackoverflow or gitter instead.

okay sir thank you
On Mon, Nov 6, 2017 at 5:37 PM, Emmanuel DEMEY<EMAIL_ADDRESS>wrote:

I think this repo is not right place for your question This repo is
specific to the Angular website. You should ask on stackoverflow or gitter
instead.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/angular/angular.io/issues/3564#issuecomment-342129744,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AfT4INn3RI3zDTvCZXUiAXEImIhh4cV9ks5szvZkgaJpZM4QS-Bv
.


feat(FX-3188): update popover message to v3 design system

The type of this PR is: Feature

This PR resolves FX-3188
Description
Demo
iOS
https://user-images.githubusercontent.com/3513494/130801522-ff0e8f2e-baaa-4545-9952-93a464e09191.mp4
Android
https://user-images.githubusercontent.com/3513494/130802317-39b3edf2-6d33-4a23-b72b-fece0ca13d9b.mp4

PR Checklist (tick all before merging)

[x] I have included screenshots or videos to illustrate my changes, or I have not changed anything that impacts the UI.
[x] I have tested my changes on iOS and Android.
[x] I have added tests for my changes, or my changes don't require testing, or I have included a link to a separate Jira ticket covering the tests.
[x] I have added a feature flag, or my changes don't require a feature flag. (How do I add one?)
[x] I have documented any follow-up work that this PR will require, or it does not require any.
[x] I have added an app state migration, or my changes do not require one. (What are migrations?)
[x] I have added a changelog entry below or my changes do not require one.

Changelog updates
Changelog updates

Cross-platform user-facing changes

Update Popover Message to V3 design system - dzmitry tratsiak

iOS user-facing changes

Android user-facing changes

Dev changes

if you feel like it, maybe add some stories for storybook for this, basically what you have in the video on top but in storybook.


Closing the selector when clicked outside of the react-reactions component.

Hi,
Thanks for this awesome library.Much appreciated. 🙏🏽
That said, I have a question please - can I hide the Selector if I clicked anywhere else without selecting any emoji?? I have tried following some articles on SO, but it seems none of them are working.
Some guidance here will be very well appreciated.
Thanks...

Hey, that should be possible. I can get an example to you in the next day or so.
Which component are you using and how are you controlling if it is opened or closed?

Awesome. thanks for all the help, kind Sir.
Here is how I am using it at this moment.
  <SlackCounter
    counters={reactions.length === 0 ? reactionList : reactions}
    user={props.userInformation ? props.userInformation.username : "You"}
    onSelect={clickSelectedEmoji}
    onAdd={(e) => setShowReactions(true)}
  />
  {showReactions && (
    <SlackSelector
      active="mine"
      scrollHeight={300}
      removeEmojis={[]}
      frequent={[
        "👍",
        "🐉",
        "🙌",
        "🤦♀",
        "😊",
        "🐬",
        "😹",
        "👻",
        "🚀",
        "🥶",
        "🤡",
        "🇨🇦",
      ]}
      onSelect={(e) => {
        handleSelect(e);
        setShowReactions(false);
      }}
    />
  )}

Please let me know if you need some more information please.
One more request please 🙏🏽
It seems that the SlackSelector is not sitting on top of other cotnrols. I tried to control it via css by setting the z-index, but it apparently wont work. Here is a screenshot please

Notice that the Slack selector has pushed down the card thereby increasing its height. It should have been on top of the underlying card. Also if this was on top , it would not have got cut off on the right hand side. I am not setting the z-index anywhere else.
Please let me know what you think.
Thank you once again for your time and patience.
Warm Regards!!

Hi @gj1118,
I found a stack overflow post that adds an event listener that will respond to user clicks. It is important to note that a <div> surrounds the <SlackSelector> and has a width set. We can attach a ref to that <div>. Checkout this stackblitz.
Does this solve your issue?

It seems that the SlackSelector is not sitting on top of other cotnrols. I tried to control it via css by setting the z-index, but it apparently wont work.

Would you be willing to give me a stackblitz or code sandbox that reproduces the issue? It would be easier for me to help if I can see the exact problem! Thank you! And warm regards.

Thanks Charles,
I will take a look and confirm a bit later please, if that is ok with you.
Thanks a lot for your help.
With Regards
Gagan Janjua
On Mon, Jan 24, 2022 at 12:44 PM Charles Kornoelje @.***>
wrote:

Hi @gj1118 https://github.com/gj1118,
I found a stack overflow post that adds an event listener that will
respond to user clicks. It is important to note that a  surrounds
the  and has a width set. We can attach a ref to that .
Checkout this stackblitz
https://stackblitz.com/edit/react-ts-e7x6mv?file=index.tsx.
Does this solve your issue?
It seems that the SlackSelector is not sitting on top of other cotnrols. I
tried to control it via css by setting the z-index, but it apparently wont
work.
Would you be willing to give me a stackblitz or code sandbox that
reproduces the issue? It would be easier for me to help if I can see the
exact problem! Thank you! And warm regards.
—
Reply to this email directly, view it on GitHub
https://github.com/charkour/react-reactions/issues/121#issuecomment-1020369725,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AADTQDNFGOUFWHEL6ASB2BDUXWFYVANCNFSM5MMLDWRA
.
Triage notifications on the go with GitHub Mobile for iOS
https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675
or Android
https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.
You are receiving this because you were mentioned.Message ID:
@.***>

Thanks, that is okay with me. Thanks for your patience!
With regards

              asd

              as

adsfasdf

Closing this issue. See slackblitz link for solution.