Update example notebook

As we plan to deprecate xeus-cling once we release 1.0.0, I think it makes sense to update our example notebook with most of what xeus-cling's example notebook supports.
I think we have most of what is required except Magics and Xtensor support.

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

Project coverage is 75.08%. Comparing base (c7a3175) to head (c8b7af6).

Additional details and impacted files

@@           Coverage Diff           @@
##             main     #121   +/-   ##
=======================================
  Coverage   75.08%   75.08%
=======================================
  Files          17       17
  Lines         602      602
  Branches       59       59
=======================================
  Hits          452      452
  Misses        150      150

@anutosh491, @mcbarton, @tharun571, is there a way to run these demos as part of the tests? This way we are guaranteed they will work.

@anutosh491, @mcbarton, @tharun571, is there a way to run these demos as part of the tests? This way we are guaranteed they will work.

Some parts of it are already being run as part of the tests in Jupyter Kernel Test, so should be possible. It won't work on Windows until the reason why XCppTests has been determined.

Some parts of it are already being run as part of the tests in Jupyter Kernel Test, so should be possible

Yes I haven't used the jupyter-kernel-test library personally (https://github.com/jupyter/jupyter_kernel_test) but I guess that is used to test out kernels.

In my very naive imagination we can/should have some binary that takes a notebook as parameter and returns some jsons for the results... If we don't have such a thing probably that's easy to implement. I think such a thing is critical to make sure xeus-cpp works consistently over time...

Yeah that makes sense. I have the following thoughts

Let me open an issue to indicate introducing of a testing framework as the one you're talking about (takes a notebook as input and maybe returns some json as result)
That being said we might not want to block this PR as we didn't have most features like the documentation lookup through the inspect request etc when the notebook was added by Sylvain last year. I like the idea of the general audience seeing our updated notebook.
We might want to look at the testing framework not from a xeus-cpp level but from the xeus-stack (including all kernels). Just like the jupyter kernel test can test all kernels, the binary we're talking about might cover all of xeus-stack.

cc @vgvassilev @mcbarton  if you're thoughts match with mine, you can maybe review and merge and I'll address the 1st point then.

Ok, let’s open an issue for this and move forward with the pr.

Raised an issue here #https://github.com/compiler-research/xeus-cpp/issues/122


What is manifest.json?

Hi. I did noted file manifest.json at some samples. What is it? Is there description of these file?

You are right there is no documentation of this file currently. The idea for it is that you can stick it in your template folder and it unlocks some more customization.
There are only 2 options in the file right now:

key
Description of Use

suffixesToIgnoreInInput
If the value is "component" for instance, if user enters "My First Component" as the input -- "My First" will be used in the substitutions. This is to enable you to put "Component" in the template and not have to worry about the user entering it or not.

createFilesInFolderWithPattern
This one is possible now by just creating a top-level folder in your template. Previously we did not support folders within folders. I would not use this anymore.

Added documentation of manifest.json to Readme


Support Yarn's --exclude

Certain dependencies will cause NPM's quick audit endpoint to return a 400 Bad Request error, which bubbles up to yarn npm audit failing with that error and audit-ci failing with an "Invalid JSON" error.
Normally, we can work around this with yarn npm audit --exclude <pkg>, but currently there's no way to pass such excludes to Yarn when running it with audit-ci.
Would an "exclude" feature in audit-ci be acceptable? If so, I can start working on a PR.

I was not aware of this. Absolutely, I would support passing this argument.
One point of debate is whether we should just go ahead and have some approach of passing in extra arguments directly to auditors vs. making an --exclude flag.

One point of debate is whether we should just go ahead and have some approach of passing in extra arguments directly to auditors vs. making an --exclude flag.

This sounds like a good idea to me


Dynamic or Untyped Mappings and Output

Thanks for what looks to be a great library! I'm creating an application that needs to do some CSV processing without knowing either the mappings or the structure of the input data at compile-time. At runtime I have both the input data (of course) and the mapping information (each of the destination columns and whether I should pull them from a column in the source or provide a default or static value).
So I have two questions:

Is there a way to construct the mapping object for TinyCsvParser at runtime? I guess I could construct a runtime expression manually using Linq. It would help if there were an overload to the mapping to pass in the column names as strings instead of just expressions (especially since it currently looks like the expressions are just mapped back to strings through reflection eventually).
Is there a way to receive some dynamic or IEnumerable<KeyValuePair<string, string>> (for header -> value) back from TinyCsvParser?

Thanks!

I will need some time to think about it. I am just writing down some ideas below on how to extend the library. But if it is urgent, then probably the CsvHelper has the features you need?
Sample Dynamic Mapper
I think one can do a mapping based on Column Names with a class like this (I haven't tested it). That requires a Header to be passed into the Constructor to instantiate it. But I am unsure how to plug it into the existing pipeline.
Any ideas are welcome.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using TinyCsvParser.Model;

namespace TinyCsvParser.Mapping
{
    public class CsvMappingDynamic<TEntity> : CsvMapping<TEntity>
        where TEntity : class, new()
    {
        private readonly IDictionary<string, int> columnNameToIndexMapping;

        private readonly CsvMapping<TEntity> csvMapping;

        public CsvMappingDynamic(TokenizedRow header)
        {
            // The Header is also a TokenizedRow:
            header
                // Get All Tokens (Column Names):
                .Tokens
                // Enumerate the Columns:
                .Select((columnName, position) => new
                {
                    ColumnName = columnName,
                    Position = position
                })
                // And Create a Dictionary for faster Lookup:
                .ToDictionary(x => x.ColumnName, x => x.Position);
        }

        protected CsvPropertyMapping<TEntity, TProperty> MapProperty<TProperty>(string columnName, Expression<Func<TEntity, TProperty>> property)
        {
            // Make Sure the Value is available in the Mapping:
            if(!columnNameToIndexMapping.ContainsKey(columnName))
            {
                throw new InvalidOperationException(string.Format("No matching header column for name '{0}'", columnName));
            }

            // Get the Column Index:
            int position = columnNameToIndexMapping[columnName];

            // And now we can map by index as in the original mapping:
            return MapProperty(position, property);
        }
    }
}

Existing Pipeline
The current CSV Pipeline for the Parsing. The only thing I do with the header is to skip it or not. But I don't know how to instantiate the Mapping at this point. An Initialize method also seems to be
public ParallelQuery<CsvMappingResult<TEntity>> Parse(IEnumerable<Row> csvData)
{
    if (csvData == null)
    {
        throw new ArgumentNullException("csvData");
    }

    var query = csvData
        .Skip(options.SkipHeader ? 1 : 0)
        .AsParallel();

    // If you want to get the same order as in the CSV file, this option needs to be set:
    if (options.KeepOrder)
    {
        query = query.AsOrdered();
    }

    query = query
        .WithDegreeOfParallelism(options.DegreeOfParallelism)
        .Where(row => !string.IsNullOrWhiteSpace(row.Data));

    // Ignore Lines, that start with a comment character:
    if(!string.IsNullOrWhiteSpace(options.CommentCharacter))
    {
        query = query.Where(line => !line.Data.StartsWith(options.CommentCharacter));
    }

    return query
        .Select(line => new TokenizedRow(line.Index, options.Tokenizer.Tokenize(line.Data)))
        .Select(fields => mapping.Map(fields));
}

I just found this Issue and was wondering

if there could be an even more dynamic approach with creating a class to map to at runtime?
Where exactly are you getting that double enumerable error? Inside of the .Parse(rowData) or when trying to do csvDataArray.AsEnumerable().First()?

I am currently reworking the API to allow dynamic mappings. I am not sure about the final API, the above are thought experiments. If you have ideas, please let me know. 😎

Well based on what I have seen how TinyCSV works I would personally try creating a class to map to at runtime based on the headers of the csv file but I have not really taken a look at how TinyCSV works internally. I would use CodeDOM to archieve this but If you want efficiency you might take a look at reflection.emit and writíng low level IL (See Stackoverflow).
I want to write a Library combining TinyCSV with Elasticsearch.NET to import big csv files with differing structure into elasticsearch in which I dont care about the structure as long as the headers are set correctly.

Thanks for the suggestions. I won't have much time the weeks ahead, so I won't be able to work on it. I will create a branch soon with dynamic mappings included.

Hello bytefish FYI I have continued to look into dynamically generating POCO Classes to map to and the only real way I found that may work is using reflection.emit as CodeDOM doesn't work with .net core as it cant compile your generated code.
I'm really looking forward to see how you archieve the dynamic mappings

Hello bytefish after a little bit of research I think that the only way for my dll tinycsv to elasticsearch is to leverage system.reflection.emit to create the POCO Types at runtime. So basically building a programm which builds the functionality I want using IL at runtime for each CSV-file that has the same Headernames. I came to this conclusion as elasticsearch.net also needs POCO classes and does not expose any dynamic capabilitys as anonymous class don´t cut it for my usecase.

Small update I found this which allowed me to do the dynamic stuff that I wanted have a look here. My only problem is that i need to call .any() on the ParallelQuery otherwise i get an exception that reading from a closed TextReader is not allowed. Would you know a reason why a ParallelQuery would act this way?

Dynamic Mappings would be a great feature, but I am lacking the resources to implement it in the near future. Right now I prefer to have the library with fixed mappings. For sophisticated mappings people will turn to CsvHelpers anyway. This library is optimized for speed, so maybe this is what it should be known for.
I don't want to generate false expectations, like users can expect me to support dynamic mappings sometime soon. So I am closing this issue.
Sorry! 🙏

Just a small heads up I got help from the elasticsearch guys and got it working. Thank you again for writing this Lib!

Cool! Thanks for the feedback and honestly sorry for not putting more effort into it.

No worries! Doing one thing extremly well should be enough to strife for!
Philipp Wagner<EMAIL_ADDRESS>schrieb am Mo., 16. Sep. 2019,
06:20:

Cool! Thanks for the feedback and honestly sorry for not putting more
effort into it.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/bytefish/TinyCsvParser/issues/23?email_source=notifications&email_token=AEMNB7IUWRVTPZ3WONPZVBDQJ4CPJA5CNFSM4D2KJMUKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD6YB7OI#issuecomment-531636153,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AEMNB7JYVRCBPDO42FU2D7LQJ4CPJANCNFSM4D2KJMUA
.


Introduce glide to ease building etcd-aws-cfn

Hope it helps people like https://github.com/crewjam/etcd-aws/issues/1
Execuse me if I'm doing a terrible thing here. I'm somewhat new to Golang :bow:
Btw, thanks for sharing this!

In general, I don't really have my head around the more subtle library issues in golang. At work we vendor with govendor but it seems that virtually none of the third party libraries we depend on do vendoring on their own. So I'm not really sure that introducing vendoring here is consistent with that the community is doing -- certainly some people are doing it, but what is the path with the least friction? I don't know.
Perhaps a less fraught way to deal with issues like #1 would be to have binary releases so that using the tool doesn't automatically require someone who is unfamiliar with golang to dive into the ecosystem.
Thoughts?

@crewjam Execuse me if I'm missing point but I guess we can provide this glide.yaml to just help "developers" start developing etcd-aws e.g. reproducing build env in their machine or in CI. For "users" who don't want to build but just want to use etcd-aws, yes, I believe having binary releases is great!
For developers, they are not required to rely on vendoring. If he/she doesn't like vendoring, they can choose not to vendor as far as we don't include vendor/ but glide.yaml.

So I'm not really sure that introducing vendoring here is consistent with that the community is doing -- certainly some people are doing it, but what is the path with the least friction? I don't know.

I guess I'm on your side in that point, too.
I believe in Go - the world which a package manager doesn't resolve transitive dependencies automatically - the one who builds the package is responsible for running go getting or glide installing or etc to resolve all the dependencies including direct and transitive ones, hence we only include glide.yaml, not vendor/.
If the one chooses to use vendor/, instead of asking you how to do it, he/she can run glide install.
If the one doesn't even know what vendor/ is, instead of asking you how to do it, he/she can run glide install.
If the one knows Golang, he/she can choose any way as we don't include vendor/.
If the one is an user, he/she can grab binary releases.
Execuse me for leaving such a long reply. To sum up, whether this PR is merged or not, I just wanted to discuss with you about this 😄

Binary releases are a good idea. There's no reason for people to install Go just to use a program written in Go.
Glide does version pinning which is used to protect against incompatible changes in dependencies. In practice, I find such changes extremely rare in Go libraries. To do its thing, Glide messes with the vendor directory which (in Go 1.6+) is always checked when the compiler is searching for a dependency. Despite what it would like you to think, it's a new kid on the block, and may bring things you may or may not want. If you use it, I suggest becoming someone who "knows what you're doing." :)
The following command will install this project at the time of this writing unless the Go compiler installation is broken. The most likely reason it would be broken is if GOROOT is set. This can be checked for with env | grep GO. If things aren't working and GOROOT is set and you don't know what it does, you'll probably have to change one or both of the last two in order to fix the first.
GOPATH=~/opt/etcd-aws go get github.com/crewjam/etcd-aws/...

That that command works is considerable evidence that none of the dependencies have changed in an incompatible way. This is pretty typical.
FYI, when you call Go, "Golang", people who know Go know you're new to it :)
For now, I recommend that you:

Don't start using Glide, you'll know when you need it.
Do change the README to give the above command. (People who have their GOPATH set with intent will know to leave that part off.)
Do start distributing binaries.
Do start (if you aren't already) testing building releases on a fresh machine.


DocsArchive-<IP_ADDRESS>Auto archive content

Please don't merge this PR until target archive repo PR https://github.com/OPS-E2E-PPE/docs-archive-test-target/pull/132 is merged into live branch.
Auto archive content to https://github.com/OPS-E2E-PPE/docs-archive-test-target.git

Docs Build status updates of commit 5b533fc:
:x: Validation status: errors
Please follow instructions here which may help to resolve issue.

File
Status
Preview URL
Details

:x:Error

Details

[Error]

Cannot sync git repo to specified commit because branch Archive_master_2019-10-08-07-09-37 has been deleted or has been force pushed: fatal: Couldn't find remote ref Archive_master_2019-10-08-07-09-37

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


Parquet FLOAT vs. DOUBLE type issue

Kùzu version: 0.0.10
I've tried upgrading to the latest version 0.0.10 that was just released, and noticed that there's an issue with parquet reading FLOAT vs DOUBLE data type, which wasn't present in the previous version. I think the default behaviour should be more accepting of both data types, as the data in parquet can come from many different sources? The parquet file attached here came from Polars with snappy compression.
MRE
import duckdb

conn_1 = duckdb.connect()
tbl = conn_1.sql("SELECT * FROM 'cities.parquet'")

print(tbl)

import kuzu

db = kuzu.Database(f"./test")
conn = kuzu.Connection(db)

def create_city_node_table(conn) -> None:
    conn.execute(
        """
        CREATE NODE TABLE
            City(
                id INT64,
                city STRING,
                state STRING,
                country STRING,
                lat FLOAT,
                lon FLOAT,
                population INT64,
                PRIMARY KEY (id)
            )
        """
    )

create_city_node_table(conn)
conn.execute(f"COPY City FROM 'cities.parquet';")

$ python test.py
┌───────┬────────────┬─────────┬─────────┬─────────┬───────────┬────────────┐
│  id   │    city    │  state  │ country │   lat   │    lng    │ population │
│ int64 │  varchar   │ varchar │ varchar │ double  │  double   │   int32    │
├───────┼────────────┼─────────┼─────────┼─────────┼───────────┼────────────┤
│     1 │ Airdrie    │ Alberta │ Canada  │ 51.2917 │ -114.0144 │      61581 │
│     2 │ Beaumont   │ Alberta │ Canada  │ 53.3572 │ -113.4147 │      17396 │
│     3 │ Blackfalds │ Alberta │ Canada  │ 52.3833 │    -113.8 │       9328 │
│     4 │ Brooks     │ Alberta │ Canada  │ 50.5642 │ -111.8989 │      14451 │
│     5 │ Calgary    │ Alberta │ Canada  │   51.05 │ -114.0667 │    1239220 │
└───────┴────────────┴─────────┴─────────┴─────────┴───────────┴────────────┘

Traceback (most recent call last):
  File "/code/kuzudb-study/test.py", line 31, in <module>
    conn.execute(f"COPY City FROM 'cities.parquet';")
  File "/code/kuzudb-study/.venv/lib/python3.11/site-packages/kuzu/connection.py", line 90, in execute
    self._connection.execute(
RuntimeError: Binder exception: Column `lat` type mismatch. Expected FLOAT but got DOUBLE.

Example file
cities.parquet.zip
As can be seen, the parquet output from DuckDB is perfectly fine, and is of type DOUBLE. I think the correct behaviour here should be that Kùzu coerces the data type to FLOAT without the user having to worry about it?

Hi @prrao87 , yeah this is a known issue, I totally agree with you. We introduced more rigid rules for data type checks during the binding phase to fix some type mismatch bugs, but not able to finish the casting part yet. Before the next major release, we will add back more flexible data type castings.

Labeling with both bug and feature as it's not very clear to me which one is more accurate.

Solved in #3887


DeserializationFailure on watchForever/getAll events

To reproduce:

create a job with invalid image name
use the service from com.coralogix.zio.k8s.client.events.v1.events.Events
then call eventsService.getAll(Some(K8sNamespace.default)) or watchForever

Result: DeserializationFailure with  DownField(eventTime)
Cause: the eventTime is null for some events.
Request: GET https://kubernetes.docker.internal:6443/apis/events.k8s.io/v1/namespaces/default/events?limit=10
response item:
{"metadata":{"name":"xxx-465r5-j76z8.166ba39bf354fa24","namespace":"default","selfLink":"/apis/events.k8s.io/v1/namespaces/default/events/xxx-465r5-j76z8.166ba39bf354fa24","uid":"2fd386cc-2cb9-4f61-aeb9-8d59946baa1b","resourceVersion":"1756627","creationTimestamp":"2021-03-12T15:59:41Z","managedFields":[{"manager":"kubelet","operation":"Update","apiVersion":"v1","time":"2021-03-12T16:34:48Z","fieldsType":"FieldsV1","fieldsV1":{"f:count":{},"f:firstTimestamp":{},"f:involvedObject":{"f:apiVersion":{},"f:fieldPath":{},"f:kind":{},"f:name":{},"f:namespace":{},"f:resourceVersion":{},"f:uid":{}},"f:lastTimestamp":{},"f:message":{},"f:reason":{},"f:source":{"f:component":{},"f:host":{}},"f:type":{}}}]},"eventTime":null,"reason":"InspectFailed","regarding":{"kind":"Pod","namespace":"default","name":"xxx-465r5-j76z8","uid":"25ad2b4f-0395-4901-85b5-616d68df6575","apiVersion":"v1","resourceVersion":"1752753","fieldPath":"spec.containers{xxx-client-1}"},"note":"Failed to apply default image tag \"[invalid image]\": couldn't parse image reference \"[invalid image]\": invalid reference format","type":"Warning","deprecatedSource":{"component":"kubelet","host":"docker-desktop"},"deprecatedFirstTimestamp":"2021-03-12T15:59:41Z","deprecatedLastTimestamp":"2021-03-12T16:34:48Z","deprecatedCount":166}

Unfortunately the schema declares that field as required. I think we have to introduce an override list for property optionality in the code generator to solve this.

Other similar case found by @iravid: PodSpec#containers was null


⚠ Minecraft has degraded performance

In 2abb530, Minecraft (https://www.minecraft.net) experienced degraded performance:

HTTP code: 200
Response time: 1506 ms

Resolved: Minecraft performance has improved in 854cc6a.


Added views and css files closes #8

Added views and css files
Modified Fleet.php controller to make sure web app runs properly

Approved!


Training sample template conversion

Hello,
first of all, thanks for your work and for publishing the code. I'm curious about one thing:
If I understand your paper correctly, you use the prompts with demonstration also while training. I.e., I expected to see the training samples also augmented by the demonstrations. However, I cannot find this in the code. In the dataset.py you write If it is not training, we pre-process the data; otherwise, we process the data online. Perhaps I misinterpret this, but then I'd wonder why the training_samples would even get the context_indicesadded with the respective training-sample-id left out.
Could you please point me to the location in the code where you build the templates for the training samples as you do for the dev and test samples? Thanks a lot!

Hi,
For demonstrations, we also "pre-process" the context indexes for training (candidates of demonstrations for each input). We just don't decide which exact demonstrations to use for training beforehand (to add randomness during training).

Hey,
thanks for your response. I understand, this makes sense. However, I cannot find it in the code. It should be somewhere in the trainer, right? I just cannot find it, it looks like the training samples are used without the demonstrations. Could you please point me to the position in the code where the training samples are extended with the demonstration template? That would really help me a lot. Thanks!


PascalCase serialization for ASP.NET 3.0 (Text.Json)

Hi, thank you for your great work.
I have upgraded my app to asp.net 3.0(serializer Text.Json ) with this settings:
services.AddControllers().AddJsonOptions(opt => { opt.JsonSerializerOptions.PropertyNamingPolicy = null; });
to achieve PascalCase(classes and properties) for my models.
But when I go to the endpoint /swagger.json I see, that class is PascalCased(Provider) but properties are lower case(id, userId).
Example:
"Provider": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"userId": {
"type": "string",
"format": "uuid"
},
...
Thank you

Should be addresses by #1378. Preview nugets available on myget, official release coming real soon


Not working links - communities

There are several communities in the Spain section no longer active:
https://asturiasdev.herokuapp.com/
http://barcelonajs.herokuapp.com/
http://slack.ciudadrealrb.org/
https://cyliconvalley.herokuapp.com/
https://kiwi-slack.herokuapp.com/
http://laraveles-slack.bigcode.eu/
http://madriddevs.org/
http://magesp.codezz.co/
http://nodeschoolmadrid.herokuapp.com/
https://invitations-osweekends.herokuapp.com/
http://progfunc.es/
http://slack.scalabcn.org/
https://wpmadrid.es/wp-login.php?action=slack-invitation should be https://wpmadrid.slack.com/
The invite links for the following don't work anymore:
https://comunidadestecnicas.slack.com/
https://anuncioswp.slack.com
https://corunadevelopers.slack.com/
https://huelva-developers.slack.com/
https://phpsevilla.slack.com/
https://salamancadevs.slack.com/
https://programaresunamierda.slack.com/
This workspace has been deleted:
https://uhjrxlevy-malagascala.slack.com/

TBH, we (huelva-developers community) removed the invite link because we received a few spammers after adding the link here. Do you think folks that there is a way to let people know that the team is open but for real people?


Updated license to correct year

Found another tiny little niggle. You time traveller, you.

Current coverage is 93.15% (diff: 100%)

Merging #10 into master will not change coverage

@@             master        #10   diff @@
==========================================
  Files             4          4
  Lines            73         73
  Methods          13         13
  Messages          0          0
  Branches         13         13
==========================================
  Hits             68         68
  Misses            5          5
  Partials          0          0

Powered by Codecov. Last update b136385...2694edf


Third party tools break on insertRule

Is your feature request related to a problem? Please describe.
In configuring a third party tool called hotjar with our site built with stitches, we were told by their support team that they aren't able to work with frameworks that use insertRule to inject stylesheets.
We've also tried a number of other tools that appear to also not be compatible with insertRule:

Inspectlet
Lucky Orange
SmartLook
MouseFlow

Describe the solution you'd like
We'd like to be able to build stylesheets in a way that doesn't rely on insertRule in production.
Describe alternatives you've considered

Using another CSSStyleSheet API to manipulate styles
Generating css stylesheets at build time that can be applied in production without relying on insertRule

Additional context
The result of this issue is that our site works for users in typical browsers, but isn't supported when replaying session using hotjar and styles created with stitches just don't get applied.

Hey @safaaleigh! Here at @grupoboticario, while our team had been building a design system we faced this problem. The solution was creating a package to capture the CSS CSSOM and inject in a tag style in head. Works like well.
We based our researchs for this problem with:

https://github.com/styled-components/styled-components/issues/1603
https://help.hotjar.com/hc/en-us/articles/115012499507-Platforms-and-Frameworks-not-Compatible-with-Hotjar
https://engineering.brighthr.com/blog-posts/hotjar-styled-components-fix/

Basically this solution is:
const Recording = {
  conditions: () => window?.hj?.settings?.record,
  selector: () => document.querySelectorAll("head style"),
  timeout: 1000,
  init: function ({ conditions, selector, timeout }) {
    this.conditions = conditions || this.conditions;
    this.selector = selector || this.selector;
    this.timeout = timeout || this.timeout;
  },
  run: () => {
    if (typeof window === "undefined") return;
    const syncStyles = document.createElement("style");
    syncStyles.type = "text/css";
    syncStyles.dataset.flora = true;
    document.head.insertBefore(syncStyles, document.head.children[0]);

    // start styles sync
    let lastStyles;
    const updateStyles = () => {
      const styleNodes = [].slice.call(Recording.selector());

      if (!styleNodes.length) return;

      const styles = styleNodes
        .filter((node) => !node.dataset.flora)
        .map(({ sheet }) =>
          [].slice
            .call(sheet.cssRules)
            .filter((rule) => rule.cssText.includes(".flora")) // prefix name in `createStitches` function
            .map((rule) => rule.cssText)
            .join(" ")
        )
        .join(" ");

      if (styles === lastStyles) return;

      syncStyles.textContent = styles;
      lastStyles = styles;
    };

    // start updating interval
    const startInterval = window.setInterval(() => {
      if (!Recording.conditions()) return;
      window.clearInterval(startInterval);
      window.setInterval(() => {
        window.requestAnimationFrame(() => {
          updateStyles();
        });
      }, 500);
    }, 50);
  },
};

Recording.run();

export default Recording;

I've been thinking to move this, to a package and publish.

@oeduardoal Thank you so much for this! We were able to implement something along these lines and now our HotJar recordings working!
I'd love to collaborate on a package, let me know if you make a repo and I can help test it out.

@oeduardoal In case you're interested, here's the code we ended up going with using Typescript and a few more functional patterns:
declare global {
  interface Window {
    hj: any;
  }
}

function handleRequestAnimationFrame() {
  const elements = document.querySelectorAll<HTMLStyleElement>('head style');

  if (!elements.length) return '';

  return Array.from(elements)
    .reduce<string[]>((previousValue, element) => {
      if (element.dataset.hotjarWorkaround) return previousValue;

      if (!element.sheet) return previousValue;

      const rulesString = Array.from(element.sheet.cssRules)
        .reduce<string[]>((previousRuleValue, rule) => {
          if (!rule.cssText.includes('.sibi')) return previousRuleValue;
          return previousRuleValue.concat(rule.cssText);
        }, [])
        .join(' ');

      return previousValue.concat(rulesString);
    }, [])
    .join(' ');
}

export function hotjarWorkaround() {
  if (typeof window === 'undefined') return;

  const syncStyles = document.createElement('style');
  syncStyles.dataset.hotjarWorkaround = 'true';
  syncStyles.type = 'text/css';

  // insert style element into head
  document.head.insertBefore(syncStyles, document.head.children[0]);

  // start styles update interval

  const intervalID = window.setInterval(() => {
    const isHotjarRecording = window?.hj?.settings?.record;
    if (!isHotjarRecording) return;

    window.clearInterval(intervalID);

    let lastStyles: string;

    window.setInterval(() => {
      window.requestAnimationFrame(() => {
        const styles = handleRequestAnimationFrame();
        if (styles === lastStyles) return;

        syncStyles.textContent = styles;
        lastStyles = styles;
      });
    }, 500);
  }, 50);
}

Hi @safaaleigh and @oeduardoal. 👋🏻
Is this solution still valid nowadays?

I could get the "record" property this way -> window?.hjSiteSettings?.record

Hey @safaaleigh! Here at @grupoboticario, while our team had been building a design system we faced this problem. The solution was creating a package to capture the CSS CSSOM and inject in a tag style in head. Works like well.
We based our researchs for this problem with:

Add bundles that switch off insertRule/speedy mode while maintaining a prod env styled-components/styled-components#1603
https://help.hotjar.com/hc/en-us/articles/115012499507-Platforms-and-Frameworks-not-Compatible-with-Hotjar
https://engineering.brighthr.com/blog-posts/hotjar-styled-components-fix/

Basically this solution is:
const Recording = {
  conditions: () => window?.hj?.settings?.record,
  selector: () => document.querySelectorAll("head style"),
  timeout: 1000,
  init: function ({ conditions, selector, timeout }) {
    this.conditions = conditions || this.conditions;
    this.selector = selector || this.selector;
    this.timeout = timeout || this.timeout;
  },
  run: () => {
    if (typeof window === "undefined") return;
    const syncStyles = document.createElement("style");
    syncStyles.type = "text/css";
    syncStyles.dataset.flora = true; // identify our style node tag
    document.head.insertBefore(syncStyles, document.head.children[0]);

    // start styles sync
    let lastStyles;
    const updateStyles = () => {
      const styleNodes = [].slice.call(Recording.selector());

      if (!styleNodes.length) return;

      const styles = styleNodes
        .filter((node) => !node.dataset.flora) // filter do not add previous style node tag
        .map(({ sheet }) =>
          [].slice
            .call(sheet.cssRules)
            .filter((rule) => rule.cssText.includes(".flora")) // prefix name in `createStitches` function
            .map((rule) => rule.cssText)
            .join(" ")
        )
        .join(" ");

      if (styles === lastStyles) return;

      syncStyles.textContent = styles;
      lastStyles = styles;
    };

    // start updating interval
    const startInterval = window.setInterval(() => {
      if (!Recording.conditions()) return;
      window.clearInterval(startInterval);
      window.setInterval(() => {
        window.requestAnimationFrame(() => {
          updateStyles();
        });
      }, 500);
    }, 50);
  },
};

Recording.run();

export default Recording;

I've been thinking to move this, to a package and publish. 🚀

Watch out!  The above script might cause your site to crash the browser tab (Out of memory exception) when the Dark Reader extension (https://darkreader.org/) is toggled on:

This script creates a new STYLE element
DarkReader sees it, and creates new css override rules
This scripts sees new css and adds it to the STYLE element
DarkReader sees it, and creates new css override rules
...

The solution for us was to add class="darkreader" to the new STYLE element, effectively instructing DarkReadre to skip it (and break out of the infinite loop):
     if (typeof window === "undefined") return;
     const syncStyles = document.createElement("style");
     syncStyles.type = "text/css";
+    syncStyles.classList = ["darkreader"]; // tell Darkreader to ignore this tag
     syncStyles.dataset.flora = true; // identify our style node tag
     document.head.insertBefore(syncStyles, document.head.children[0]);

Anyways, thanks again for the original snippet: you are a time saver!

Hey guys. Is anyone experiencing problems with this workaround when the user connection is slow?


[CELEBORN-847] Support use RESTful API to trigger worker exit and exitImmediately

What changes were proposed in this pull request?
As title
Why are the changes needed?
Does this PR introduce any user-facing change?
How was this patch tested?

ping @waitinfuture @RexXiong @pan3793

ping @pan3793 @waitinfuture @RexXiong

ping @pan3793 @waitinfuture @RexXiong

Shall we consider idempotent here?


Error when using Swift 3.0.2

I downloaded the Project and followed the instructions.
I had to use
carthage update --platform iOS  --no-use-binary
since the libs are compiled with Swift 3.0 and are not matching.
I use Swift 3.0.2 and the code is producing an error when running.
keyNotFound("voices")
Error Domain=com.ibm.watson.developer-cloud.TextToSpeechV1 Code=0 "Returned audio is in an unexpected format." UserInfo={NSLocalizedFailureReason=Returned audio is in an unexpected format.}
Solutions of either updating the binaries provided to precompile the project with swift 3.0.2 , and/or whether multiple versions of swift can be installed into xcode.

The error was being returned due to invalid credentials. The error description returned is unhelpful however, and we will create an issue to modify error checking within the SDK.


Koniq10k dataloader do resize to (224, 224) and then apply transform with random crop? Why?

Hey!
I see in this line: https://github.com/IIGROUP/MANIQA/blob/b286649f0d7656a0a3e8e9b0ff092281b2ce27bb/train_maniqa.py#L248, that when training on koniq10k, each image is first resized to (224, 224).
Then you apply transform function that contains a random crop to size (224, 224).
Unless I miss something does the original image has to be resized?
Thanks!

We select vision transformer as our feature extractor, which means the input images should be resized to the fixed image size(224X224).

Hi @Stephen0808 !
Thanks for your fast answer. But then what is the effect of random crop in the transform function of the dataloader?
Also, it means all Koniq10k, which are initially, full resolution are resized to (224, 224). We loose the information of the full resolution image quality.
Wouldn't it be better performance if we random crop first koniq10k dataset images, and then send to vit?
lets say we make sure at least 20 crops are in the dataset for each image, and each crop would have the label of the full resolution image for the training.
It would mean training on size(koniq10)*num_of_crops images.
What do you think?

As mentioned in your question, we crop several images(224X224) for inference and average the scores to get the final score.

I mean:

in inference, the crop would be of high quality (there's no resize of the original inference image)
in training, we do affect the quality since it's the resized image that is forwarded to the model, and not a crop from the original full resolution training mage.

Both in the inference and training phases, we used cropped images.


fix(accent-color): light theme for accent colored motd

This fixes a regression with the previous accent color PR that made it so it always thought it was a dark theme. This should work fine now!


AE49_180824_232949.367

Add MIT (https://github.com/mono/guiunit/blob/master/LICENSE.txt)

@AE49 The package does not have a declared a license and I cannot find one in the source. Can you point me to where it is?

This is under a Microsoft EULA, closing.


:sparkles: Identify lvm partitions for state

As ghw doesnt report lvm partitions we were not able to infer where they were.
This patch uses lsblk to try and gather info about recovery and oem if the runtime.state has them as not found

Codecov Report

Merging #28 (0fa7837) into main (3524a69) will increase coverage by 9.29%.
The diff coverage is 68.51%.

:exclamation: Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please install the Github App Integration for your organization. Read more.
@@            Coverage Diff             @@
##             main      #28      +/-   ##
==========================================
+ Coverage   23.78%   33.07%   +9.29%
==========================================
  Files           6       10       +4
  Lines         412      520     +108
==========================================
+ Hits           98      172      +74
- Misses        296      322      +26
- Partials       18       26       +8

Impacted Files
Coverage Δ

schema/validate.go
57.44% <57.44%> (ø)

schema/root_schema.go
73.58% <73.58%> (ø)

schema/install_schema.go
100.00% <100.00%> (ø)

schema/p2p_schema.go
100.00% <100.00%> (ø)

:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more

I think, for users to understand if they are hitting an issue or if they should expect some issue they have to be fixed by a PR, we should include the user observed behavior in the description.
As in: "The result of this bug was that rpi with a freshly flashed card, didn't boot at all" or "the user saw error some error here  while booting" etc.
Of course if there is an open issue which the PR fixes, we should link to that.
It will also help us create better changelogs for releases. This is just an idea.

This is part of fixing this: https://github.com/kairos-io/kairos/issues/1486


DevOps fail: buildx not work in GitHub Actions

According to https://github.com/huan/docker-simple-mail-forwarder/runs/1892196608, the GitHub Action failed.
However, I can build SMF successfully in my local Ubuntu box with the same version of the code from master branch.
The latest version has been published manually:

I Will investigated what happened in the GitHub Actions later.

It works with #91, so I believe it's related to GitHub Actions issues.


Professional profile

Creating the the professional_profile skeleton:

html
views
tests
urls

@dependabot
This pull request depends on #99
Resolve issue #85 #86

Consider uploading a photo to the description of the PR so we can see how the page looks 🙂

Consider uploading a photo to the description of the PR so we can see how the page looks 🙂
Can you add a picture of what you made?

@patrisiakaplun @idosinger98 The html file was only to make sure that the views and tests are working well,
I will add it to PR #108  where I made the relevant html file.


calico global networkpolicy does not work for egress policy ?

we use calicoctl to apply below yaml file :

post the yaml file here as well (I dont know why the format is just disappeared once we copy them to here)
=========================================
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
name: deny-blue
spec:
selector: color == 'red'
types:

Ingress
Egress
Ingress:
action: Allow
metadata:
annotations:
from: blue
to: red
protocol: TCP
source:
selector: color == 'blue'
destination:
ports:
- 80
Egress:
action: Deny
metadata:
annotations:
from: red
to: blue
protocol: TCP
destination:
selector: color == 'blue'
ports:
- 80

=======================================
Current Behavior
pod has label "color=blue" can not access the POD with label "color=red"
pod has label "color=red" can not access anywhere .
Expected Behavior
pod has label "color=blue" can not access the POD with label "color=red"
pod has label "color=red" can not access the POD with label "color=blue",but it is suppose that it can access internet and other pod dont have label "color=blue"

meanwhile I also find other question , if we apply below yaml file :
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
name: deny-blue
spec:
selector: color == 'red'
types:

Ingress
#- Egress
Ingress:
action: Deny
metadata:
annotations:
from: blue
to: red
protocol: TCP
source:
selector: color == 'blue'
destination:
ports:
- 80

Actually the pod has label "color=red" can not be accessed from anywhere. we expect that it only can not be accessed from the pod with label "color=blue"

meanwhile I also find other question , if we apply below yaml file :
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
name: deny-blue
spec:
selector: color == 'red'
types:

Ingress
#- Egress
Ingress:
action: Deny
metadata:
annotations:
from: blue
to: red
protocol: TCP
source:
selector: color == 'blue'
destination:
ports:
- 80

Actually the pod has label "color=red" can not be accessed from anywhere. we expect that it only can not be accessed from the pod with label "color=blue"

Are you following:
https://docs.projectcalico.org/security/calico-network-policy#control-traffic-tofrom-endpoints-independent-of-namespace  ?

You should be able to post yaml with indentation if you enclose it in triple backtick quotes (```).


Removed "vpc" property and changed "ecsStack.ecsService.service" to "…

The APIGatewayStack section in the readme file of module 4 produces the following error when built.
bin/cdk.ts:29:5 - error TS2345: Argument of type '{ vpc: Vpc; fargateService: NetworkLoadBalancedFargateService; }' is not assignable to parameter of type 'APIGatewayStackProps'. Object literal may only specify known properties, and 'vpc' does not exist in type 'APIGatewayStackProps'.

...

bin/cdk.ts:29:5 - error TS2740: Type 'FargateService' is missing the following properties from type 'NetworkLoadBalancedFargateService': assignPublicIp, service, desiredCount, loadBalancer, and 5 more.

This change updates the content of the readme file to match the source file of module 4.
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Something doesn't seem right with this @paolobasa - Please can you ensure you are in sync with the latest commit and confirm if there is still a problem.

Thanks @DavidChristiansen. I fetched the latest commits and was able to confirm that it's working now.


[Packaging] Release DEB package for Debian sid

Description
Close https://github.com/Azure/azure-cli/issues/22877
Per the query result on debian sid, the usage of Azure CLI on Debian sid is not small, but we don't release DEB package for Debian sid:
https://packages.microsoft.com/repos/azure-cli/dists/

Users will then install the unofficial, buggy azure-cli package from https://packages.debian.org/sid/azure-cli and report issues to us (https://github.com/Azure/azure-cli/issues/19640).
This PR releases DEB packages for Debian sid by ourselves, so that users can use the official Azure CLI package.

support Debian sid


Update README.md

TODO:

[x] update installation instructions
[x] quickstart example
[x] links and badges

@mforets @schillic this should be ready! we can either merge it now (if / when you are happy with it). Or merge it after the package is registered with the updated installation instructions

I guess this can be merged?


Proposal: Add interfaces to SharpDX classes to support unit testing

I think it would be great if classes within SharpDX each implemented a corresponding interface as this would make it possible to unit test code which consumes SharpDX libraries.
For example, the Device class could implement the IDevice interface which would contain all public methods of the Device class.
If I did this for a project I am working on, would you appreciate a pull request?

I'm going to decline this proposal.
The reason is that SharpDX is just a native library wrapper, it provides a bunch of DllImport. It doesn't provide an abstraction of the API (or very small, by C#ifying the C++ API).   We don't want to provide an abstraction layer on top of these.
Also, the granularity of the vast majority of DirectX interfaces is so thin that it would take an enormous amount of job to provide a proper mock of theses interfaces (mocking a ID3D11Device would be a huge amount of work... - considering that you would have most likely to mock also DXGI -  I'm not aware of any project doing such a work around Direct3D11)
Usually, a project using SharpDX is using just a small subset of the DirectX interfaces and methods, and it is more recommended to make an internal and mockable facade/interface/class on your side around the SharpDX interfaces, based exactly on what you are using instead of trying to mock everything.


Update Highlighter instructions in README

What should this PR do?
Resolves DEVED-221 by updating the README to have clearer instructions on adding input to the Highlighter component — specifically around code blocks where you would like spaces to be preserved.
Why are we making this change?

The instructions on how to preserve spacing on code input for the Highlighter component were not as clear as they could be.

What are the acceptance criteria?

The additional explanation and example make sense.

How should this PR be tested?

^^ Check the above

Pull request process
Reviewers:

Test functionality using the criteria above.
Offer tips for efficiency, feedback on best practices, and possible alternative approaches and things that may not have been considered.
For shorter, "quick" PRs, use your best judgement on #2.
Use a collaborative approach and provide resources and/or context where appropriate.
Provide screenshots/grabs where appropriate to show findings during review.

Reviewees:

Prefer incremental and appropriately-scoped changes.
Leave a comment on things you want explicit feedback on.
Respond clearly to comments and questions.

Going to update this following #339 and the addition of the new component for output blocks.


Factor out testing code from charts

Factors out chart testing code into a separate library which is provided as Docker image. This also unifies originally separate and somewhat redundant scripts for CircleCI and CI on our Kubernetes cluster.

https://github.com/kubernetes/charts/pull/5231 updates CI in the charts repo.

/assign @mattfarina @viglesiasce

Thanks @unguiculus!!

cc @lachie83 @prydonius @scottrigby

+1 from me, I think @mattfarina also wanted to take a quick look

This is awesome!


Add JSON logger as an option to Unleash

Cool but why

@angusjf Apologies, this might give a bit of context
https://prima-assicurazioni-spa.myjetbrains.com/youtrack/issue/PRIMAUK-3221/Unleash-Proxy-is-spamming-logs


BUG: Fix labeler action file regexes

Fix labeler action file regexes.
PR Checklist

[X] No API changes were made (or the changes have been approved)
[X] No major design changes were made (or the changes have been approved)

The filename regexes are not being processed correctly so far. This PR hopefully fixes that.

So the file regexes are working now, e.g. PRs #2519, #2521.
I've submitted a fix tfor the Python wrapping regex in PR #2522 and an enhancement in PR #2523.


Support selecting analysis panel via URL

Support selecting analysis panel via URL
This allows people to bookmark maps and time series.

Closes #10

Needs rebase? Also needs the minified JS file I'm afraid.

Looks good! Tested cross-browser. The only nitpicky change I might make is instead of data-target we could just use the href attribute, since we have to have the href for Bootstrap tabs anyway. (For some reason GitHub won't let me leave a line note.)

See 6126f28b0e5f5086dfc8d6f40c6e731541fda2bf for a (slightly unsatisfactory) explanation of why we are using data-target

Ah OK! Merging 😸


[Run][Folder] Allow UNC starting with //

Summary of the Pull Request
Allow to query UNC paths that starts with //.
Note that // is the default activation keyword for the URI plugin.
I don't think we should change it since it's been like this for years but // should work if the activation keyword is changed or the plugin is disabled.

PR Checklist

[x] Closes: #32307
[ ] Communication: I've discussed this with core contributors already. If work hasn't been agreed, this work might be rejected
[x] Tests: Added/updated and all pass
[ ] Localization: All end user facing strings can be localized
[ ] Dev docs: Added/updated
[ ] New binaries: Added on the required places

[ ] JSON for signing for new binaries
[ ] WXS for installer for new binaries and localization folder
[ ] YML for CI pipeline for new test projects
[ ] YML for signed pipeline

[ ] Documentation updated: If checked, please file a pull request on our docs repo and link it here: #xxx

Detailed Description of the Pull Request / Additional comments

Validation Steps Performed
Manually tested.

/azp run

/azp run


States tests

Some test additions for two-body states. Also includes the error check for 180 degrees inclination in modified equinoctial elements as discussed in #282.
Question
In this line: https://github.com/poliastro/poliastro/blob/main/src/poliastro/twobody/states.py#L93, would it be a good choice to check if ecc = 1 and set a's value to None or something similar instead of numpy's infinity warning:
RuntimeWarning: divide by zero encountered in true_divide

since a is undefined for parabolic orbits?

Windows error is unrelated (#959)

According to Codecov, most of the code in this pull request is not covered by tests, is that expected?

I tried to add a mee2rv method based on: https://spsweb.fltops.jpl.nasa.gov/portaldataops/mpg/MPG_Docs/Source Docs/EquinoctalElements-modified.pdf, but couldn't find any example to test it yet. Maybe I should remove the method and work on it separately?

We agreed to manually generate a single test case with GMAT (apart from having more thorough tests on our validation repository)

Seems like all @jorgepiloto review comments were addressed, and the only missing thing was to add a test case based on GMAT. This is already useful though, so I merged the latest changes from main hoping that the tests pass so we can merge it.

Thanks @Yash-10 !


cross-attention layers

Hi, dear author, thank you for your efforts in producing this outstanding work.
In this paper, you mentioned: To guide the generation process to the desired visual instruction sequence, each frame $(i)$ in the sequence attends to its prompt $(\tau_i)$ via cross-attention layers of the U-Net. However, I couldn't find the implementation code for this part in the repository. Could you kindly point me to where it is? I would greatly appreciate it.

See the SpatialTransformer class.

I understand what you mean, but the attention.py file is basically the same as dynamicrafter. I didn't find out how you calculated cross attention for each frame and each prompt.

Yes, the code is basically the same. But DynamiCrafter uses the same single prompt for the whole sequence. We use different prompts for each frame.

Thank you for your response, which helpes me solve this problem. Wish you good luck!🫡


TR-745 - Refactor Windows Event Log Cleared detections

Updating Windows Event Log Cleared detection
Added new detection Suspicious Event Log Service Behavior

This PR was created by Automated Detection Testing Service :robot:
Tested detections:
Suspicious Event Log Service Behavior :white_check_mark:

diskUsage: 151552
runDuration: 0.66s
scanCount: 5


fix: Bool type serialization #673 and enhanced #587

What this PR does / why we need it?
fix: Bool type serialization #673 and enhanced #587
Summary of your change
Please indicate you've done the following:

[x] Made sure tests are passing and test coverage is added if needed.
[ ] Made sure commit message follow the rule of Conventional Commits specification.
[ ] Considered the docs impact and opened a new docs issue or PR with docs changes if needed.

此PR虽然完善Boolean类型的序列化, 但是影响之前的testcase以及兼容性, 于是关闭


chore(deps): bump dependency versions

Pull Request Test Coverage Report for Build<PHONE_NUMBER>8
Details

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 100.0%

Totals

Change from base Build<PHONE_NUMBER>:
0.0%

Covered Lines:
170

Relevant Lines:
170

💛  - Coveralls


Non widget query silently failing

I'm using the non widget query code below and it is silently failing.
String _doses = """
  query doses(\$since: String) {
    doses(since: \$since) {
      id
      scheduledLocal
      takenLocal
      schedule
      isDuplicateDose
    }
  }
"""
        .replaceAll('\n', ' ');
    var data = await _gqlClient.query(query: _doses, variables: {
      'since': '2014-09-08T08:02:17-05:00'
    })

I cant step into the code with the debugger and the code is crashing the app with
Lost connection to device.
Exited (sigterm)
The query runs fine with Apollo client dev tools and I've used the technique for other queries, although this is the only query I'm using variables with. Mutations are working fine.
Any suggestions on what the correct approach is or hoot debug it further?
Thanks!

Gonna close this. I deleted the app off my test devices and emulators, reloaded and its now working.


Product Hunt

Small marketing idea, when the app is available, we should try to promote it on Product Hunt.

CC: @pmarsceill

Totally agree! Do we know anyone that might help get visibility? Also Hacker News / Designer News.

https://www.producthunt.com/tech/aware


Are there any refenrece guide to update to version 4 of the theme

Question

Is there a guide or some references on how to move to v4 version. currently updating the submodule will break the site with several errors and warnings. I believe my docs and configurations may need to be changed to acomodate the changes.

Hi @SrNetoChan! Thank you for bringing this up. Currently, there is no guide for upgrading from v3 to v4. I will try to write one as soon as possible.

Let me know if I can help somehow. Comparing the demo site older version with the new one might help understand what changes need to be done, right?

This should be easy few steps:

Delete the submodule
Update the config.yaml file to be similar to this.
Follow the quickstart guide to run updated theme.

You shouldn't require any change in data and content folders.

In that case, I will try make it work and write down the process, in case you want to use it for docs

That would be great! Thank you.

So, I have successefuly updated my site following your instruction. This are the note I took for doing it
Migration from V3 to v4.0 Toha Theme
1 - Remove toha theme submodule
The theme no longer uses a git submodule to be installed, therefore, we start by removing the toha theme submodule
git rm themes/toha/
git commit -m "Remove v3 theme"
2. Meet the requirements
For building the site locally we will need to update/install the following requirements:
Hugo version v0.118.x (extended) or later.
Go language version v1.18.x or later.
Node version v18.x and npm version 8.x or later.

3. Add missing files
The new theme needs a couple of new files
From the https://github.com/hugo-toha/hugo-toha.github.io sample site I have copied the following files

LICENSE - (optional) This changes the license from GNU to MIT
go.mod
go.sum

Edited the go.mod file and changed the first line to point to your site repository
module github.com/<your username>/<my site repo name>

4. Update the config.yaml file
There were some changes in the way the config.yaml file needs to be written.
First, we need to replace the theme option by the module option, so remove this line
theme: "toha"

And add the following lines
# Use Hugo modules to add theme
module:
  imports:
  - path: github.com/hugo-toha/toha/v4
  mounts:
  - source: static/files
    target: static/files
  - source: ./node_modules/flag-icon-css/flags
    target: static/flags
  - source: ./node_modules/@fontsource/mulish/files
    target: static/files
  - source: ./node_modules/katex/dist/fonts
    target: static/fonts

Update the darkMode options, which is now under features. Remove this lines
 darkMode:
    provider: darkreader
    enable: true
    default: system

And add this under features: :
  features:

    # Enable dark theme
    darkMode:
      enable: true

A few sections we missing an extra option called services. the changes were in comment, analytics and support:
Comment
    comment:
      enable: false
      services:
        disqus:
...

Analytics

# Enable Analytics
analytics:
  enabled: true
 services:

...
Support
   # Enable Support
    support:
      enable: true
     services:
...

Some other options have changed

`enableTOC: true` was replaced by

toc:
enable: true

`enableTags: true` was replaced by

tags:
enable: true
on_card: true # enables tags in post cards

`showFlags: true` as replaced by

flags:
enable: true
# # If you want to use different country flag for a language, specify them here.
# flagOverwrites:
#   - languageCode: en
#     countryCode: us

## 5. Built the site

Building the site now requires a few more steps. At least for the first time you do it.

1. Load Hugo modules

hugo mod tidy
2. Install node modules

hugo mod npm pack
npm install
`
(This last command a few more files that I also added to the repo for caution. Not sure it needed or not.)
package-lock.json
package.hugo.json
package.json
I did not commit the /node_modules folder and actually added it to the .gitignore file

Build the site

hugo server -w
Update github workflows
My site was using a github workflow/action to deploy the site on each commit. I add to replace it by the one provided in the https://github.com/hugo-toha/hugo-toha.github.io, the merge/to/main.yml, because it deals with the loading of hugo modules and install node modules.

Question: What have you done with "assets/jsconfig.json"? I see this is in the repository for the example site (https://github.com/hugo-toha/hugo-toha.github.io/blob/main/assets/jsconfig.json), but can/should we add this to .gitignore?

I think it gets added automatically by the build process. You should be able to ignore that.


Enhancements to HardDeletes and IndexPersistor

Addresing https://github.com/linkedin/ambry/issues/529

Adding pause and resume support to hard deletes
Making write() in IndexPersistor synchronized so that the index can call it on demand. Index exposes an api to persist the index with this change.

Details on what happens in pause() within hard deleter
Complete any on-going hard delete cycle if any
Persist the index(which will update the startTokenSafeToPersist within hard deletes)
Prune hard delete recovery range
Persist clean up token(tokens and hard delete recovery range)
SLA: 20 mins
Reviewers: Gopal, Priyesh
Coverage(on running entire IndexTest):
PersistentIndex	100% (5/ 5)	100% (38/ 38)	91.1% (479/ 526)
HardDeleter	100% (3/ 3)	80% (24/ 30)	68.7% (191/ 278)
(Uncovered lines among new lines added: InterruptedException while waiting in pause state)
Built and coding style applied

@pnarayanan @vgkholla : you guys can review the patch. Have addressed all the comments

@vgkholla @pnarayanan : Can you guys review this patch

@vgkholla Have addressed all your comments

@pnarayanan I couldn't respond in the same thread where you asked this question "could you point me to the test that ensures that once pause() returns, the hard delete recovery range is empty?". Here is the response.
I don't want to expose the recovery range outside of HardDeleter class and hence the tests don't explicitly check for the range. We achieve it by this way

Verify that hardDeleter thread is in WAITING state
Verify that progress hasn't moved after calling pause (which implicitly refers to the startTokenSafeToPersist that is part of the recovery range).
All new entries that are deleted and eligible to be hard deleted are not hard deleted.

Do you think, more stricter verification is required for the recovery range.

@vgkholla @pnarayanan : can you guys review it and possible merge it by today.

@vgkholla : addressed your last couple of comments

@vgkholla addressed your comments. Resolved merge conflicts.

@nsivabalan is this built on OSx and Linux (./gradlew build && ./gradlew test) and formatted?

@vgkholla :  yes to both your questions.

Yes, built and tested in both OSx and linux.


Uncaught Exception: Attempting to call a function in a renderer window that has been closed or released. Function provid

An uncaught exception was reported.
Info:
OS: win32
Arch: ia32
GPMDP Version: 3.0.1
Time: Wed Mar 16 2016 10:01:09 GMT 0100 (Paris, Madrid)
Error:
Attempting to call a function in a renderer window that has been closed or released. Function provid
Error: Attempting to call a function in a renderer window that has been closed or released. Function provided here: Object.<anonymous> (C:\Users\Mathias\AppData\Local\GPMDP_3\app-3.0.1\resources\app\build\inject\GPMInject\interface\mouseButtonNavigation.js:8:8.
    at BrowserWindow.callIntoRenderer (C:\Users\Mathias\AppData\Local\GPMDP_3\app-3.0.1\resources\atom.asar\browser\lib\rpc-server.js:201:19)
    at emitTwo (events.js:92:20)
    at BrowserWindow.emit (events.js:172:7)

This issue was created automatically inside the uncaughtException handler

Closing this automatically reported issue as a duplicate of #470

I like how the unicorn checks every 15 minutes but this one took 18 minutes
#youbroketheunicorn


Feature/geo json bounding box

Bounding box is not used by EMP's IFeature.
This change refactors the whole geojson implementation and fixes the timespan and timestamp properties, which were missing.

This pull request is trying to merge into master!


KOGITO-3718: Importing DMN as Included Model in VS Code on Windows

After analysing this issue more carefully, the issue was that, on Windows, the extension was not correctly identifying the current directory of the open file, and it was always falling back to the root of the Workspace.
A workaround for this issue is to always work on the root folder of the Workspace. Keep in mind that even after this fix, only DMNs on the same folder can be used as Included Models.

@danielzhe can you please. help us test this?

@danielzhe can you please. help us test this?

@jomarko Thanks for the review! VS Code does not provide an easy way for us to unit-test it, so we would have to rely on heavy mocking to write them at the moment. We're researching what's the best way to approach unit tests for our VS Code Extension yet, but so far we don't have anything in place. This is something very important that will be addressed as soon as we have the resources to do so.

@jomarko Thanks for the review! VS Code does not provide an easy way for us to unit-test it, so we would have to rely on heavy mocking to write them at the moment. We're researching what's the best way to approach unit tests for our VS Code Extension yet, but so far we don't have anything in place. This is something very important that will be addressed as soon as we have the resources to do so.


JSON aggregation UDF crashing

This function used in a CV is causing a crash:
create or replace function jsonb_element_bigint_agg_state(acc jsonb, elem jsonb)
returns jsonb language sql as $$
select  json_object_agg(key,value)::jsonb
from (  select  key, sum(value) as value
        from (  select  key, value::bigint as value
                from    jsonb_each_text(acc)
                union all
                select  key, value::bigint as value
                from    jsonb_each_text(elem) ) x
        group by 1) y;
$$;

create aggregate jsonb_element_bigint_agg(jsonb) (
    stype = jsonb,
    initcond = '{}',
    sfunc = jsonb_element_bigint_agg_state
);

pipeline: bgworker: worker0 [pipeline]   (_start+0x29)[0x4672c9]
LOG:  worker process: worker0 [pipeline] (PID 75728) exited with exit code 1
LOG:  starting background worker process "worker0 [pipeline]"
LOG:  continuous query process "worker0 [pipeline]" running with pid 75729
ERROR:  invalid memory alloc request size<PHONE_NUMBER>
STATEMENT:  view_vbylevel3
ERROR:  invalid memory alloc request size<PHONE_NUMBER>
STATEMENT:  view_cbylevel2slicer
ERROR:  invalid memory alloc request size<PHONE_NUMBER>
STATEMENT:  view_vbylevel4
ERROR:  invalid memory alloc request size<PHONE_NUMBER>
STATEMENT:  view_cbylevel4slicer
Segmentation fault (PID 75729)
version: PipelineDB master at revision unknown on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010, 64-bit
backtrace:
pipeline: bgworker: worker0 [pipeline]   (debug_segfault+0x28)[0x5edd18]
/lib/x86_64-linux-gnu/libc.so.6(+0x352f0)[0x7fe2ffa292f0]
/lib/x86_64-linux-gnu/libc.so.6(+0xa00c4)[0x7fe2ffa940c4]
pipeline: bgworker: worker0 [pipeline]   (appendBinaryStringInfo+0x26)[0x5c2d16]
pipeline: bgworker: worker0 [pipeline]   (UnpackTupleDesc+0x40)[0x500d00]
pipeline: bgworker: worker0 [pipeline]   (IterateStreamScan+0xda)[0x6387ea]
pipeline: bgworker: worker0 [pipeline]   [0x5b9991]
pipeline: bgworker: worker0 [pipeline]   (ExecScan+0x2c6)[0x5a4406]
pipeline: bgworker: worker0 [pipeline]   (ExecProcNode+0xed)[0x59cfcd]
pipeline: bgworker: worker0 [pipeline]   (ExecAgg+0x1ec)[0x5a97cc]
pipeline: bgworker: worker0 [pipeline]   (ExecProcNode+0x428)[0x59d308]
pipeline: bgworker: worker0 [pipeline]   (ExecutePlan+0xad)[0x59b65d]
pipeline: bgworker: worker0 [pipeline]   (ContinuousQueryWorkerMain+0x176)[0x634fc6]
pipeline: bgworker: worker0 [pipeline]   [0x633a34]
pipeline: bgworker: worker0 [pipeline]   (StartBackgroundWorker+0x1b5)[0x63f1d5]
pipeline: bgworker: worker0 [pipeline]   [0x64b319]
pipeline: bgworker: worker0 [pipeline]   [0x46657f]
pipeline: bgworker: worker0 [pipeline]   (PostmasterMain+0xeba)[0x64ce5a]
pipeline: bgworker: worker0 [pipeline]   (main+0x40b)[0x46724b]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7fe2ffa14a40]
pipeline: bgworker: worker0 [pipeline]   (_start+0x29)[0x4672c9]
LOG:  worker process: worker0 [pipeline] (PID 75729) exited with exit code 1
LOG:  starting background worker process "worker0 [pipeline]"
LOG:  continuous query process "worker0 [pipeline]" running with pid 75730
ERROR:  invalid memory alloc request size<PHONE_NUMBER>
STATEMENT:  view_vbylevel3
ERROR:  invalid memory alloc request size<PHONE_NUMBER>
STATEMENT:  view_cbylevel2slicer
ERROR:  invalid memory alloc request size<PHONE_NUMBER>
STATEMENT:  view_vbylevel4
ERROR:  invalid memory alloc request size<PHONE_NUMBER>
STATEMENT:  view_cbylevel4slicer
Segmentation fault (PID 75730)
version: PipelineDB master at revision unknown on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010, 64-bit
backtrace:
pipeline: bgworker: worker0 [pipeline]   (debug_segfault+0x28)[0x5edd18]
/lib/x86_64-linux-gnu/libc.so.6(+0x352f0)[0x7fe2ffa292f0]
/lib/x86_64-linux-gnu/libc.so.6(+0xa00c4)[0x7fe2ffa940c4]
pipeline: bgworker: worker0 [pipeline]   (appendBinaryStringInfo+0x26)[0x5c2d16]
pipeline: bgworker: worker0 [pipeline]   (UnpackTupleDesc+0x40)[0x500d00]
pipeline: bgworker: worker0 [pipeline]   (IterateStreamScan+0xda)[0x6387ea]
pipeline: bgworker: worker0 [pipeline]   [0x5b9991]
pipeline: bgworker: worker0 [pipeline]   (ExecScan+0x2c6)[0x5a4406]
pipeline: bgworker: worker0 [pipeline]   (ExecProcNode+0xed)[0x59cfcd]
pipeline: bgworker: worker0 [pipeline]   (ExecAgg+0x1ec)[0x5a97cc]
pipeline: bgworker: worker0 [pipeline]   (ExecProcNode+0x428)[0x59d308]
pipeline: bgworker: worker0 [pipeline]   (ExecutePlan+0xad)[0x59b65d]
pipeline: bgworker: worker0 [pipeline]   (ContinuousQueryWorkerMain+0x176)[0x634fc6]
pipeline: bgworker: worker0 [pipeline]   [0x633a34]
pipeline: bgworker: worker0 [pipeline]   (StartBackgroundWorker+0x1b5)[0x63f1d5]
pipeline: bgworker: worker0 [pipeline]   [0x64b319]
pipeline: bgworker: worker0 [pipeline]   [0x46657f]
pipeline: bgworker: worker0 [pipeline]   (PostmasterMain+0xeba)[0x64ce5a]
pipeline: bgworker: worker0 [pipeline]   (main+0x40b)[0x46724b]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7fe2ffa14a40]
pipeline: bgworker: worker0 [pipeline]   (_start+0x29)[0x4672c9]
LOG:  worker process: worker0 [pipeline] (PID 75730) exited with exit code 1
LOG:  starting background worker process "worker0 [pipeline]"
LOG:  continuous query process "worker0 [pipeline]" running with pid 75731
ERROR:  invalid memory alloc request size<PHONE_NUMBER>
STATEMENT:  view_vbylevel3
ERROR:  invalid memory alloc request size<PHONE_NUMBER>
STATEMENT:  view_cbylevel2slicer
ERROR:  invalid memory alloc request size<PHONE_NUMBER>
STATEMENT:  view_vbylevel4
ERROR:  invalid memory alloc request size<PHONE_NUMBER>
STATEMENT:  view_cbylevel4slicer
Segmentation fault (PID 75731)
version: PipelineDB master at revision unknown on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010, 64-bit
backtrace:
pipeline: bgworker: worker0 [pipeline]   (debug_segfault+0x28)[0x5edd18]
/lib/x86_64-linux-gnu/libc.so.6(+0x352f0)[0x7fe2ffa292f0]
/lib/x86_64-linux-gnu/libc.so.6(+0xa00c4)[0x7fe2ffa940c4]
pipeline: bgworker: worker0 [pipeline]   (appendBinaryStringInfo+0x26)[0x5c2d16]
pipeline: bgworker: worker0 [pipeline]   (UnpackTupleDesc+0x40)[0x500d00]
pipeline: bgworker: worker0 [pipeline]   (IterateStreamScan+0xda)[0x6387ea]
pipeline: bgworker: worker0 [pipeline]   [0x5b9991]
pipeline: bgworker: worker0 [pipeline]   (ExecScan+0x2c6)[0x5a4406]
pipeline: bgworker: worker0 [pipeline]   (ExecProcNode+0xed)[0x59cfcd]
pipeline: bgworker: worker0 [pipeline]   (ExecAgg+0x1ec)[0x5a97cc]
pipeline: bgworker: worker0 [pipeline]   (ExecProcNode+0x428)[0x59d308]
pipeline: bgworker: worker0 [pipeline]   (ExecutePlan+0xad)[0x59b65d]
pipeline: bgworker: worker0 [pipeline]   (ContinuousQueryWorkerMain+0x176)[0x634fc6]
pipeline: bgworker: worker0 [pipeline]   [0x633a34]
pipeline: bgworker: worker0 [pipeline]   (StartBackgroundWorker+0x1b5)[0x63f1d5]
pipeline: bgworker: worker0 [pipeline]   [0x64b319]
pipeline: bgworker: worker0 [pipeline]   [0x46657f]
pipeline: bgworker: worker0 [pipeline]   (PostmasterMain+0xeba)[0x64ce5a]
pipeline: bgworker: worker0 [pipeline]   (main+0x40b)[0x46724b]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7fe2ffa14a40]
pipeline: bgworker: worker0 [pipeline]   (_start+0x29)[0x4672c9]
LOG:  worker process: worker0 [pipeline] (PID 75731) exited with exit code 1
LOG:  starting background worker process "worker0 [pipeline]"
LOG:  continuous query process "worker0 [pipeline]" running with pid 75732
ERROR:  invalid memory alloc request size<PHONE_NUMBER>
STATEMENT:  view_vbylevel3
ERROR:  invalid memory alloc request size<PHONE_NUMBER>
STATEMENT:  view_cbylevel2slicer
ERROR:  invalid memory alloc request size<PHONE_NUMBER>
STATEMENT:  view_vbylevel4
ERROR:  invalid memory alloc request size<PHONE_NUMBER>
STATEMENT:  view_cbylevel4slicer
Segmentation fault (PID 75732)

This should illustrate what's currently happening as well as sort of what I'd expect to happen using a more conventional table.
drop stream test_stream cascade;
drop table test_table cascade;

create stream test_stream (key integer, values jsonb);
create continuous view test_stream_agg as select key, jsonb_element_bigint_agg(values) from test_stream group by key;
insert into test_stream (key, values) values (1, '{"a": 1}'::jsonb);
insert into test_stream (key, values) values (1, '{"a": 1}'::jsonb);
select * from test_stream_agg;

create table test_table (key integer, values jsonb);
create view test_table_agg as select key, jsonb_element_bigint_agg(values) from test_table group by key;
insert into test_table (key, values) values (1, '{"a": 1}'::jsonb);
insert into test_table (key, values) values (1, '{"a": 1}'::jsonb);
select * from test_table;
select * from test_table_agg;

@jbylund this should be fixed in master now. Note that the SQL-based prototype for this JSON aggregation is likely going to be pretty slow, but it should at least work now.
We're going to prototype a C-based solution to aggregating many columns. Feel free to provide any input on the issue: #1371


[Equalizer] Equalizer return empty arrays as heights in tabs

Data equalizer returns a list of empty arrays when data equalizers are being used in tabs that not having 'is-active' by default.
To replicate the error, please construct a multiple tabs html, and place content with data-equalizer on second or third tab and set first tab with 'is-active'
What did you expect to happen?
Data equalizer works on when tab is activated.
What happened instead?
Heights of data equalizers item are not equalized, requiring user to resize the window to trigger the data-equalizer to work again.

If you want your tabs to be equal height, set the attribute data-match-height to true in your markup. No need to bring Equalizer into it :smile:

Looks like this is solved, so i'll close this.


Added missing -r flag in pip command

The pip install command was missing "-r" flag resulting in the follow error message:
ERROR: Could not find a version that satisfies the requirement dev-requirements.txt (from versions: none)
ERROR: No matching distribution found for dev-requirements.txt

This commit fixed this error.

Thanks! Looks good to me.


Support --user (custom value or buildkite-agent)

Hey there!
I've been wrestling with the best way to handle mounted volumes from the host. When Docker runs as root (id=0), the files it writes to the mounted volume are owned by root. Buildkite fails with a permissions error on any remaining files when it goes to git clean the repo on the next job.
On buildkite-agent@2, I was getting around this with a pre-command hook that ran export UID and then a user: $UID property in my docker-compose.yml file. I noticed that with the plugin, this variable is not exposed to the plugin script and compose treats it as missing.
I'd love to be able to either specify a user through the plugin or ideally instruct the plugin to pass the user ID who executed it.
I haven't thought about an API for this, just wanted to get my thoughts down and see if you'd considered this.
Thanks!

Would something like https://github.com/buildkite-plugins/docker-buildkite-plugin/pull/2 provide a short-term solution?

I don't think passing UID at runtime addresses this, if that's what you're thinking. This is specifically the docker(-compose) run --user option or services.*.user in the YAML file.

Ah right, apologies, I was assuming you were passing in UID and GID as env and then using chown internally. Sorry! 😰
We can easily support --user.
Out of interest, have you tried the userns stuff as an alternative? https://docs.docker.com/engine/security/userns-remap/

I did check out userns when I was exploring this stuff today! I instinctively ignored it since it's at the daemon level. Might work in my setup, not too many other things use Docker on those instances at the moment, but it could cause other problems I guess.
For now I just exposed env vars and the agent binary into the container since that'll work anywhere. Figured it was better to be explicit than go changing global Docker settings.

Is there a work around for this in the meantime?

Work around for us using the buildkite-agent v3 is to use a pre-command hook and set an env var to the UID of the user running the agent with id -u. Then specifying this inside our docker-compose.yml

I don't need this anymore so I'm gonna close it out


get_global_mouse_position() updates delayed after initial tap

Godot version
v4.1.2.stable.official [399c9dc39], v4.2.beta3.official [e8d57afae]
System information
Android, Galaxy Tab S6 Lite
Issue description
Hey all,
I have encountered a weird bug on android. I want to make a handwriting app. But when it comes to drawing, weird stuff happens:
When touching and drawing with the pen, event.position, get_global_mouse_position() and get_viewport().get_mouse_position() return the correct position of the event, but while dragging, the next position has a 12px position from the initial tap. After that, the position updates just fine. This is't ideal for handwriting obviously.
This happens in godot 4.1.2 and 4.2 beta (using the beta, because some tablet stuff got optimised there)
The Tablet is a Samsung Galaxy Tab S6 Lite and it juses the non-bluetooth S-Pen (I'm affraid that it could be caused by the non active - active Pen type)
I don't have any additional devices for testing though.
Steps to reproduce

Just create a new Project on either 4.2 or 4.1.2
Create Node2D and attach script below
Debug on Android (won't work for 4.2 because the android debugger is not working currently see this Issue

Minimal reproduction project
This is the Script that shows the problem. You can see the 12.xx px distance from the first position there. (zipped project bigger than 25MB)
extends Node2D
var activeLine = null
var dist_to_last: float
var last_mouse_pos = Vector2(0,0)
var current_mouse_pos = Vector2(0,0)

func _process(delta):
	if Input.is_action_pressed("mouse_click"):
		current_mouse_pos = get_global_mouse_position()
		dist_to_last = (current_mouse_pos - last_mouse_pos).length()
		if dist_to_last > 1:
			print(dist_to_last)
		last_mouse_pos = current_mouse_pos

i tried PR #84331, the changes are smaller in my test project on tablet and 'stretch' mode
if dist_to_last > 0.1:


Write cloud config and overwrite env variable

See https://centrepopgen.slack.com/archives/C030X7WGFCL/p1702345700581549
When the Hail Batch wrapper was migrated from production-pipelines to cpg-utils we removed one function call that seemed unnecessary. The final action when creating a batch was to make a config file and write to a cloud location.
It turns out this is pretty important - Analysis-runner generates one combined config from all the CLI file paths. When cpg-workflows/main.py runs it then combines that AR config with the default config and workflow-specific config, adding all 3 paths to the CPG_CONFIG_PATH env variable (based on local files within production-pipelines).
This missing step (reintroduced by this PR) combines all those 3 files into one config, writes it to a cloud path, then overwrites the env variable with a single path. This is then passed on to all child jobs in the batch.
End product - all child jobs get one config file path they can read remotely, which is a combination of the Driver job config and all workflow-specific configs.

:+1: for “why do we need this” comments

Hmm, I didn’t love the idea of rewriting the config as it does make tracking it back through the analysis runner more difficult.
Can we make it not rewrite if it’s not actually combining this
Happy with this change to resolve the problem, but we should flag this as debt to pay back.


[HOLD #29691] [$125] Request Money - The text "Split bill with" is not translated into Spanish

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Version Number: <IP_ADDRESS>
Reproducible in staging?: y
Reproducible in production?: y
If this was caught during regression testing, add the test name, ID and link from TestRail:
Email or phone of affected tester (no customers):
Logs: https://stackoverflow.com/c/expensify/questions/4856
Expensify/Expensify Issue URL:
Issue reported by: @ayazhussain79
Slack conversation: https://expensify.slack.com/archives/C049HHMV9SM/p1697471385072909
Action Performed:
Action Performed:

Go to the group chat.
Click on the "+" and then click on Split bill.
Enter a specific amount and complete the flow.
Change the language to Spanish.
Click on the sent split bill and then click on "Show more"
Check the Merchant value.

Expected Result:
The text "Split bill with" should be translated into Spanish
Actual Result:
The text "Split bill with" is not translated into Spanish
Workaround:
Unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[x] MacOS: Desktop

Screenshots/Videos

Android: Native

https://github.com/Expensify/App/assets/93399543/2bfebd77-2536-489b-bfd8-56f13cb783b4

Android: mWeb Chrome

https://github.com/Expensify/App/assets/93399543/5091ed17-efe1-4bfd-85c1-b86395a13805

iOS: Native

https://github.com/Expensify/App/assets/93399543/bd43ea3b-a21a-4fd2-8e2b-942d4e5f0c8a

iOS: mWeb Safari

https://github.com/Expensify/App/assets/93399543/640a8fe4-d69a-4bb6-ac50-a28cda5ba988

MacOS: Chrome / Safari

https://github.com/Expensify/App/assets/93399543/993dbcd9-f450-4a0a-8d84-6a8fc5fbecee
https://github.com/Expensify/App/assets/93399543/fd377986-0673-4e63-b19a-26b3d87f4e66

MacOS: Desktop

https://github.com/Expensify/App/assets/93399543/18a65f0d-cd64-4369-be68-f879338f63d9

View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~019e81ce43efa73a84
Upwork Job ID:<PHONE_NUMBER>487788032
Last Price Increase: 2023-10-19

Proposal
Please re-state the problem that we are trying to solve in this issue.
Split bill details merchant is not translated
What is the root cause of that problem?
This is due to the split bill merchant created and saved using the user's preferred locale here
const splitTransaction = TransactionUtils.buildOptimisticTransaction(
        amount,
        currency,
        CONST.REPORT.SPLIT_REPORTID,
        comment,
        '',
        '',
        '',
        `${Localize.translateLocal('iou.splitBill')} ${Localize.translateLocal('common.with')} ${formattedParticipants} [${DateUtils.getDBTime().slice(0, 10)}]`,
        undefined,
        undefined,
        undefined,
        category,
        formattedParticipants,
    );

This means that whatever language was set during the creation of that transaction will be used from now as Merchant, anywhere.
What changes do you think we should make in order to solve the problem?
I suggest generating the Split bill merchant dynamically on the form the front end as the following.
In the SplitBillDetails component, we create the merchant string with
const merchant = ${props.translate('iou.splitBill')} ${props.translate('common.with')} ${arrayToString( _.map(participants, (participant) => participant.login || ''))}``
This will ensure the text is translated correctly, instead of relying on a hard-coded value.

What alternative solutions did you explore? (Optional)
N/A

Proposal from @abdel-h66 looks good to me https://github.com/Expensify/App/issues/29713#issuecomment-1765230901
🎀 👀 🎀 C+ reviewed

The mentioned issue focuses on modifying the value before the save. This one happens when no changes are made by the user and the merchant is automatically generated.

So is the merchant for a split transaction ALWAYS bill split with [participants]? Or can it be custom? We wouldn't want to override it here (which is what the proposal is, unless I'm misunderstanding) if it COULD be something else. But if it can't be, then @abdel-h66's idea works for me!

Good catch ! I just double checked. even when the user changes the merchant, that value is never taken into account. Maybe we could fix that too at the same time.

Good catch ! I just double checked. even when the user changes the merchant, that value is never taken into account. Maybe we could fix that too at the same time.

Cool. I'm going to bring this up internally for a quick discussion - your solution matches current expected behavior, which is great, but if we decide to allow custom merchants in the future, it's going to be hard to figure out what's going on. So I'm gonna see if I can get a sense of if that's ever on the roadmap or not. (To be clear - this is NOT an issue with your proposal, so don't worry! I think it just might be something people haven't thought about yet.)

@dangrous I think we can close this, we're deprecating the "Bill split with..." merchant name, we'll be using the default one "Request" or whatever the user has entered.

okay got it - will that update not have the same translation issues? If so, that's great!

ah good point, I think the issue will persist, so I guess we need to handle the translation when creating a manual request or split and translate Request into Spanish if needed. Since I'm working on allowing this for split, I'll include this change in the PR for both requests and splits. Sounds good?

Actually @dangrous, I think I'll leave this out of the scope of my PR, as we use the default merchant "Request" to also decide whether we should show the merchant or not https://github.com/Expensify/App/blob/18acd82f40153fc1e5091aea3217c532142e500e/src/components/ReportActionItem/MoneyRequestPreview.js#L171

Okay cool - we'll hold on your PR and then retest/reevaluate afterwards to figure out next steps!

Not overdue, on hold

The backend PR for #29691 has been merged, I need to figure out whether or not there's a front end fix needed as well. Once we know that, we can get this one going again and revamp proposals based on the changes!

Checking in on that held issue, we might be able to take another look at this shortly

Still waiting to hear whether or not #29691 is fully complete and we can take this off of hold

@dangrous will report back here today!

Looks like we're waiting on an App and a Web-E PR to finish #29691 and then we should be ready to move forward

Still on hold, looks like most of the PRs are merged so we should be able to get going shortly

Still waiting on linked issue

Not overdue, still on hold

I'm going to make this weekly while we're waiting.

Still waiting on held issue

Still on hold

Still on hold

Okay I believe we're off hold here, as #29691 has been deployed! We should retest and update any proposals based on the new changes cc @abdel-h66 since you were working on it (long ago!) before the hold.

I can't reproduce

Yeah I'm also not seeing this. I think we can close out - was this before/after the reporting bonus change, @kevinksullivan ? Let me know what you think (and if you could double check that you're unable to reproduce too, that would be awesome!)

bump when you have time to confirm we can close this - thanks @kevinksullivan!

Issue not reproducible during KI retests. (First week)


Filter changes for ontology search

From @thomaspd

Amigo2, for ontology (http://amigo.geneontology.org/amigo/search/ontology):

Remove Ancestor filtering item— I don’t see a use case for it.

OK, let's do this for now. It's overwhelming. But I think there is a use case for having some high level subset in there. For example to see all behavior, or all cellular process. This is analogous to #247
There is also some discussion of this buried in this (closed) ticket:
https://github.com/geneontology/amigo/issues/186#issuecomment-95358518

Filter out all ontology sources, except for the GO, by default (though user can of course remove the filters)

I thought we had a ticket for this, but can't find it.

Filter out all obsolete=true terms by default (though user can remove it).  Obsoletion should be renamed to Obsoletion status.

+1

The fix for the default idspace filtering was a little more involved as it needed to be generalized to non-GO situations, but puts to use our new idspace information.


Average strike and dip measurements

Is your feature request related to a problem? Please describe.
Taking an average may speed up compass and app instead of displaying every reading.
Describe the solution you'd like
Would like to take an average of 5 readings that make up the strike and dip.

completed with commit a9bef5c875a280aa45a831bf84695b46b78de103


Is there any plan to publish this library to npm?

Hi
Is there any plan to publish this library to npm?

That would be nice

We can, but the library has issues and have been waiting until we felt they were largely resolved. Are you using this in any application today?

I am currently doing some POC for my project at the moment. After doing some research, it appears that this is the only library that is open source and works nicely so far. That is why I wonder if this library can be published to npm.

If you can confirm a supportable use case that the library is working for I would be happy to package it up in support of that use case.

My use case is to scan driver license number. In addition, I am curious about the issues you mentioned above.

The library is currently only able, to the best of our knowledge, scan very high res, well taken images, this limits its utility substantially

Any updates on this issue? I am looking to use this for scanning driver's license numbers, do you think it's in good enough condition for this or should i write my own?

You will have problems with low resolution cameras.

Yeah, I noticed when testing.
Though I'd argue that despite this we should still get it on NPM because there basically is no other solution, and publishing it might attract some open source developers to contribute to and improve the library.
I myself might put in some work in the next couple months, though I am currently morbidly busy.
So in the end, would you mind publishing it?

Yeah, I noticed when testing.
Though I'd argue that despite this we should still get it on NPM because there basically is no other solution, and publishing it might attract some open source developers to contribute to and improve the library.
I myself might put in some work in the next couple months, though I am currently morbidly busy.
So in the end, would you mind publishing it?

I do intend to have this redone in typescript, along with other improvements. Until then I don’t see a good justification for publishing to npm.


How can I activate this extension?

It doesn't work. All requirements are completed - Node.js is installed

That's strange; I'm sorry. Does it show any message?


Git Commit Loader Options

Is your feature request related to a problem? Please describe.
My use case is; a cron job that trains on a git repo. I'm using git commit loader rather than file loader (not entirely sure if this is best for me).
The main thing for me is iteratively adding documents to a vector store, rather than once and done.
Describe the solution you'd like
I'd love to filter which commits are loaded, similar to how I can filter for only files of certain extensions. In my specific scenario I'd only like to load commits I've not seen before.
Describe alternatives you've considered
A generic filter/lambda type function that allows developers to plug in their own conditions on whether a commit should be loaded.

I think providing our own filter, that we could plugin here would be ideal: https://github.com/Abraxas-365/langchain-rust/blob/main/src/document_loaders/git_commit_loader/git_commit_loader.rs#L45

Also letting the user do their own mapping might be beneficial. I'm working on a PR that does both.

I've updated the PR (it's a work in progress still as I struggle my way through rust's compiler).
The PR/ticket now is to;

Update document loader such that a user can pass in their own filter and map functions
This allows the user much more flexibility when it comes to how they want to upload documents to the vector store.

Current issue I'm facing is (and many others similar rooting from Repo fields are not Send nor Sync)
`RefCell<Vec<Vec<u8>>>` cannot be shared between threads safely within `gix::Repository`, the trait `Sync` is not implemented for `RefCell<Vec<Vec<u8>>>`, which is required by `gix::revision::walk::Info<'_>: std::marker::Send`
if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` instead required for `&gix::Repository` to implement `std::marker::Send`


[SPIKE] As an open source community member, I want to better understand traffic patterns to the GitHub repository, so I can understand what's driving engagement with the codebase.

Description
GitHub has interesting traffic data available by default, but it is limited in a few ways: there's only a limited subset of functionality and it only shows data for 2 weeks.
However, all of this data is available over API. Some people have built tools to download and visualize that data via the GitHub APIs.  These include https://yhype.me and https://github.com/jgehrcke/github-repo-stats (see StackOverflow thread).
Another approach is to authorize a third-party app like https://repo-analytics.github.io/, but this requires granting a high level of access to the repo.
A third general approach is to embed Google Analytics code in the README.me, but that only tracks certain files and has its own limitations and challenges. See discussion in this thread.

@lucasmbrown-usds - seems like yhype might have the lowest lift in terms of set up. Out of curiosity, let's say we had those plots over time (advanced analytics not provided by Github), what could that inform us of?


[OSPRH-8065] Change autoscaling TLS condition

Change the condition for which Prometheus to use for autoscaling.
I noticed the status of autoscaling wasn't being set to Ready when trying to use user-deployed prometheus while having the MetricStorage disabled. It'd wrongly try to get a MetricStorage, which wasn't there and set the error into the status.
Now we're using a better condition. We're looking for MetricStorages only when we're using a MetricStorage Prometheus. When using a user-deployed Prometheus, we aren't looking at MetricStorage.

recheck
The MetricStorage status isn't "Ready" in default-telemetry after COO was installed. But it's ready by the time must-gather runs. Seems like a timing issue. It it happens more often, we can increase the wait time.