Footer (no email sign-up) - BE

Link to Ticket
Description of Changes Made
This implements the backend for the footer in accordance with the new designs.

Note
The footer design includes an email sign-up form, but this PR doesn't cover it, as it is a feature that's still being reviewed and will possibly be implemented at a later stage

Key changes

Remove links from footer logos
Update the Contact model, its factory and tests
Configure footer contact at page level, similar to the way the colour theme is implemented
Update the footer templates and pattern library
Update the docs

How to Test
Please see screenshots / illustrations below
Screenshots

Default Contact Snippet

Footer logos & footer links

Define contact for specific page(s)
https://github.com/torchbox/torchbox.com/assets/7713776/b6a5f9bb-af9e-482c-ae4b-bc71cba1c66b

Pattern library

MR Checklist

[x] Add a description of your pull request and instructions for the reviewer to verify your work.
[x] If your pull request is for a specific ticket, link to it in the description.
[x] Stay on point and keep it small so the merge request can be easily reviewed.
[x] Tests and linting passes.

Unit tests

[x] Added
[ ] Not required

Documentation

[x] Updated build docs
[x] Updated editor guidelines (https://docs.google.com/document/d/1PAWccdQ4tfaZsrEWmpDhvP3GH5RRmBOARFVp4b-kje8/edit?usp=sharing)
[ ] Not required

Browser testing

[x] I have tested in the following browsers and environments (edit the list as required)

Latest version of Chrome on Linux
Latest version of Firefox on Linux

[ ] Not required

Data protection

[x] Not relevant
[ ] This adds new sources of PII and documents it and modifies Birdbath processors accordingly

Accessibility

[ ] Automated WCAG 2.1 tests pass
[ ] Manual WCAG 2.1 tests completed
[ ] I have tested in a screen reader
[ ] I have tested in high-contrast mode
[ ] Any animations removed for prefers-reduced-motion
[x] Not required

Sustainability

[ ] Images are optimised and lazy-loading used where appropriate
[ ] SVGs have been optimised
[x] Perfomance and transfer of data considered
[ ] If JavaScript is needed alternatives have been considered
[ ] Not required

Pattern library

[x] The pattern library component for this template displays correctly, and does not break parent templates
[ ] The styleguide is updated if relevant
[ ] Changes are not relevant the pattern library

Comment: I presume that the different page subtypes means it's not possible to use annotations here to avoid n+1 queries. You could however try this loop while comparing contact_id, which would at least avoid fetching the object until you settled on the correct one. On the other hand, if you want to return the first one you find, maybe it's not going to result in any extra queries.

I have updated the footer_contact property in 07cadd4. In the snippet below, footer_contact is the previous version, and footer_contact_improved is the updated version, which has some slight perfomance improvements, as seen from the results of the tests described further below.

    @cached_property
    def footer_contact(self):
        """
        Use the page's own contact if set, otherwise, derive the contact from
        its ancestors, and finally fall back to the default contact.

        NOTE: if, for some reason, a default contact doesn't exist, this will
        return None, in which case, we'll not display the block in the footer template.
        """
        if contact := self.contact:
            return contact

        # _in theory_, there should only be one Contact object with default_contact=True.
        # (see `tbx.people.models.Contact.save()`)
        default_contact = Contact.objects.filter(default_contact=True).first()

        try:
            return next(
                p.contact
                for p in self.get_ancestors().specific().order_by("-depth")
                if getattr(p, "contact", None) is not None
            )
        except StopIteration:
            return default_contact

    @cached_property
    def footer_contact_improved(self):
        """
        Use the page's own contact if set, otherwise, derive the contact from
        its ancestors, and finally fall back to the default contact.

        NOTE: if, for some reason, a default contact doesn't exist, this will
        return None, in which case, we'll not display the block in the footer template.
        """
        if contact := self.contact:
            return contact

        ancestors = (
            self.get_ancestors().defer_streamfields().specific().order_by("-depth")
        )
        for ancestor in ancestors:
            if getattr(ancestor, "contact_id", None) is not None:
                return ancestor.contact

        # _in theory_, there should only be one Contact object with default_contact=True.
        # (see `tbx.people.models.Contact.save()`)
        return Contact.objects.filter(default_contact=True).first()

I did some testing to investigate the number of queries (I created a temporary branch experiments/footer-be which has this code):
# tbx/people/tests/test_contact.py
import time

from django.db import connection
from django.test import TestCase

from tabulate import tabulate # pip install tabulate
from tbx.blog.factories import BlogIndexPageFactory, BlogPageFactory
from tbx.core.factories import HomePageFactory, StandardPageFactory
from tbx.people.factories import ContactFactory
from tbx.people.models import Contact
from tbx.work.factories import (
    HistoricalWorkPageFactory,
    WorkIndexPageFactory,
    WorkPageFactory,
)
from wagtail.models import Site

class QueryLogger:
    # Reference: https://docs.djangoproject.com/en/4.2/topics/db/instrumentation/
    def __init__(self):
        self.queries = []

    def __call__(self, execute, sql, params, many, context):
        current_query = {"sql": sql, "params": params, "many": many}
        start = time.monotonic()
        try:
            result = execute(sql, params, many, context)
        except Exception as e:
            current_query["status"] = "error"
            current_query["exception"] = e
            raise
        else:
            current_query["status"] = "ok"
            return result
        finally:
            duration = time.monotonic() - start
            current_query["duration"] = duration
            self.queries.append(current_query)

    def render(self):
        if self.queries:
            # Add a counter column
            for i, d in enumerate(self.queries, start=1):
                d["Query №"] = i

            headers = self.queries[0].keys()
            rows = [[row[header] for header in headers] for row in self.queries]

            print(tabulate(rows, headers=headers, tablefmt="pipe"))

        else:
            print(f"{len(self.queries)} queries\n\n")

class TestContact(TestCase):
    def setUp(self):
        super().setUp()

        site = Site.objects.get(is_default_site=True)
        root = site.root_page.specific
        self.home = HomePageFactory(parent=root)

        site.root_page = self.home
        site.save()

        self.blogindex = BlogIndexPageFactory(title="Blog", parent=self.home)
        self.workindex = WorkIndexPageFactory(title="Work", parent=self.home)
        self.contact = ContactFactory(cta={"link_type": "email"})

    # .... other tests ....
    # .....................

    def test_queries(self):
        self.home.contact = self.contact
        self.home.save()
        self.home.refresh_from_db()
        jane_doe = ContactFactory(name="Jane Doe", cta={"link_type": "external_link"})
        work = HistoricalWorkPageFactory(parent=self.workindex, contact=jane_doe)

        # -------------------------------------------------
        # with self.assertNumQueries(5):
        #     self.workindex.footer_contact

        ql = QueryLogger()
        with connection.execute_wrapper(ql):
            self.workindex.footer_contact
        print("### 1. self.workindex.footer_contact\n\n")
        ql.render()

        # -------------------------------------------------
        # with self.assertNumQueries(4):
        #     self.workindex.footer_contact_improved

        ql = QueryLogger()
        with connection.execute_wrapper(ql):
            self.workindex.footer_contact_improved
        print("### 2. self.workindex.footer_contact_improved\n\n")
        ql.render()

        # -------------------------------------------------
        # with self.assertNumQueries(0):
        #     work.footer_contact

        ql = QueryLogger()
        with connection.execute_wrapper(ql):
            work.footer_contact
        print("### 3. work.footer_contact\n\n")
        ql.render()

        # -------------------------------------------------
        # with self.assertNumQueries(0):
        #     work.footer_contact_improved

        ql = QueryLogger()
        with connection.execute_wrapper(ql):
            work.footer_contact_improved
        print("### 4. work.footer_contact_improved\n\n")
        ql.render()

The results:
1. self.workindex.footer_contact

sql
params
many
status
duration
Query №

SELECT "people_contact"."id", "people_contact"."title", "people_contact"."text", "people_contact"."cta", "people_contact"."name", "people_contact"."role", "people_contact"."image_id", "people_contact"."default_contact" FROM "people_contact" WHERE "people_contact"."default_contact" ORDER BY "people_contact"."id" ASC LIMIT 1
()
False
ok
7.5607e-05
1

SELECT "wagtailcore_page"."id", "wagtailcore_page"."content_type_id" FROM "wagtailcore_page" WHERE ("wagtailcore_page"."path" IN (%s, %s, %s, %s) AND NOT ("wagtailcore_page"."id" = %s)) ORDER BY "wagtailcore_page"."depth" DESC
('0001', '00010001', '000100010001', '0001000100010002', 91)
False
ok
0.000135567
2

SELECT "wagtailcore_page"."id", "wagtailcore_page"."path", "wagtailcore_page"."depth", "wagtailcore_page"."numchild", "wagtailcore_page"."translation_key", "wagtailcore_page"."locale_id", "wagtailcore_page"."latest_revision_id", "wagtailcore_page"."live", "wagtailcore_page"."has_unpublished_changes", "wagtailcore_page"."first_published_at", "wagtailcore_page"."last_published_at", "wagtailcore_page"."live_revision_id", "wagtailcore_page"."go_live_at", "wagtailcore_page"."expire_at", "wagtailcore_page"."expired", "wagtailcore_page"."locked", "wagtailcore_page"."locked_at", "wagtailcore_page"."locked_by_id", "wagtailcore_page"."title", "wagtailcore_page"."draft_title", "wagtailcore_page"."slug", "wagtailcore_page"."content_type_id", "wagtailcore_page"."url_path", "wagtailcore_page"."owner_id", "wagtailcore_page"."seo_title", "wagtailcore_page"."show_in_menus", "wagtailcore_page"."search_description", "wagtailcore_page"."latest_revision_created_at", "wagtailcore_page"."alias_of_id", "torchbox_homepage"."page_ptr_id", "torchbox_homepage"."social_image_id", "torchbox_homepage"."social_text", "torchbox_homepage"."theme", "torchbox_homepage"."contact_id", "torchbox_homepage"."hero_intro_primary", "torchbox_homepage"."hero_intro_secondary", "torchbox_homepage"."intro_body", "torchbox_homepage"."work_title", "torchbox_homepage"."blog_title", "torchbox_homepage"."clients_title" FROM "torchbox_homepage" INNER JOIN "wagtailcore_page" ON ("torchbox_homepage"."page_ptr_id" = "wagtailcore_page"."id") WHERE "torchbox_homepage"."page_ptr_id" IN (%s) ORDER BY "wagtailcore_page"."path" ASC
(89,)
False
ok
0.000273931
3

SELECT "wagtailcore_page"."id", "wagtailcore_page"."path", "wagtailcore_page"."depth", "wagtailcore_page"."numchild", "wagtailcore_page"."translation_key", "wagtailcore_page"."locale_id", "wagtailcore_page"."latest_revision_id", "wagtailcore_page"."live", "wagtailcore_page"."has_unpublished_changes", "wagtailcore_page"."first_published_at", "wagtailcore_page"."last_published_at", "wagtailcore_page"."live_revision_id", "wagtailcore_page"."go_live_at", "wagtailcore_page"."expire_at", "wagtailcore_page"."expired", "wagtailcore_page"."locked", "wagtailcore_page"."locked_at", "wagtailcore_page"."locked_by_id", "wagtailcore_page"."title", "wagtailcore_page"."draft_title", "wagtailcore_page"."slug", "wagtailcore_page"."content_type_id", "wagtailcore_page"."url_path", "wagtailcore_page"."owner_id", "wagtailcore_page"."seo_title", "wagtailcore_page"."show_in_menus", "wagtailcore_page"."search_description", "wagtailcore_page"."latest_revision_created_at", "wagtailcore_page"."alias_of_id" FROM "wagtailcore_page" WHERE "wagtailcore_page"."id" IN (%s, %s) ORDER BY "wagtailcore_page"."path" ASC
(2, 1)
False
ok
0.000169744
4

SELECT "people_contact"."id", "people_contact"."title", "people_contact"."text", "people_contact"."cta", "people_contact"."name", "people_contact"."role", "people_contact"."image_id", "people_contact"."default_contact" FROM "people_contact" WHERE "people_contact"."id" = %s LIMIT 21
(37,)
False
ok
0.000110811
5

2. self.workindex.footer_contact_improved

sql
params
many
status
duration
Query №

SELECT "wagtailcore_page"."id", "wagtailcore_page"."content_type_id" FROM "wagtailcore_page" WHERE ("wagtailcore_page"."path" IN (%s, %s, %s, %s) AND NOT ("wagtailcore_page"."id" = %s)) ORDER BY "wagtailcore_page"."depth" DESC
('0001', '00010001', '000100010001', '0001000100010002', 91)
False
ok
0.000138497
1

SELECT "wagtailcore_page"."id", "wagtailcore_page"."path", "wagtailcore_page"."depth", "wagtailcore_page"."numchild", "wagtailcore_page"."translation_key", "wagtailcore_page"."locale_id", "wagtailcore_page"."latest_revision_id", "wagtailcore_page"."live", "wagtailcore_page"."has_unpublished_changes", "wagtailcore_page"."first_published_at", "wagtailcore_page"."last_published_at", "wagtailcore_page"."live_revision_id", "wagtailcore_page"."go_live_at", "wagtailcore_page"."expire_at", "wagtailcore_page"."expired", "wagtailcore_page"."locked", "wagtailcore_page"."locked_at", "wagtailcore_page"."locked_by_id", "wagtailcore_page"."title", "wagtailcore_page"."draft_title", "wagtailcore_page"."slug", "wagtailcore_page"."content_type_id", "wagtailcore_page"."url_path", "wagtailcore_page"."owner_id", "wagtailcore_page"."seo_title", "wagtailcore_page"."show_in_menus", "wagtailcore_page"."search_description", "wagtailcore_page"."latest_revision_created_at", "wagtailcore_page"."alias_of_id", "torchbox_homepage"."page_ptr_id", "torchbox_homepage"."social_image_id", "torchbox_homepage"."social_text", "torchbox_homepage"."theme", "torchbox_homepage"."contact_id", "torchbox_homepage"."hero_intro_primary", "torchbox_homepage"."hero_intro_secondary", "torchbox_homepage"."intro_body", "torchbox_homepage"."work_title", "torchbox_homepage"."blog_title", "torchbox_homepage"."clients_title" FROM "torchbox_homepage" INNER JOIN "wagtailcore_page" ON ("torchbox_homepage"."page_ptr_id" = "wagtailcore_page"."id") WHERE "torchbox_homepage"."page_ptr_id" IN (%s) ORDER BY "wagtailcore_page"."path" ASC
(89,)
False
ok
0.000252826
2

SELECT "wagtailcore_page"."id", "wagtailcore_page"."path", "wagtailcore_page"."depth", "wagtailcore_page"."numchild", "wagtailcore_page"."translation_key", "wagtailcore_page"."locale_id", "wagtailcore_page"."latest_revision_id", "wagtailcore_page"."live", "wagtailcore_page"."has_unpublished_changes", "wagtailcore_page"."first_published_at", "wagtailcore_page"."last_published_at", "wagtailcore_page"."live_revision_id", "wagtailcore_page"."go_live_at", "wagtailcore_page"."expire_at", "wagtailcore_page"."expired", "wagtailcore_page"."locked", "wagtailcore_page"."locked_at", "wagtailcore_page"."locked_by_id", "wagtailcore_page"."title", "wagtailcore_page"."draft_title", "wagtailcore_page"."slug", "wagtailcore_page"."content_type_id", "wagtailcore_page"."url_path", "wagtailcore_page"."owner_id", "wagtailcore_page"."seo_title", "wagtailcore_page"."show_in_menus", "wagtailcore_page"."search_description", "wagtailcore_page"."latest_revision_created_at", "wagtailcore_page"."alias_of_id" FROM "wagtailcore_page" WHERE "wagtailcore_page"."id" IN (%s, %s) ORDER BY "wagtailcore_page"."path" ASC
(2, 1)
False
ok
0.000171783
3

SELECT "people_contact"."id", "people_contact"."title", "people_contact"."text", "people_contact"."cta", "people_contact"."name", "people_contact"."role", "people_contact"."image_id", "people_contact"."default_contact" FROM "people_contact" WHERE "people_contact"."id" = %s LIMIT 21
(37,)
False
ok
0.000108416
4

3. work.footer_contact
0 queries
4. work.footer_contact_improved
0 queries

I have updated the footer_contact property in 07cadd4. In the snippet below, footer_contact is the previous version, and footer_contact_improved is the updated version, which has some slight perfomance improvements, as seen from the results of the tests described further below.

Wow, that's thorough!
It might not give as much detail, but in case you haven't seen it before, django.test.utils.CaptureQueriesContext already exists to do some of this work in tests. https://github.com/django/django/blob/5.0/django/test/utils.py#L690

3. work.footer_contact
0 queries
4. work.footer_contact_improved
0 queries

Did you mean 5 and 4, respectively?


add seata doc

Describe what this PR does / why we need it
related to issue-2610
Does this pull request fix one issue?

Describe how you did it
Describe how to verify it
Special notes for reviews

This branch cannot be rebased due to conflicts.

This branch cannot be rebased due to conflicts.

solved


Consider removing MIREOT'd term 'symbiosis' and creating our own class

The current definition for the term only incorporates mutualism, commensalism, and parasitism, while we're including all interspecies interactions under the term. Therefore, we should either remove the MIREOT of this term and create our own definition, or move certain terms, such as 'antagonism', so that they're subclasses of 'interspecies interaction between organisms'. Personally, I think we should go with the former of the two options since it requires the least amount of work without sacrificing any consistency with a large portion of the literature and without sacrificing the logical relations between classes. Moreover, I think that this option is preferable to the latter because it allows 'predation' and 'grazing' to be subclasses of 'symbiosis' (although not directly), which quite frankly seems like a rather obvious place for them.

To follow up, here is the link to GO's definition of 'symbiosis': http://www.ontobee.org/ontology/GO?iri=http://purl.obolibrary.org/obo/GO_0044403.
There are a few caveats, I think, with how they define the term, all of which I will outline below:

As stated previously, their definition implies that symbiosis only encompasses mutualism, parasitism, and commensalism (i.e., they're explicitly using the de Bary definition). Unfortunately, this definition ignores predation and grazing, both of which share only subtle dissimilarities with parasitoidism and parasitism, respectively, such that I believe the former two might in fact be subclasses of the latter two. Perhaps a counterargument to this would be that predation and grazing are interactions that lack in intimacy and that the organisms may not live together, although the dubiousness of such a claim is underscored by the fact that neither parameter is defined.

Their definition states that mutualistic, commensalistic, and parasitic interactions are often not discrete categories of interactions, but should rather be perceived as being a continuum of a single interaction. I disagree, on the grounds that there are distinct ontological differences between the interactions of, for example, commensal phenotypes and pathogenic phenotypes of certain species of bacteria that are of great interest to microbiologists who are trying to study these phenotypes.

Their definition precludes other interactions (e.g., amensalism, in which one organism is harmed while the other is unaffected) from being classified as symbiotic, despite there being no logical reason for why they aren't symbioses. For example, sheep trampling grass is an interaction between two organisms that live together in a fairly intimate association, yet while the sheep remain unaffected the grass is killed. This relationship can perhaps acquire a new dimension if the grass is the primary source of food for the sheep, in which case the interaction becomes antagonistic.

Matt, could you propose a new definition of 'symbiosis' that addresses these issues?

Symbiosis = def. "An interspecies interaction between organisms living in some ecosystem in which at least one organism is harmed or benefits."
I was originally going to propose a second, alternative definition that would restrict symbiotic interactions to only those in which the actions of one organism has a direct causal influence on another. Still not sure whether this is an important distinction to make at this level of the hierarchy, though, as it can probably be handled elsewhere in various subclasses (e.g., competition).

If this definition ends up being the one we go with, would this imply that 'interspecies integration between organisms' should be deprecated and replaced with 'symbiosis'? The alternative would be to add a stipulation that 'symbiosis' only encompasses interactions that have a direct influence on another organism, while having a separate class for indirect interactions.
Another possible distinction that might be made is that symbiotic relationships don't seem to occur at the population level, with the exception of interspecies competition and one point of reference for pathogen-host interactions, wherein at least one population of organisms is having an effect on one or more organisms of another species. I have my doubts about this one, though, since our definitions seem to be able to switch from the individual level to the population level easily.


image_viewer SAR image protobuf writer is broken

It seems with the recent changes to protobuf definition locations that the SAR image protobuf writer in image_viewer.py is broken. I get the following error:
Process Process-2:
Traceback (most recent call last):
Traceback (most recent call last):
  File "/usr/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/usr/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/gfoster/ZendarSDK/python/viewer/image_viewer.py", line 216, in visualize_single_radar
    proto_writer.write(proto_out)
  File "/home/gfoster/ZendarSDK/python/viewer/radar_data_streamer.py", line 79, in write
    serial = record.SerializeToString()
  File "/usr/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
google.protobuf.message.EncodeError: Message zen_proto.data.Image is missing required fields: cartesian.data.type
  File "/usr/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/gfoster/ZendarSDK/python/viewer/image_viewer.py", line 216, in visualize_single_radar
    proto_writer.write(proto_out)
  File "/home/gfoster/ZendarSDK/python/viewer/radar_data_streamer.py", line 79, in write
    serial = record.SerializeToString()
google.protobuf.message.EncodeError: Message zen_proto.data.Image is missing required fields: cartesian.data.type
merging video ...
[swscaler @ 0x55a96ef2c960] Warning: data is not aligned! This can lead to a speed loss
Traceback (most recent call last):
  File "/home/gfoster/ZendarSDK/python/viewer/image_viewer.py", line 448, in <module>
    main()
  File "/home/gfoster/ZendarSDK/python/viewer/image_viewer.py", line 129, in main
    combined_frame = cv2.cvtColor(combined_frame, cv2.COLOR_BGR2RGB)
TypeError: Expected Ptr<cv::UMat> for argument '%s```

Commenting out `proto_writer.write(proto_out)` skips over the writing to protobuf to allow videos to be generated.

@ghsyu would know this more than I do.


Configuration of EntraCP "Yvand.EntraCP V25.0.20240503.33"

We host a SharePoint subscription edition and currently using AzureCP authentication. Since Azure CP was deprecated, we are configuring EntraCP version: V25.0.20240503.33. We have the below 2 queries when we follow the blog:https://entracp.yvand.net/docs/usage/installation/
Query1: To configure Proxy for EntraCP, which IP address we need to provide for PROXY Address in the below step:
Add-Type -AssemblyName "Yvand.EntraCP, Version=<IP_ADDRESS>, Culture=neutral, PublicKeyToken=65dc6b5903b51636"
$config = [Yvand.EntraClaimsProvider.EntraCP]::GetConfiguration()
$settings = $config.Settings
$settings.ProxyAddress = "http://localhost:8888"
$config.ApplySettings($settings, $true)
Please also see the screenshot for reference

Query2:	When we are adding Microsoft Entra ID using Client Secret instead of Certificate, do we need to follow the below process mention in the blog.
Configure the proxy for certificate validation#
Screenshot below for reference:

Please provide the response asap, as we have an ongoing issue in the PRODUCTION environment which is using AzureCP authentication. We are looking to replace AzureCP with EntraCP at the earliest

I cannot tell you the IP of your proxy, it completely depends on your environment, if you use a proxy at all.
If the SharePoint servers have a direct access to internet, then you don't use a proxy and you don't need to set it.
Note that it is totally unrelated with the client certificate / client secret you set for the tenant

Hi Yvand, Appreciate your quick responses earlier. Please provide your suggestion on below:
We host a SharePoint subscription edition and currently using AzureCP authentication. Since AzureCP was deprecated, we are planning to configure- EntraCP version: V25.0.20240503.33.
Please suggest if we need to completely remove the AzureCP solution from the SharePoint Farm and then proceed with EntraCP? (or) Can we configure EntraCP keeping Azure CP(not uninstalling the solution but removing as a trusted identity provider from sharepoint).
Will it cause any issues in future if we keep both AzureCP and EntraCP in the farm but only use EntraCP?

@RamParamesh it is not mandatory to remove AzureCP, but I recommend that you properly uninstall it before deploying EntraCP.
Note that both solutions are independent and can run at same time on the farm

Hi Yvand,
We would like to know if there will be any kind of standby support during golive in our environment for EntraCP to assist us incase of any issues.
Please let me know if it is possible to raise any support case with Github for the same. If so, please guide me with the process.

@RamParamesh sorry no, EntraCP is not a commercial product.
It is a completely free, open source project, essentially developped by me, and I do not do it for money.
If you have a problem, feel free to open an issue in the GitHub project, like you did here, and I will do my best to help, but I cannot commit to any sort of engagement


added type="number" seems to fix the issue

This is a quick fix in regards to issue #731

I'm not getting a white screen on staging. So pretty sure this was already fixed.

Ok, it must only be on the develop branch then. I'll close the issue


Subdomain not working for organization

Hello community
I have created an organization with name test and put sudomain name test

But when i am trying to open it is not working
my main domain where angular running is : ev.xxxxx.xxx and creating subdomain like test.ev.xxxxx.xxx for test organization
should i need to point any cname or A record in dns for the same ?

Please do advise

fixed with pointing cname


Fixed IAC scan docker command

There was a typo in the Docker command which was causing bad arguments to be used.  I just removed a '!' and it's all working now.

It would probably be good to add extra tests :)


Get the elements to be extracted from the dataset fields

https://ibdregistry.org.uk/wp-content/uploads/2017/07/IBD-Registry-Data-Submission-Specification-Ver-2015_H.1-November-2015.pdf

From IBD


Fix datastore emulator md5 checksum

This addresses part of the issue in #1300 by fix datastore emulator's md5 checksum.

Coverage decreased (-0.02%) to 84.749% when pulling 9028598df922cfdf48f1b6441129dc83307442ea on mziccard:gcd-md5 into dcee4732c3c8ec0249f252131ca101d8d4ec7343 on GoogleCloudPlatform:master.

/cc @lesv


Formatting changes.

Removed trailing whitespace.
Added ```sql.

@Protiguous : Thanks for your contribution! The author(s) have been notified to review your proposed change.

Please do not remove the spacing, as in markdown, and a "double-space" creates a new line.

Ah, I was not aware of this. Thanks for letting me know! (Curious: Why a double-space.. and not a CRLF?)


ccmlib/utils: add inotify wrapper

a typical session looks like:
$ while true; do
    sleep 1
    echo 1 >> /tmp/foobar
  done

in the meanwhile:
from inotify import INotify

notify = INotify()
with notify.watch("/tmp/foobar"):
  for e in notify.read():
    print(e)

inspired by #577

@tchaikov
can you add a test, or some example of usage for this, it's not exactly clear what exactly do we need it for...
for using in polling log files ?

@tchaikov
can you add a test, or some example of usage for this, it's not exactly clear what exactly do we need it for...

indeed. will do.

for using in polling log files ?

yes, it's exactly the intended use case.

v2:

added tests for inotify wrapper.

@tchaikov
I'll merge it once tests pass
anyhow with the next steam, we need to be careful, and make sure we run all tests (all variant, and enterprise)
since it something that affect all of the tests

need to be careful with type annotations, we still support python 3.8 (cause of usage in drivers)
tests/test_utils_inotify.py:1: in <module>
    from ccmlib.utils.inotify import INotify, Flag
ccmlib/utils/inotify.py:71: in <module>
    class Event:
ccmlib/utils/inotify.py:74: in Event
    flags: list[Flag]
E   TypeError: 'type' object is not subscriptable

ack.

v2:

use typing annotations compatible with Python 3.8

for using in polling log files ?

yes, it's exactly the intended use case.

Inotify is useful when you have a lot of files, and not sure when any of them will change - it's possible that a file will change in the next second, or maybe it won't change in a year. This isn't usually the case in log files - you have just one or a small number of those (one per node), and usually each of them changes all the time (our logs are very chattery). So we need to constantly read from each of them looking if the log message we cared about appeared.
Moreover in a modern machine, code which looks like:
while True:
   check_the_end_of_the_log()
   sleep(0.1)

Is very efficient (there is a file system cache) and doesn't really needs optimization.
Can you give an example of a problem - usability or performance problem - that you're trying to solve?

for using in polling log files ?

yes, it's exactly the intended use case.

Inotify is useful when you have a lot of files, and not sure when any of them will change - it's possible that a file will change in the next second, or maybe it won't change in a year. This isn't usually the case in log files - you have just one or a small number of those (one per node), and usually each of them changes all the time (our logs are very chattery). So we need to constantly read from each of them looking if the log message we cared about appeared.
Moreover in a modern machine, code which looks like:
while True:
   check_the_end_of_the_log()
   sleep(0.1)

Is very efficient (there is a file system cache) and doesn't really needs optimization.
Can you give an example of a problem - usability or performance problem - that you're trying to solve?

I think the issue at hand was the the loop we have was doing that loop with sleeps which were hardcoded
and were too big for on specific test, now those times can be configured.
I think @tchaikov is aiming into something, that would need those sleeps at all.
I don't think we were having performance issue at hand, or having big amount of files to be watched
but yes, might be a bit of an overkill.
also, we should be think/moving to ways to test things with depending on the logs output. and maybe no entrancing more into it.
so far we did succeeded much in it, and every boot has a mix flavor of using API calls and waiting for logs, for all bunch of compatibility reasons.

@fruch @nyh do we have any objections? this PR was approved. and i made changes per the request of reviewer.

@fruch @nyh do we have any objections? this PR was approved. and i made changes per the request of reviewer.

There is still the concern it might be an overkill
But I'm willing to experiment on how it would be used and as said , we'll need to run all of the tests to validate

I think the issue at hand was the the loop we have was doing that loop with sleeps which were hardcoded and were too big for on specific test, now those times can be configured.

Sleeps are a problem in a lot of dtests, but it has nothing to do with logs. As I mentioned, because we enable a lot of crap in our log, our logs constantly get written, so inotify will return almost immediately anyway. If we use sleep(0.1) when looking at logs, that would have been good enough - nobody would have complained the sleep was too short or too long. I think inotify is a complete overkill for this use case. But I guess it's not wrong.
On the other hand, sleep in log searching is good if you iteratively keep reading from the same mark (and not always read just the new data from the last read). In that case, waking up every millisecond and reading all the data from the original mark is a big waste. If we expect the message to appear only after 5 seconds (usually), then sleeping 5 seconds and then checking is much more efficient. Of course even better is to read in every iteration just from the end of the previous iteration. But this must be done carefully (you need to at least cut the log on full lines and not in the middle of a line), and I don't know if we're careful in that. @fruch maybe you know.

@nyh
All is correct, but someone did complain about 0.1 sleep is too long, for some use case, and we introduced a way to lower it down for that specific test.
That thread ignited @tchaikov direction here.
As I've said I'm o.k. to give it a try, it might prove useful in more place.
Nowadays we have quite good ways to test such a thing with all tests, i.e. we have quite stright criteria for such a change (that all tests pass :))


linux-yocto: initial support for qcom-armv7a machine

Add support for the qcom-armv7a machine. Tested on ifc6410 and (up to some extent) on db8074. The msm8974 needs additional patches to fix the interconnect driver.

LGTM


How to upload files?

First of all, thanks for your work! It did help me a lot :)
I wonder if it is able to upload files and chat with Claude?
Looking for your reply.

Hello  @Hongbin98 , Have been updated code with other cool features .
You can check how to upload files here in the documentation of my code:
https://github.com/KoushikNavuluri/Claude-API/#send-message-with-attachment
Please update the package ,before you try this :
pip install --upgrade claude-api


Augment at source

@harsh010102 @iamMihirT are integrating this into a separate PR, following the structure of the Telegram scraper


Fix fmt string for an Errorf call

Without this fix, moving to go1.11 will break the unit tests for galley:
$ go test ./galley/pkg/runtime/...
galley/pkg/runtime/state.go:141: Scope.Errorf call needs 1 arg but has 2 args
FAIL    istio.io/istio/galley/pkg/runtime [build failed]

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by:
To fully approve this pull request, please assign additional approvers.
We suggest the following additional approver: douglas-reid
If they are not already assigned, you can assign the PR to them by writing /assign @douglas-reid in a comment when ready.
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

galley/OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

[APPROVALNOTIFIER] This PR is APPROVED
This pull-request has been approved by: ayj
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

galley/OWNERS [ayj]

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

/lgtm
/approve

[APPROVALNOTIFIER] This PR is APPROVED
This pull-request has been approved by: ayj, geeknoid
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

galley/OWNERS [ayj,geeknoid]

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@douglas-reid: The following test failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/istio-pilot-multicluster-e2e.sh
c1860c576afbaaa14c4e7069f88b5356f5f2bda0
link
/test istio-pilot-multicluster-e2e

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.


switch statements on any type that overloads '=='

Switch statements should be made more robust to allow for using any type that has overloaded ==. For example, using str,
name := "Joe";
switch name {
    case "Tom" ---
    case "Joe" do println("Found Joe!");
    case #default ---
}

Added.


Arbitrary Code Execution in JsonPointer.get

Hey maintainers @cehoffman @mortonfox @treybrisbane @chrishalbert ,  I have opened a PR (https://github.com/418sec/json-ptr/pull/3) which will fix the potential arbitrary code execution vulnerability in json-ptr. Please take a review.
If you are fine with that fix, please comment @huntr-helper - LGTM at https://github.com/418sec/json-ptr/pull/3, or if you need any modifications, please also comment on that PR. Thanks.
Ref: https://github.com/418sec/json-ptr/pull/3

Fixed with the original report #28.


Polyline artifacts on zoom

Reproduce in Sandcastle with the code attached to this forum discussion:
https://groups.google.com/forum/#!topic/cesium-dev/x65iBRE63Nc
Perhaps this is due to the use of getPositions.  Probably not related to #1233.

@pjcozzi I couldn't reproduce this with his example.  The blue polyline always stays on top as you zoom.  Here's updated code from his forum post:
var widget = new Cesium.CesiumWidget('cesiumContainer',{
    sceneMode : Cesium.SceneMode.SCENE2D
});

var positionCollection1 = new Cesium.PolylineCollection();
widget.scene.primitives.add(positionCollection1);
positionCollection1.add({
    width: 5,
    positions: Cesium.Cartesian3.fromDegreesArray([
        -75.49131700169065,37.83109725221429,
        -75.49131700540569,37.83109724992074,
        -80.6508,28.5853

    ]),
    material:  Cesium.Material.fromType('Color', {
        color : Cesium.Color.RED
    })
});

var positionCollection2 = new Cesium.PolylineCollection();
widget.scene.primitives.add(positionCollection2);
positionCollection2.add({
    positions: Cesium.Cartesian3.fromDegreesArray([
        -75.49131800169065,37.83209725221429,
        -75.49131800540569,37.83209724992074,
        -80.6508,28.5853
    ]),
    width: 5,
    material:  Cesium.Material.fromType('Color', {
        color : Cesium.Color.BLUE
    })
});

I can't reproduce this either now.


III.VC.SA.LimitAdjuster.asi detected as malware by Windows Defender and Virustotal

Within the last few days, Windows Defender has repeatedly detected III.VC.SA.LimitAdjuster.asi as malware, specifically "Program:Win32/Uwasson.A!ml" and Virustotal flags it under several different signs. I am assuming this is a false positive, but previous versions of this file are not flagged by Virustotal.
This is what Virustotal gives for the file: https://www.virustotal.com/gui/file/defa4dce87886f38f6fc89c0eb20fa0aac0dd391cdddd82da1ba38b4c659ad2b/details

Hmmm I often see the same thing with other .asi files.. kinda scary if you ask me.

Don't worry. It's open source after all.


Couldn't parse CURLOPT_RESOLVE

curl_cffi >= 0.5.7
session.curl.setopt(
option=CurlOpt.RESOLVE,
value="example.com:443:<IP_ADDRESS>"
)
curl_cffi.requests.errors.RequestsError: Failed to perform, ErrCode: 49, Reason: 'Couldn't parse CURLOPT_RESOLVE entry '''. This may be a libcurl error, See https://curl.se/libcurl/c/libcurl-errors.html first for more details.

Fixed in 0.5.9b, a beta version, you can try it with: pip install curl_cffi==0.5.9b5


Add option to disable .no-js selector

I'm using your mixin to handle missing flexbox support. I use flexbox normally and add a special case with @nope(flexbox). It works great, but fails in browsers with disabled javascript (eg. NoScript users will see the fallback layout). I'd love to have a way to disable the .no-js selector for this special case.

Hey, why it was closed without any comment? The question is still valid.

Sorry for the lack of updates. This repository is no longer maintained and is being archived.


Unknown error occurred

The problem
When I add the Easee integration and enter user name & password I get "Unknown error occurred"?
I have tried to delete the integration, restart, reinstalled the integration, restarted, but same error.
Version of Easee integration having the issue?
v0.9.48
Version of Home Assistant Core having the issue?
2023.1.2
Anything in the logs that might be useful for us?
No response
Additional information
No response

Got same, for me issue was that I had to confirm my account at easee,
Had received a mail with link

I have no problem login into to https://easee.cloud/ so that shouldn't be the issue

"Unkown error" seems to me like the code probably made some exception, can you please look in the log file if there is anything there related to easee integration?

Only error related to Eesee is "2023-01-13 10:35:28.086 WARNING (SyncWorker_2) [homeassistant.loader] We found a custom integration easee which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant"

If you add this to your configuration.yaml, do you see any additional log messages?
´´´
logger:
default: info
logs:
pyeasee.easee: debug
custom_components.easee: debug
´´´

@felixlangkjaer Are you 100% sure that it is not an account confirmation problem as smultronpop mentions?
I have a vague memory that I have seen this before where someone could not get this integration to work and it was related to confirming the account.
I think it was still possible to use the app and log in to the cloud even without that approval, it was just using the API that failed.
Are you sure you have med the required response to the confirmation mail?

@olalid that helped! I set a new password on easee.cloud and that did it...thanks for the help!


Update log format

Move tag to the start of the line
Make the tag constant width
Make the function name constant width

Example output (colors not pictured)
[DEBUG  ] tasks_init             [main] is RUNNING
[DEBUG  ] tasks_new              [cleaner] is PAUSED
[INFO   ] kernelEntry
QEMU Virtual CPU version 2.5+

[DEBUG  ] tasks_new              prime_compute is READY
[DEBUG  ] tasks_new              prime_display is READY
[DEBUG  ] tasks_nano_sleep_until prime_display is SLEEPING
[DEBUG  ] tasks_new              spinner is READY
[DEBUG  ] tasks_block_current    [main] is PAUSED
[VERBOSE] _on_timer              timer: waking sleeping task
[DEBUG  ] _wakeup                prime_display is READY
[DEBUG  ] tasks_nano_sleep_until prime_display is SLEEPING


Why do not all pages have ‘print’ buttons?

This is an inconsistency someone raised with us in the process of documenting the print link component as part of the design documentation work:
Not all pages have ‘print’ buttons. Why do some pages have it and others don’t?

Hi @ChristineWuerth - not all pages require the print button, but it's commonly used for page types like guides, detailed guides, HTML publications, or manuals. The decision to add print buttons to other pages would be made by the teams managing those specific applications (and their respective pages and document types) if they see a benefit in doing so. Since this isn't something to address in this repository, I'll go ahead and close this issue for now


HTTP[S] Crossdata Driver - Server communication layer

Description
This PR adds the HTTP and HTTPS communications layer to Crossdata thus allowing setting driver-server dialogue to be done over HTTP or HTTPS keeping akka cluster client layer.
Testing

[x] Integration tests

Documentation

[ ] Changelog update
[ ] Documentation link

Changes Unknown when pulling 3134a364f81e92ae1a971c6c50a651e06af92473 on feature/akkaHttp into ** on master**.

Coverage decreased (-3.5%) to 49.025% when pulling 2e4879911a9af2513b97803923f15f8025f8d0d7 on feature/akkaHttp into ecfa759cf9580800302b210a61729f3bc7231634 on master.

Coverage decreased (-3.6%) to 48.981% when pulling 4b64588f3a524fdb0955de4582e5453130e3ec78 on feature/akkaHttp into ecfa759cf9580800302b210a61729f3bc7231634 on master.

Coverage decreased (-3.5%) to 49.097% when pulling 4b64588f3a524fdb0955de4582e5453130e3ec78 on feature/akkaHttp into ecfa759cf9580800302b210a61729f3bc7231634 on master.


More accurately calculate USD values on the Token

The overall goal here is to more accurately calculate the totalBalanceUSD and totalVolumeUSD on the Token and TokenSnapshot. The current issue is that both are being calculated as a running sum, but this does not take into account the changing asset price over time, leading to USD values that are far away from expected.

An example:
https://graph-node.beets-ftm-node.com/subgraphs/name/beethovenx-v4/graphql?query={
  token(id%3A "0xc5e2b037d30a390e62180970b3aa4e91868764cd") {
    id
    symbol
    totalBalanceNotional
    totalBalanceUSD
  }
}

The totalBalanceNotional there is correct, but the totalBalanceUSD is off by quite a lot. It should be approx $320k instead of the $1.2 million it shows.
The proposed solution is to repeg the value using the latest asset price on each JOIN, EXIT, SWAP_IN and SWAP_OUT. The primary changes here are:

Store the priceUSD on the TokenPrice and LatestPrice to allow for easier calculations. We also utilize this in the analytics tool we're building (https://info.beets.fi).
Expand updateTokenBalances to additionally support JOIN and EXIT so that all logic can live in a single place.
Always recalculate the totalBalanceUSD and totalVolumeUSD using the notional value and the latest price in USD.
Added a small helper function loadRequiredPoolToken to replace the repetitive pattern

One thing to note is that updateTokenBalances always needs to be called after updatePoolLiquidity, which is not so clear. This could get refactored to be more obvious.

Hey Daniel, thanks for this PR. I agree that we should be recalculating the totalBalanceUSD from notional each time but you seem to have introduced an issue in totalVolumeUSD.

Hey Tom! Thanks for all the feedback. Below is a version of the subgraph running on the code included in this PR. The one above was prior to the fix.
https://us-lb.beets-ftm-node.com/subgraphs/name/beethovenx-canary/graphql?query={
  token(id%3A "0xc5e2b037d30a390e62180970b3aa4e91868764cd") {
    id
    symbol
    totalBalanceNotional
    totalBalanceUSD
    totalVolumeUSD
    totalVolumeNotional
  }
}


Visual inside word and () not working

In vim, when you press viw it select visual inside word and selects entire word. Now in pyvim it only selects from current cursor position.
Also vi) or vi( visual inside () is not working.
Visual around also is not working. va( va) vaw ... visual around () or visual around word.

Thanks a lot for reporting this!
I didn't know about it, but it definitely makes sense. It's actually an enhancement that goes to prompt-toolkit.  Having this also means that when I implement "ap" (Auto-paragraph), we will automatically have "vap" as well.

Fixed in https://github.com/jonathanslenders/python-prompt-toolkit/commit/3675addf7e3f65f63ab833cfcb5cf3205e54fac2
This should handle:  viw, vaw, vi(, vi{ va( va{, etc...


New fuel production sliders

Goes with https://github.com/quintel/etsource/pull/2461
In this PR @Charlottevm added new sliders with which you can set the future fuel production in your region (see screenshot). It removes the time-curves slides and charts.

Mmmm..... this morning the sliders still worked

Grab the latest copy of the ETSource branch. There were still queries which referred to TIME_SERIES_VALUE, which blew up after this morning's removal of time curve support from ETEngine.


Add a sanity check if there is no media directory

@ntauthority please merge

for whatever purpose it has to have me do so, merged; didn't test but checked test(1) man page and it seems this is how test should be used


Concurrent queue / Lock handle / Cond handle

@jserv I initially thought about that but it ended up being only a free so I removed it. But I guess you're right on the abstraction part


add initial capi overview dashboard

This PR

adds/changes/removes etc

can be seen in https://grafana.glippy.azuretest.gigantic.io/d/sB2wuKu4z/capi-overview?orgId=1

Checklist

[x] Update changelog in CHANGELOG.md in an end-user friendly language.

are those not ready on glippy because of the Bastion MachineDeployment or some other reasons ?

Can we load it in another, more stable, cluster like gaggle ?
Have you tried it on a CAPA cluster ?

basic machinepool support:

@primeroz as there is no machinePoolMachine object in CAPI (yet) we don't have the information of a machine pool based machine as we have with machinedeployments.


fix(FirebaseListFactory): prevent first item being duplicated when it…

Previously, the first list item would be duplicated if it was the one that changed. Now, we check that the first item in the existing array and the one that changed are different, and only then do we push it to the accumulator.

Just signed the CLA.

Thanks for the PR @rosslavery! Sorry for the delay, this is 💯!


MD026: Allow ?! in headers

Technically, ?! in [MD026][] are punctuation marks—but so are “” ‘’, so I’m wondering if we might consider revising either the rule, the language of it—or creating a separate rule for trailing .,:;?
I personally prefer a rule that flags trailing .,:;, but allows ?!.

Hi. You're in luck, the punctuation characters used for MD026 are actually configurable according to the style in use by markdownlint. While the default is .,;:!? you can create a new style file to change the behavior. Here's an example (call it example.rb):
# Enable all rules by default
all
# Configure special behavior for MD026
rule 'MD026', :punctuation => '.,:;'

Then you would call mdl using mdl -s ./path/to/example.rb yourfile.md and if you wanted to keep it permanent, add style 'path/to/example.rb' in your ~/.mdlrc.
https://github.com/mivok/markdownlint/blob/master/docs/configuration.md and https://github.com/mivok/markdownlint/blob/master/docs/creating_styles.md has a little more information on this if you're curious.


Create JumpList in background thread to improve performance

PR Summary
Background/Recap: PR #6913 added a JumpList on Windows only and already made sure that in case of pwsh being non-interactive or not being the owner of the current window, the algorithm aborts as early as possible (<1ms) but in cases when the JumpList needs to be created, the work in the ConsoleHost is done synchronously and takes around 55ms.
This PR enhances the last scenario by eliminating the blocking time completely by doing the work in a background thread without waiting for it and as suggested in the PR review, moving it to a later stage.
Some more info: Once the JumpList is being set the first time, it will persist (if the file path remains the same), therefore it is OK to move it to a later stage in general. As already discussed there is no 'GET' API to check whether the JumpList needs to be created or not. In theory, one could possibly even try to call it in a WiX custom action during the installation but even if that worked, I am questioning its persistence e.g. during one of the bi-annual Windows updates (personally, I have seen e.g. that registry keys, etc. do not get persisted). Therefore I think this optimisation makes it polished enough to not worry about those few extra CPU cycles, especially since Windows deployments nowadays usually have multi-core CPUs as well.
PR Checklist

[x] PR has a meaningful title

Use the present tense and imperative mood when describing your changes

[x] Summarized changes
[x] Change is not breaking
[x] Make sure all .h, .cpp, .cs, .ps1 and .psm1 files have the correct copyright header
[x] This PR is ready to merge and is not Work in Progress.

If the PR is work in progress, please add the prefix WIP: to the beginning of the title and remove the prefix when the PR is ready.

User-facing changes

[x] Not Applicable
OR
[ ] User-facing Documentation needed

[ ] Issue filed - Issue link:

Testing - New and feature

[x] Not Applicable or can only be tested interactively
OR
[ ] Make sure you've added a new test if existing tests do not effectively test the code changed

[ ] Add [feature] if the change is significant or affects feature tests

@bergmeister Please address @anmenaga comment and we'll be ready to merge.


deep variable is available in plv8 handler globally

https://github.com/deep-foundation/deeplinks/blob/ea6d95d6437820cffc29adb1e2988386ba4e2acd/tests/sync-handlers.ts#L3052


Exploding library size after some iterations

Hi all,
I spent a lot of yesterday figuring out what was wrong with one of my models, and thanks to @adamgayoso we found out it was linked to the library size.
Basically, during the first few iterations, the library size can take large values, making it easy for px_rate to be inf here, which can cause the reconstruction loss to be NaN.
I can do a PR that would clamp the library size just in case, and would also initialize the library encoder paramers so that libraries would be around 1 with a small variance at initialization.
What do you think?

Hey Pierre, it might be better for the records to talk about #446 here.
I'm glad that the tanh/sigmoid trick worked for you but I still don't know the exact change of behavior:

tanh is like a smooth clamping so it seems good to me
The sigmoid is also often used to get positive values but I'm not sure about the implications on the model of changing from exp to sigmoid

Happy if some people have good intuition on this.

Closed based on last Tuesday's discussion


Copyright unicode sign

added the unicode copyright sign

sorry, we won't accept this pull request as there is no added value in it. moreover, the LICENSE file would cause a deviation from all other LICENSE files in our repositories.


Blazor app with linker.xml requires 3.0 rc builds

Create a blazorwasm app using .Net Core 3 Preview 9:
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <OutputType>Exe</OutputType>
    <LangVersion>7.3</LangVersion>
    <RazorLangVersion>3.0</RazorLangVersion>
  </PropertyGroup>
<PropertyGroup>
    <RootNamespace>MLS.Blazor</RootNamespace>
</PropertyGroup>
<ItemGroup>
  <BlazorLinkerDescriptor Include="Linker.xml" />
</ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Blazor" Version="3.0.0-preview9.19457.4" />
    <PackageReference Include="Microsoft.AspNetCore.Blazor.Build" Version="3.0.0-preview9.19457.4" PrivateAssets="all" />
    <PackageReference Include="Microsoft.AspNetCore.Blazor.HttpClient" Version="3.0.0-preview9.19457.4" />
    <PackageReference Include="Microsoft.AspNetCore.Blazor.DevServer" Version="3.0.0-preview9.19457.4" PrivateAssets="all" />
    <PackageReference Include="Newtonsoft.Json" Version="12.0.02" />
    <PackageReference Include="system.commandline.experimental" Version="0.3.0-alpha.19317.1" />
  </ItemGroup>

</Project>

Build the app, and you get the following error:
Microsoft (R) Build Engine version 16.3.0-preview-19426-01+faf5e5d75 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Restore completed in 23.08 ms for C:\Users\rchande\.trydotnet\packages\Initializes_project_with_right_files.3\MLS.Blazor\MLS.Blazor.csproj.
  You are using a preview version of .NET Core. See: https://aka.ms/dotnet-core-preview
  MLS.Blazor -> C:\Users\rchande\.trydotnet\packages\Initializes_project_with_right_files.3\MLS.Blazor\bin\Debug\netstandard2.0\MLS.Blazor.dll
  It was not possible to find any compatible framework version
  The specified framework 'Microsoft.NETCore.App', version '3.0.0-rc1-19456-20' was not found.
    - The following frameworks were found:
        2.0.9 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
        2.1.2 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
        2.1.4 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
        2.1.5 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
        2.1.6 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
        2.1.7 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
        2.1.8 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
        2.1.9 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
        2.1.11 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
        2.1.12 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
        2.2.1 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
        3.0.0-preview9-19423-09 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]

  You can resolve the problem by installing the specified framework and/or SDK.

  The .NET Core frameworks can be found at:
    - https://aka.ms/dotnet-download
C:\Users\rchande\.nuget\packages\microsoft.aspnetcore.blazor.build\3.0.0-preview9.19457.4\targets\Blazor.MonoRuntime.targets(635,5): error MSB3073: The command "dotnet "C:\Users\rchande\.nuget\packages\microsoft.aspnetcore.blazor.build\3.0.0-preview9.19457.4\targets\../tools/Microsoft.AspNetCore.Blazor.Build.dll" write-boot-json "obj\Debug\netstandard2.0\MLS.Blazor.dll" --references "C:\Users\rchande\.trydotnet\packages\Initializes_project_with_right_files.3\MLS.Blazor\obj\Debug\netstandard2.0\blazor\bootjson-references.txt" --embedded-resources "C:\Users\rchande\.trydotnet\packages\Initializes_project_with_right_files.3\MLS.Blazor\obj\Debug\netstandard2.0\blazor\embedded.resources.txt" --linker-enabled --output "C:\Users\rchande\.trydotnet\packages\Initializes_project_with_right_files.3\MLS.Blazor\obj\Debug\netstandard2.0\blazor\blazor.boot.json"" exited with code -2147450730. [C:\Users\rchande\.trydotnet\packages\Initializes_project_with_right_files.3\MLS.Blazor\MLS.Blazor.csproj]

Build FAILED.

Dotnet info is as follows:
.NET Core SDK (reflecting any global.json):
 Version:   3.0.100-preview9-014004
 Commit:    8e7ef240a5

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.18980
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\3.0.100-preview9-014004\

Host (useful for support):
  Version: 3.0.0-preview9-19423-09
  Commit:  2be172345a

.NET Core SDKs installed:
  2.1.202 [C:\Program Files\dotnet\sdk]
  2.1.400 [C:\Program Files\dotnet\sdk]
  2.1.402 [C:\Program Files\dotnet\sdk]
  2.1.500-preview-009335 [C:\Program Files\dotnet\sdk]
  2.1.500 [C:\Program Files\dotnet\sdk]
  2.1.504 [C:\Program Files\dotnet\sdk]
  2.1.600-preview-009426 [C:\Program Files\dotnet\sdk]
  2.1.600-preview-009497 [C:\Program Files\dotnet\sdk]
  2.1.600 [C:\Program Files\dotnet\sdk]
  2.1.601 [C:\Program Files\dotnet\sdk]
  2.1.602 [C:\Program Files\dotnet\sdk]
  2.1.700-preview-009618 [C:\Program Files\dotnet\sdk]
  2.1.700 [C:\Program Files\dotnet\sdk]
  2.1.800-preview-009677 [C:\Program Files\dotnet\sdk]
  2.1.800-preview-009696 [C:\Program Files\dotnet\sdk]
  2.1.800-preview-009711 [C:\Program Files\dotnet\sdk]
  2.2.102 [C:\Program Files\dotnet\sdk]
  3.0.100-preview9-014004 [C:\Program Files\dotnet\sdk]

Looking at the deps.json for "Microsoft.AspNetCore.Blazor.Build.dll" in the microsoft.aspnetcore.blazor.build\3.0.0-preview9.19457.4\tools directory of my nuget package cache shows that is has some RC dependencies:
{
  "runtimeTarget": {
    "name": ".NETCoreApp,Version=v3.0",
    "signature": ""
  },
  "compilationOptions": {},
  "targets": {
    ".NETCoreApp,Version=v3.0": {
      "Microsoft.AspNetCore.Blazor.Build/3.0.0-preview9.19457.4": {
        "dependencies": {
          "Internal.AspNetCore.Analyzers": "3.0.0-rc1.19456.10",
          "Internal.AspNetCore.BuildTasks": "3.0.0-build-20190530.3",

Installing a nightly build from https://github.com/dotnet/core-sdk/blob/master/README.md#installers-and-binaries unblocks this, but it appears that you can't use linker.xml with only p9 installed.

Thanks @rchande.
You should simply move forward to using 3.0.0-rc* SDK.
However, Blazor WASM template has Preview9 version number, and this is intentional.


Determine "best" publication and dissemination channels

The initial planning is to use Github to develop and provide open science teaching/training materials since we want the materials to be reusable and adaptable. This can be easily established by Github, as initiatives as the Software Carpentry, the Data Carpentry or Mozilla Science Lab trainings have shown.
However, there were a couple of suggestions from people on the open science mailing list to also consider other platforms for provisioning (besides Github) and/or dissemination (besides the website) due to reasons of motivation/incentives for scientists and long-term preservation of the materials.
Platforms to consider/discuss:

RIO Journal
Zenodo
Figshare

The mailing list discussion can be followed here (first mail in the thread - please read the following ones).

yep, once we have actual material in here (;-)) we can easily make releases and put those on Zenodo, Figshare etc. for storage and DOI access.

If we have releases we can have them automatically pulled into Zenodo.


Add footer

TODO:

[ ] What content do we want in the footer? For now, I’ve just added the Glow logo that links to glow.app.

@benborgers maybe we can add a link to our Twitter on the right? We'll probably add some support / terms / etc links later on.


Editorial: " the result of calling" is not necessary

The spec is moving away from that. E.g. "Let desc be ? obj.[GetOwnProperty]." in O.gOPD singular.

There are also a couple "the result of "


JAVA-554

Can one of the admins verify this patch?

lgtm :+1:

@adutra Note added.

Thanks @bsideup! One last request before we merge: could you please squash your commits into a single one with a more meaningful message, e.g. "Mapper should allow access to TableMetadata (JAVA-554)." ?

@adutra ok, sure. Will do it now

@adutra Done:)


The ground truth does not match the KITTI dataset.

I would like to replicate this model on the KITTI dataset. During the data preparation phase, I discovered that the ground truth does not match the pose in the dataset. The dataset was downloaded from kitti odometry. I would like to inquire how the ground truth was obtained and whether it underwent any processing.
import pickle, numpy as np

with open('/GeoTransformer/data/Kitti/metadata/train.pkl', 'rb') as file:
    meta_data = pickle.load(file)

poses = []
with open('/GeoTransformer/data/Kitti/00.txt', 'r') as file:
    for line in file:
        eles = line.split(' ')
        eles = [float(ele) for ele in eles]
        eles += [0.0, 0.0, 0.0, 1.0]
        pose = np.array(eles).reshape((4,4))
        poses.append(pose)

idx_0 = meta_data[0]['frame0']
idx_1 = meta_data[0]['frame1']
trans = meta_data[0]['transform']

print(f'poses_{idx_0} is : \n {poses[idx_0]}')
print(f'poses_{idx_1} is : \n {poses[idx_1]}')

poses_11 is :
[[ 9.997264e-01  5.527315e-03 -2.272922e-02 -5.155474e-01]
[-5.816781e-03  9.999025e-01 -1.268908e-02 -3.121547e-01]
[ 2.265686e-02  1.281782e-02  9.996611e-01  9.440275e+00]
[ 0.000000e+00  0.000000e+00  0.000000e+00  1.000000e+00]]
poses_0 is :
[[ 1.000000e+00  9.043680e-12  2.326809e-11  5.551115e-17]
[ 9.043683e-12  1.000000e+00  2.392370e-10  3.330669e-16]
[ 2.326810e-11  2.392370e-10  9.999999e-01 -4.440892e-16]
[ 0.000000e+00  0.000000e+00  0.000000e+00  1.000000e+00]]
print(f'poses_{idx_0} is : \n {poses[idx_0] @ trans}')
print(f'poses_{idx_1} is : \n {poses[idx_1] @ trans}')
print(f'poses_{idx_0} is : \n {trans @ poses[idx_0]}')
print(f'poses_{idx_1} is : \n {trans @ poses[idx_1]}')

poses_11 is :
[[ 0.99854881  0.04903782 -0.02225916 -9.64195803]
[-0.04940388  0.99864733 -0.0162043  -0.39138505]
[ 0.02143442  0.01728048  0.99962095  9.26892439]
[ 0.          0.          0.          1.        ]]
poses_0 is :
[[ 9.99048570e-01  4.36070063e-02  4.89464258e-04 -9.12733465e+00]
[-4.36050367e-02  9.99042651e-01 -3.51279718e-03 -1.31863528e-01]
[-6.42179162e-04  3.48811129e-03  9.99993682e-01  3.71489208e-02]
[ 0.00000000e+00  0.00000000e+00  0.00000000e+00  1.00000000e+00]]
poses_11 is :
[[ 0.99853267  0.04913108 -0.02277163 -9.651383  ]
[-0.04948391  0.9986592  -0.01519743 -0.4544007 ]
[ 0.02199443  0.01630196  0.99962522  9.47660747]
[ 0.          0.          0.          1.        ]]
poses_0 is :
[[ 9.99048570e-01  4.36070063e-02  4.89464220e-04 -9.12733465e+00]
[-4.36050367e-02  9.99042651e-01 -3.51279683e-03 -1.31863528e-01]
[-6.42179216e-04  3.48811164e-03  9.99993682e-01  3.71489248e-02]
[ 0.00000000e+00  0.00000000e+00  0.00000000e+00  1.00000000e+00]]
def getIdx(idx):
    if(meta_data[idx]['seq_id'] != 0):
        print('seq_id is not zero')
    trans = meta_data[idx]['transform']
    return(meta_data[idx]['frame0'], meta_data[idx]['frame1'], trans)

def calPoseAndTransPose(idx_0, idx_1, trans):

    print(f'poses_{idx_0} is : \n {poses[idx_0]}')
    print(f'poses_{idx_0} is : \n {trans @ poses[idx_0]}')

idx_0, idx_1, trans = getIdx(300)
calPoseAndTransPose(idx_0, idx_1, trans)

poses_4019 is :
[[-9.975340e-01  6.942821e-02  1.028616e-02 -2.712806e+02]
[ 6.988797e-02  9.960649e-01  5.450084e-02  2.268718e-01]
[-6.461783e-03  5.508530e-02 -9.984607e-01  3.192394e+02]
[ 0.000000e+00  0.000000e+00  0.000000e+00  1.000000e+00]]
poses_4019 is :
[[-9.93526303e-01  1.09620689e-01  2.98137300e-02 -2.85965646e+02]
[ 1.11087840e-01  9.92393181e-01  5.30573043e-02  1.19501576e+01]
[-2.37707708e-02  5.60257701e-02 -9.98146311e-01  3.14343969e+02]
[ 0.00000000e+00  0.00000000e+00  0.00000000e+00  1.00000000e+00]]

Hello, can I ask how you get the pkl files? The downsamplepcd only generate the npy file.

Hello, can I ask how you get the pkl files? The downsamplepcd only generate the npy file.

yeah… Author calculated the ground truth by ICP, and saved in pkl file, which saved in data/Kitti/metadata, Actually, it should be calculated by ground truth given by kitti, but, a grate work.

The official ground truth poses of KITTI have really large errors, which are not suitable for evaluating registration performance. Actually, refining KITTI's poses with ICP is adopted by many previous works (such as  FCGF, PREDATOR)


When adding as CMake subdirectory adds many extra projects

When I put this repo as a submodule, I can of course include just the header file.
However, how can I use this as a library dependency without getting all the test projects into my build?

I plan to provide CMake packages for the nonstd lite projects as with gsl lite, which I hope is an answer to your problem. However, there's only so much one can do...

Never used them.
But span-lite works well with no superfluous projects.

ok thanks, that'll be a change I can do quite quickly.

... done.

Fantastic!


Application Crashes In Production

I am getting the following error on fly.io when trying to run the scraping functionality:
java.net.SocketTimeoutException: Read timeout
   at java.io.FilterInputStream.read(FilterInputStream.java:107)ableInputStream.java:58)
   at java.io.FilterInputStream.read(FilterInputStream.java:107)
   at org.jsoup.internal.ConstrainableInputStream.readToByteBuffer(ConstrainableInputStream.java:8
   at org.jsoup.helper.DataUtil.readToByteBuffer(DataUtil.java:202)
   at org.jsoup.helper.DataUtil.parseInputStream(DataUtil.java:107)
   at org.jsoup.helper.HttpConnection$Response.parse(HttpConnection.java:835)
   at net.ruippeixotog.scalascraper.browser.JsoupBrowser.doc$lzycompute$1(JsoupBrowser.scala:76)
   at net.ruippeixotog.scalascraper.browser.JsoupBrowser.doc$1(JsoupBrowser.scala:76)
   at net.ruippeixotog.scalascraper.browser.JsoupBrowser.processResponse(JsoupBrowser.scala:78)
   at net.ruippeixotog.scalascraper.browser.JsoupBrowser.$anonfun$executePipeline$4(JsoupBrowser.s
   at scala.Function1.$anonfun$andThen$1(Function1.scala:85)
   at net.ruippeixotog.scalascraper.browser.JsoupBrowser.get(JsoupBrowser.scala:35)
   at scrapers.BaseScraper.<init>(BaseScraper.scala:42)r.get(JsoupBrowser.scala:29)
   at scrapers.BaseScraper.<init>(BaseScraper.scala:42)
   at scrapers.ScraperFactory$.initializeScraper(BaseScra
   at scrapers.ScraperFactory$.initializeScraper(BaseScra

   at controllers.HomeController.$anonfun$generateFuture$1(HomeController.scala:67)
   at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
   at scala.concurrent.impl.Promise$Transformation.run(Promise.sc
   at scala.concurrent.impl.Promise$Transformation.run(Promise.sc

   at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1402)
   at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
   at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
   at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
   at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:175)
()
java.net.SocketTimeoutException: Read timeout
   at org.jsoup.internal.ConstrainableInputStream.read(ConstrainableInputStream.java:58)
   at java.io.FilterInputStream.read(FilterInputStream.java:107)
   at org.jsoup.internal.ConstrainableInputStream.readToByteBuffer(ConstrainableInputStream.java:8
   at org.jsoup.helper.DataUtil.readToByteBuffer(DataUtil.java:202)
   at org.jsoup.helper.DataUtil.parseInputStream(DataUtil.java:107)
   at org.jsoup.helper.HttpConnection$Response.parse(HttpConnection.java:835)
   at net.ruippeixotog.scalascraper.browser.JsoupBrowser.doc$lzycompute$1(JsoupBrowser.scala:76)
   at net.ruippeixotog.scalascraper.browser.JsoupBrowser.doc$1(JsoupBrowser.scala:76)
   at net.ruippeixotog.scalascraper.browser.JsoupBrowser.processResponse(JsoupBrowser.scala:78)
   at net.ruippeixotog.scalascraper.browser.JsoupBrowser.$anonfun$executePipeline$4(JsoupBrowser.s
   at scala.Function1.$anonfun$andThen$1(Function1.scala:85)
   at net.ruippeixotog.scalascraper.browser.JsoupBrowser.get(JsoupBrowser.scala:35)
   at net.ruippeixotog.scalascraper.browser.JsoupBrowser.get(JsoupBrowser.scala:29)
   at scrapers.BaseScraper.<init>(BaseScraper.scala:42)
   at scrapers.PowdrScraper.<init>(PowdrScraper.scala:12)
   at scrapers.ScraperFactory$.initializeScraper(BaseScraper.scala:28)
   at controllers.HomeController.$anonfun$generateFuture$1(HomeController.scala:67)
   at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
   at scrapers.BaseScraper.<init>(BaseScraper.scala:42)
   at scrapers.WinterParkScraper.<init>(WinterParkScraper.scala:11)
   at scrapers.ScraperFactory$.initializeScraper(BaseScraper.scala:29)
   at controllers.HomeController.$anonfun$generateFuture$1(HomeController.scala:67)
   at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
   at scala.concurrent.Future$.$anonfun$apply$1(Future.scala:678)
   at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:467)
   at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1402)
   at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
   at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
   at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
   at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:175)
()

It looks like this is due to the application taking up too much memory on the production server hosted on Fly.io. If you look at the memory utilization graph here, you can see that the app takes up 215 MB at baseline, while the VM's limit is 221 MB. Anytime the scraping job is run, the memory usage spike put the application over the VM's limit and the OOM reaper kills the process.

Research Findings
I downloaded VisualVM and Eclipse MAT and did some poking around at the JVM instance for the Ski Resort Dashboard. The leak analyzer in MAT didn't really find anything noteworthy (1 small potential leak from some library in my stack). The funny thing is that when I run the application in production (not using sbt run), the memory footprint on my local machine is much much smaller. The baseline on my local machine when just running the application was anywhere between 130 and 150 MB. I don't really know what is causing the extra memory consumption on the server, but from poking around with ps on the server console, it looks like the JVM instance is taking up almost all of the memory available to the machine.

Action Steps
I am not entirely sure of all of the differences between the JVM instance of my application on my local machine vs the instance on the production server, but one major one I can think of is that the container image that gets pushed on to the server VM is being build by a Heroku Buildpack. I'm going to try to build my own docker image instead of using Heroku Buildpacks to do it for me. This will require me adding a DockerFile to my repo, and probably a .dockerIgnore as well. I'll test that my DockerFile is correct and building a working image by running it on my Work laptop which has docker installed.

Well, i created a Dockerfile for the ski-resort-dashboard project and got it working with Fly.io. Although it did save me about 30 to 40 mb in operating memory for the project, that still was not enough savings to keep the project from running out of memory when the scraping job started to boot up. Because of this, I started looking for alternative hosting methods for the project. Unfortunately, there were no other solutions like Fly.io or Heroku where using a simple cmd tool like heroku-cli or flyctl would magically get the project running on a pre-configured server. Other free solutions offered by the likes of Google or Amazon would basically have me rebuilding the entire project into Lambdas. There were other solutions like Fly.io and Heroku, but they weren't free. I found Oracle's Cloud product offering, which does have a free tier. However, they essentially offer two VM machines with 1 GB of memory and 50 GB of storage as well as 2 50 GB attachable volumes and a network configuration. Decided to use this along with Dokku running on one VM as the way to host the website.

Re-opening due to issues with dokku github action

Re-opening because my last PR commit to fix this issue didn't have the correct commit title, so the release pipeline did not release a new version. Because of this, the deploy pipeline never ran so I don't know if the changes worked or not. Creating a new PR with some small changes to the readme to kick off the deploy pipeline this time.

:tada: This issue has been resolved in version 1.1.11 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:

Re-opening again due to the push to tag event not being triggered with the release workflow is run. Going to use the workflow_run event instead to try and get the deploy workflow to trigger instead.

:tada: This issue has been resolved in version 1.1.12 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:

Re-opening again due to the Deploy workflow failing. Looks like the git_remote_url isn't correct so adding yet another PR to fix that.

:tada: This issue has been resolved in version 1.1.13 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:

Re-opening again due to the docker image URL not being formatted correctly.

:tada: This issue has been resolved in version 1.1.14 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:

Re-opening again due to Dokku being unauthorized to pull the Docker image from ghcr.io

Re-opening due to fixing allowed domains

:tada: This issue has been resolved in version 1.1.16 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:

Re-opening again because docker image URL is the same for every deploy. I need to attach the digest to the end of the image URL so that Dokku will know to pull the updated image.

:tada: This issue has been resolved in version 1.1.17 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:

Re-opening because trigger on push to tags doesn't work. Trying on release instead.

:tada: This issue has been resolved in version 1.1.18 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:

Reopening because I forgot to remove the check from the workflow_run trigger

:tada: This issue has been resolved in version 1.1.19 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


How to working with border and / or styling

Hi there,
I just making some data that have some number and text,

And I want to make like this, (add border, bold text and text aligment)

Any documentation for this kind or something I can work with.?

Check out the docs about cell formatting
You can update the formatting properties and then call sheet.saveUpdatedCells() and it should do the trick.


fix(gitlab): modify concurrency and NewApiCLient

Summary
Change modification of concurrency to api_collector.go
Modify gitlab NewApiClient
Does this close any open issues?
Please mention the issues here.
Screenshots
Include any relevant screenshots here.
Other Information
Any other information that is important to this PR.

unit test had failed


[#5023] enable pws

Resolves #5023
We were disabling the use of the "PWS" collection pending modifications in the Geoconnex API.
Those changes are complete.
So this PR enables the pws collection in HS.

Pull Request Checklist:

[x] Positive Test Case Written by Dev

[ ] Automated Testing

[ ] Sufficient User and Developer Documentation

[ ] Passing Jenkins Build

[ ] Peer Code review and approval

Positive Test Case

Create a resource with spatial extent
Search geoconnex collections for the pws collection and select it
PWS features will map without error

@Maurier I moved the notification for exceeding 1000 item limit:
BEFORE:

AFTER:


[Question] slow-down with Haskell section

Current behavior
The prompt is working fine but in directories containing a stack.yaml file, thus triggering the haskell (stack) section, there is a pause (about 1 second) after the execution of any command.
Expected behavior
Shorter pause
Relevant Zsh configuration (.zshrc)
Enable haskell section
Environment
Spaceship version: 3.11.2 (use echo $SPACESHIP_VERSION)
Zsh version: 5.7.1
Zsh framework: None
Zsh plugin manager: None
Terminal emulator: Konsole
Operating system: Linux
Screenshot

Possible solution
As shown in the gif, the reason of that slow-down is (obviously) the only thing the extension does: stack ghc -- --numeric-version --no-install-ghc to get the version of the GHC used.
Using directly ghc --numeric-version without interfacing with stack is faster and removes most of the notable pause, though it's still noticeable.
I'm only filing an issue as this isn't a fix in any way (installing a local version of GHC is an important feature of stack and that's where the haskell section becomes useful) ; but mostly for two questions: Is the extension worth such a slow-down?
Also it doesn't seem to follow your guidelines about minimal information: I only installed stack and ghc itself globally. Therefore I only have one version of ghc throughout my system, and not local to a repo. But the extension doesn't check this, and just shows me the version of ghc that will be used, even though there's only one. I'm thinking about this in comparison to the pyenv extension, which will not activates if there's only one version.

You can find the answer in #219


flush!() macro

Just like there is println! and eprintln! there should be a flush!() macro which basically flushes stdout. Actually, maybe the stream should be an argument, like flush!(stdout) or flush!(stderr), but default to stdout.
An example macro would be:

macro_rules! flush {
    () => {
        flush!(stdout);
    };
    (stdout) => {
        ::std::io::stdout().flush().unwrap();
    };
    (stderr) => {
        ::std::io::stderr().flush().unwrap();
    }
}

// This wouldn't be necessary
// in the same way it's not necessary
// for print! or eprint!.
use std::io::Write;

fn main() {
    print!("Hello World");
    flush!();
    eprint!("Error");
    flush!(stderr);
    // Sleep here to actually see the difference.
}

What do you think?

What do you mean by flush? To me flush means empty out the whole buffer but with the way that printing to sdtout/stderr is done (requiring a lock) the buffer should be empty after every println!

I mean like fflush(stdout) in C. Basically flusing the system stream

Anything that implements the writer trait (like stdout) has a method called flush available. As such there's no need for this macro which just looks like convenience wrapper more than anything else. The other problem is that macros are top level export so adding them is usually a lot harder than a new method. I don't think this is a good addition to the standard library but if you find yourself needing it you can just implement it for yourself.

While that definitely does make sense, I have to ask... Why are there println! et.c macros available when you can just call io::stdout().write_all(format!("what{}", "ever"))... I'd guess for convenience. So what makes a flush! macro less important? It's probably nearly always used when you'd use print!

Your approach allocates a string, println! doesn't.

Right, ok. But I could still use the write! or writeln! macro...

So what makes a flush! macro less important? It's probably nearly always used when you'd use print!

Statistics. So far there is no proof that io::stdout().flush().unwrap() is as common as println!. If it is so common that you are writing it everywhere, then syntactical sugar or macros are justified. In the flush case I don't see this. Could you compile some numbers from crates that use flush (how many crates, how many times do they use flush, ...)?

There's always the option of making a crate for this and seeing how many people use it. I'm with @oli-obk in thinking that this isn't a sufficiently prevalent problem to warrant adding a macro the standard library.


typedef-whitespace onespace doesn't accept newlines

Bug Report

TSLint version:  3.15.1
TypeScript version:  2.1.0-dev.20160731
Running TSLint via:  CLI / vim syntastic

TypeScript code being linted
/**
 * Problem comes up when function signature exceeds line length limit
 * and I have to break it onto multiple lines
 */
function example(
  {a, b}:
  {a: number, b: number}
) {
  return "Hello, World!";
}

with tslint.json configuration:
"extends": "tslint:recommended"

Actual behavior
test.ts[2, 10]: expected onespace after colon in parameter
Expected behavior
tslint should accept a newline as a valid separator for type definitions

fixed by #1531

Can you please publish a bugfix release that includes this fix?

4.0.0-dev.0 and 4.0.0-dev.1 include the fix, does that work for you? or do you need a 3.15 patch

How many more breaking changes are expected before 4.0 final? If most breaking changes are already implemented, I could upgrade to dev.1. But if more are coming, I'd prefer a 3.15 patch so I can get this fix now, and then do all of my 4.0 changes later, in a single batch.


Update MD file on new branch 2017-11-17_09-26-48

:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

split/updateTestRef1.md
:white_check_mark:Succeeded

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.


Add automation for signing #696

Doc is here:
https://integritee.atlassian.net/wiki/spaces/INTEGRITEE/pages/274694145/SGX

why is this assigned to me?

Close it in favour of #1295


updating readme from template content

Purpose/implementation Section
What changes are being implemented in this Pull Request?
What was your approach?
What GitHub issue does your pull request address?
Tell potential reviewers what kind of feedback you are soliciting.
New Content Checklist

[ ] New content/chapter is in an Rmd file with this kind of format and headers.

[ ] New content/chapter contains learning objectives.

[ ] Bookdown successfully re-renders and any new content files have been added to the _bookdown.yml.

[ ] Spell check runs successfully).

[ ] Any newly necessary packages that are needed have been added to the Dockerfile and image.

[ ] Images are in the correct format for rendering.

[ ] Every new image has alt text and is in a Google Slide.

[ ] Each slide is described in the notes of the slide so learners relying on a screen reader can access the content. See https://lastcallmedia.com/blog/accessible-comics for more guidance on this.

[ ] The color palette choices of the slide are contrasted in a way that is friendly to those with color vision deficiencies.
You can check this using Color Oracle.

bypassing branch protections since this is just basic clean up of README


Bl 825 be subtask add date

Description
This was a quick fix, updated courses and instructors table to aid with rendering of dates and sorting functionality
Fixes # (issue)
Loom Video
Type of change
Please delete options that are not relevant.

[x] New feature (non-breaking change which adds functionality)

Checklist:

[x] My code follows the style guidelines of this project
[x] I have performed a self-review of my own code
[x] I have removed unnecessary comments/console logs from my code
[x] I have made corresponding changes to the documentation if necessary (optional)
[x] My changes generate no new warnings
[x] I have checked my code and corrected any misspellings
[x] No duplicate code left within changed files
[x] Size of pull request kept to a minimum
[x] Pull request description clearly describes changes made & motivations for said changes

These changes look good to me!

this is good to go


I Was Compiling The Game But, There Is An Error In Discord.hx

Describe your problem here.

It Says:
source/Discord.hx:4: characters 8-30 : Type not found : discord_rpc.DiscordRpc
source/Discord.hx:79: characters 3-13 : Type not found : DiscordRpc
source/Discord.hx:18: characters 3-13 : Type not found : DiscordRpc
source/Discord.hx:28: characters 4-14 : Type not found : DiscordRpc
source/Discord.hx:33: characters 3-13 : Type not found : DiscordRpc
source/Discord.hx:38: characters 3-13 : Type not found : DiscordRpc
source/Discord.hx:43: characters 3-13 : Type not found : DiscordRpc
Are you modding a build from source or with Lua?
Source
What is your build target?
Windows x64
Did you edit anything in this build? If so, mention or summarize your changes.
Yes, I Edited The Application's Name.

I Don't Know How To Fix It Because I'm A Newbie

What exactly did you edit? The name in Project.xml or the build's name?

Did you run this on your command prompt?
haxelib git discord_rpc https://github.com/Aidan63/linc_discord-rpc

First I Only Changed The Application Name
And Second Yes I Did

What exactly did you edit? The name in Project.xml or the build's name?

In The Project.xml


Favorite menu and adding to list icon missing

Hi, when I compare with Java version cinematic app, I saw the favorite option is missing in flutter app. Please enhance to provide such.
Thanks.

Hi @sarada
I implemented the favorite functionality now. As of now it just stores the favorites in SharedPreferences but I am planing to move that to a database, after evaluating my options :smile:


Add errors to AddMetrics calls for Cassandra API

Previously, calls to AddMetrics in the Cassandra API instances always returned nil to indicate error, even if there was an error. This was because they didn't actually check errors returned by query execution, for example.
This pull request adds error checking. It also fixes a very small space leak which would cause some goroutines to hang forever in the event of a query timeout.

LGTM.