location fallback system

Am just posting/ideating this here to see if its something you're interested in adding, since this is a bit more state-ful than HPI typically is (this would include a CLI which saves data to disk based on prompting the user).  I thought about making this a separate project but I think dealing with all this messy data is sort of HPI is good for, so it would be nice to have an interface thats easily extendible in here
Ive been creating something similar for my where_db CLI and we already have home locations as fallback, so I thought it would be nice to formalize it into an API thats easier to extend, like:
my/location/fallback/all.py
my/location/fallback/via_home.py (rename locations/homes.py to here)
my/location/fallback/common.py
my/location/fallback/via_prompt.py
my/location/fallback/via_photos.py
my/location/fallback/via_ip.py

via_photos because I have lots of photos on disk but not all of them I actually want to use for location, so this would let me confirm which ones to do that for (could also maybe improve on photos.py somehow)
via_prompt being a manual entry of the namedtuple described below
Namedtuple would be something like:
class FallbackLocation(NamedTuple):
    lat: float
    lon: float
    dt: datetime
    accuracy: Optional[float]
    elevation: Optional[float]
    duration: Optional[timedelta]
    end_dt: Optional[datetime]

    def to_location(self) -> Location:
          return Location(...)

Either duration (how long this location is valid for) or end_dt (when this location is no longer valid) has to be set.
And then all would call some function that prioritizes/picks which source to use, based on the order theyre returned in, like:
def estimate_location(dt: time) -> FallbackLocation:
    return estimate_from(
         dt,
         fallbacks=(via_prompt, via_photos, via_ip, via_home)
    )

It would call each fallback function, and then use the one with the closest accuracy (which typically would be entered or estimated through a config block in each module)
This would require the user to prompt the user, so could probably just have a main function and run this like python3 -m my.location.fallback.via_prompt? Or could hook it into the CLI, either way.
Strategy in general Ive thought of:

sort all valid locations by some accuracy threshold, find dates which dont have accurate locations
use other sources (ips, manual entry (via_prompt), homes) as fallbacks for each of those days
pick the one with the highest accuracy

The choices the user picks would cached (so they arent re-prompted), so this would need to save to a JSON file or something, e.g. to ~/data/locations/via_prompt.json, ~/data/locations/via_ip.json
Im a bit split between actually saving data, or saving a 'sourcemap/transform' of sorts -- I recently did something similar for my scramble_history project, which lets me define keys to look for on any object, and then it defines a mapping file which converts one model into another -- that way were not actually duplicating data, its a bit more programatic, and you can sort of define 'behavior' to transform one piece of data (e.g. IPs) into locations
Not heavily attached to any of these ideas
--
As a sidenote, I had another idea for sorted locations as we discussed in #237 -- I had an idea to create a custom class which just yields the iterator, but then in the merge in all.py, we can just do an isinstance check on the iterator itself to check if its the class, like
class SortedLocationIterator:
    def __init__(self, sorted_locations):
        self.location = iter(sorted_locations)

    def __iter__(self):
        return self

    def __next__(self):
        return next(self.location)

In [1]: import test

In [2]: x = test.SortedLocationIterator(range(5))

In [3]: x.__class__
Out[3]: test.SortedLocationIterator

In [4]: next(x)
Out[4]: 0

That way its still all backwards compatible and only if all sources are SortedLocationIterator do we do a mergesort of sorts.
This could all be added behind a flag as well, but would really speed up sorting locations
Then in tz.via_location for example, if all.py return type is a SortedLocationIterator, we know its been sorted by the user and we dont have to sort it ourself

not urgent or anything, but just thought Id ping you @karlicoss

Ah sorry -- in this case saw the notification -- just was a bit busy with other things!

could probably just have a main function and run this like python3 -m my.location.fallback.via_prompt'

Yeah seems good -- at least to start with!

The choices the user picks would cached (so they arent re-prompted)

Hmm, not sure I understood -- what would the user pick here? Seems that it's possible to pick the source automatically, just by using accuracy?

The choices the user picks would cached (so they arent re-prompted), so this would need to save to a JSON file or something, e.g. to ~/data/locations/via_prompt.json, ~/data/locations/via_ip.json

Similarly, not sure I understand -- makes sense to have via_prompt.json, to save manually entered locations, but what would be in via_ip.json :thinking:

That way its still all backwards compatible and only if all sources are SortedLocationIterator do we do a mergesort of sorts.

Yeah, seems like a good idea! Maybe there is even something existing in more_itertools we could reuse

The choices the user picks would cached (so they arent re-prompted)

Ah, sorry; didn't totally describe this here. The sources/fallback for a day would all be picked automatically, based on what data is available on the day, which has the highest accuracy etc.
The prompting I'm referring to is to confirm a location based on an IP address, as some of the IP addresses I have from 2012-2013 when geolocated now, return incorrect locations, like in random parts of europe/islands I've never been to (I'm assuming that these IPs were bought out by another company, and the location now is different?)
Could also probably check if the location is within some distance of a known/home location and then auto-confirm it, so you're not prompting for everything, just for what look like outlier addresses
The same thing may (or might not, havent gone through the latitude/longitutde tags on my images ever, so will see it is a problem that needs fixing) be a problem for images in my photos directory which I didn't take (so the location should not be used), but happen to be geotagged
could also let the user define a custom function in their config like:
def filter_ips(ips: Iterable[IP]) -> Iterable[IP]:
    # custom login user can define

class location:
    class fallback:
        filter_function = filter_ips

so they can remove swaths of IP addresses before/within some date etc.

The prompting I'm referring to is to confirm a location based on an IP address, as some of the IP addresses I have from 2012-2013 when geolocated now, return incorrect locations

Ah gotcha! So it's basically some tooling/overlay/filter to 'review' the data, good idea.
This seems like a lot of data to sift through though, so not sure how feasible would it really be to go through everything?
The json would end up quite huge though, right? Perhaps it could be backed by sqlite, maybe even cachew somehow.
Also maybe makes more sense to keep the data that was bad rather than the data that was good, hopefully it would mean less stuff to keep? And won't require approving "new" data since the last review before it makes it into the location provider.

could also let the user define a custom function in their config like

I think at this point it could just be a personal overlay? At least to start with/expreiment cause it's less intrusive than defining a config etc.
E.g. here I have an example https://github.com/karlicoss/hpi-personal-overlay/blob/master/src/my/calendar/holidays.py#L1-L14

The same thing may (or might not, havent ever gone through the latitude/longitutde tags on my images, so will see it is a problem that needs fixing) be a problem for images in my photos directory which I didn't take (so the location should not be used), but happen to be geotagged

I guess the whole thing could be quite generic in principle (at the very list you could drop datapoints). But kinda requires stable ids for each piece of data https://github.com/karlicoss/promnesia/issues/173

Perhaps it could be backed by sqlite, maybe even cachew somehow

Yeah, Im not really set on any storage/strategy yet, will experiment when I get there and see what makes sense

Also maybe makes more sense to keep the data that was bad rather than the data that was good, hopefully it would mean less stuff to keep? And won't require approving "new" data since the last review before it makes it into the location provider.

Ah true, but would then need to have some way to find 'unlikely/bad' entries, so you can at least warn user?
As otherwise things get auto approved, and you might have incorrect data -- but maybe it should be up to the user to flag bad entries.
Will keep these all open as options while Im bootstrapping this

I think at this point it could just be a personal overlay

Ah true, I'll probably add some more documentation for that as well

stable IDs

yeah, that is something Ive had the thought about a few times (same with IPs above), would be more convenient for the user. but also, these could all be solved with an hpi overlay, but thats a lot more involved than just adding something to your my.config which automatically filters some entries.
could experiment with adding something to hpi query that lets you add hooks to your my.config, maybe to a my.config.query block which does some checking for the names of the modules? instead of modifying every module to check a filter in my.config, just localize that to hpi query like:
def _custom_filter_function(ip: IP) -> bool:
     if ...:
         return  False
     return True

class query:
    filters: Dict[str, Callable[[T], bool]] = {
        "my.ip.all": _custom_filter_function
   }

I dont really want to wrap every module in a decorator that checks the my.config file though, a bit too boilerplate-y

Oh, and on the stable IDs, perhaps we can at least move a bit closer to that/define some standard behaviour?
Like, each namedtuple/dataclass can define a unique key on the data, sort of like in the google_takeout_parser/models.py.  Could be a uuid/prop @property or something.  If a datasource already provides a unqiue ID that can be returned, else can estimate one with datetimes/sha-hashing the input etc.
may not be able to do that for every source, but at least when its useful theres some sort of standard a module can opt-into

If you don’t mind the interjection, I think I can highlight something that might be getting missed:
I suspect that @seanbreckenridge and I have a similar desire for absolute truth even if it means putting in the extra work manually.
From that perspective someone can see that in-file metadata can be (and has been) wrong, and that it’s important for an “absolute truth” system to recognize when we’ve marked a correction and to even favour that correction.
For example:

An image is taken and the device records the wrong date in to the EXIF tag
As we ingest the unaltered image file, we can see what the date was supposed to be (within about 5min) because the memory is fresh

Now, we could alter the EXIF tag but that corrupts the ideal of this file being the original copy (yes I’m going a bit far with this, but date is still tricky to modify and other metadata types are not as forgiving)
What would be better for archival purposes is a record of the correction, maybe a  note about why it was wrong, and the system moving forward with the corrected data. This keeps the original untouched, leaves an audit trail, and still lets us view reports without having to think about it again.
And the dream of our system being a source of absolute truth stays intact.

and I have a similar desire for absolute truth even if it means putting in the extra work manually

As we ingest the unaltered image file, we can see what the date was supposed to be (within about 5min

true, I would personally be fine with putting in the extra work, but I don't want to put that burden on everyone else using the module
In my opinion at least, HPI is meant to be able to take messy data as input and deal with it, and return (not throw) errors/warnings when it cant. (which is also sort of stated in reasonably defensive and extensible in the design docs)
This also slightly feels outside of the realm of HPI (at least for fixing tags on images), (which is also why I left the comment at the top):
"since this is a bit more state-ful than HPI typically is (this would include a CLI which saves data to disk based on prompting the user)"
Could give the user both the choices:

use all images in a directory and just use everything
manually confirm everything
[or something in between using some heuristics/known locations... ?]

but it is getting pretty complicated to maintain all of this in this repo at that point, and it doesn't need to be here
For images in particular, what might make sense is to create a separate repo/CLI tool which manages your images in the custom way we may want, probably built on top of an existing project like elodie (or something else, havent scoured for related projects yet).
That repo would let you import/manage your photos incrementally, and could be used for people who want the absolute truth/to confirm all of their image data, and then we'd just have a file here like my/photos/photo_importer.py which parses the output of that CLI tool

What would be better for archival purposes is a record of the correction, maybe a note about why it was wrong, and the system moving forward with the corrected data. This keeps the original untouched, leaves an audit trail, and still lets us view reports without having to think about it again.

I do think this is a great idea, and will try to implement something like this at some point

Like, each namedtuple/dataclass can define a unique key on the data

Yeah, I've been reluctant to do it so far unless necessary (and in particular, advertise as a stable uuid). I guess my hope was that it could be mostly agnostic, e.g. derived from the timestamp or something. But that could be tricky too, even timestamps might change for various reasons.
I wonder if there is any good prior art we could inspire from -- seems like a common problem?

Now, we could alter the EXIF tag but that corrupts the ideal of this file being the original copy (yes I’m going a bit far with this, but date is still tricky to modify and other metadata types are not as forgiving)

Yeah agreed -- plus it's not always feasible to modify the metadata directly, e.g. you could have something coming from google takeout, so you'd have to patch up files every time you do a takeout (as opposed to a programmatic overlay).

What would be better for archival purposes is a record of the correction, maybe a note about why it was wrong, and the system moving forward with the corrected data. This keeps the original untouched, leaves an audit trail, and still lets us view reports without having to think about it again.
Yep, totally agree!

This also slightly feels outside of the realm of HPI (at least for fixing tags on images),

For images in particular, what might make sense is to create a separate repo/CLI tool which manages your images in the custom way we may want,

I guess it depends on how generic we can make it -- if it 's possible to make it work in a somewhat agnostic manner, just on top of namedtuples/dataclasses I don't see why not. But specific UIs/logic to analyse and review data don't have to be in core HPI yeah.

Hmm -- the more I try to implement any sort of confirmation mechanism its either:

to much work for the user
or, has to use other sources to find outliers, which would make this especially difficult to debug if anything went wrong

I think instead would be easier to add a filter function just to the config like:
def filter_ips(ip: IP) -> bool:
    # user defined behaviour here...

class location:
    class fallback:
        class via_ip:
            filter = filter_ips
			accuracy: float = 10_000

Sitenote: This filter could also instead be called from my.ip.all, as those are 'incorrect' IPs. Doesnt particularly matter where, just wanted to bring up the idea of the filter in config, as I could see it possibly being used in other sources in the future.
And then have some documentation on how to use it? Could even have 'recipes' or something using some shared functions in my.core.common that help prompt user/save data to disk. Would be better to actually try and add this to a few sources and see common patterns that emerge instead of trying to think myself through all the possibilities here

Oh also, I tried implementing the SortedLocation thing, but the types get lost when you do a yield from SortedLocation(..., and cachew may interfere with this as well (not sure). Just doing return SortedLocations(...) makes it non-lazy, so you have to read in all locations before you can return the first from the generator, which is pretty bad...
diff --git a/my/location/all.py b/my/location/all.py
index eec4bcc..627fe5d 100644
--- a/my/location/all.py
+++ b/my/location/all.py
@@ -7,7 +7,7 @@ from typing import Iterator
 from my.core import Stats, LazyLogger
 from my.core.source import import_source

-from .common import Location
+from my.location.common import Location, SortedLocations

 logger = LazyLogger(__name__, level="warning")
@@ -15,9 +15,11 @@ logger = LazyLogger(__name__, level="warning")

 def locations() -> Iterator[Location]:
     # can add/comment out sources here to disable them, or use core.disabled_modules
-    yield from _takeout_locations()
-    yield from _gpslogger_locations()
-    yield from _ip_locations()
+    yield from SortedLocations.map_sort(
+        _takeout_locations(),
+        _gpslogger_locations(),
+        _ip_locations(),
+    )

 @import_source(module_name="my.location.google_takeout")
diff --git a/my/location/common.py b/my/location/common.py
index 5b5c33f..b1391fe 100644
--- a/my/location/common.py
+++ b/my/location/common.py
@@ -1,9 +1,14 @@
+from __future__ import annotations
 from datetime import date, datetime
-from typing import Union, Tuple, Optional
+from typing import Union, Tuple, Optional, Iterable, TypeVar
 from dataclasses import dataclass

+
 from my.core import __NOT_HPI_MODULE__
 from my.core.compat import Protocol
+from my.core.common import LazyLogger
+
+logger = LazyLogger(__name__, level='warning')

 DateIsh = Union[datetime, date, str]

@@ -32,3 +37,44 @@ class Location(LocationProtocol):
     accuracy: Optional[float]
     elevation: Optional[float]
     datasource: Optional[str] = None  # which module provided this, useful for debugging
+
+
+L = TypeVar("L", bound=LocationProtocol)
+
+# functionality related to merging sorting iterators of locations
+# using heapq.merge https://docs.python.org/3/library/heapq.html
+
+class SortedLocations(Iterable[L]):
+    def __init__(self, locations: Iterable[L], sort_input: bool = True):
+        self.sort_input = sort_input
+        self._locations: Iterable[L] = locations
+
+        # if this is already a SortedLocations, don't sort again
+        if not isinstance(locations, SortedLocations):
+            if sort_input:
+                self._locations = list(locations)
+                self._locations.sort(key=lambda x: x.dt)
+        self._iter = iter(self._locations)
+
+    def __iter__(self) -> SortedLocations:
+        return self
+
+    def __next__(self) -> L:
+        return next(self._iter)
+
+    @classmethod
+    def map_sort(cls, *locations: Iterable[L]) -> SortedLocations:
+        '''
+        Sorts locations from each iterable, then merge them
+        '''
+        logger.debug(f"Sorting locations from {len(locations)} sources")
+        # if already sorted, should be close to O(1) anyways, so shouldnt matter that much
+        # its safer to sort again, but user can opt out by wrapping their input in
+        # SortedLocations(..., sort_input=False), which will skip the sort in the constructor
+        locs = cls.sort(*(cls(loc) for loc in locations))
+        return cls(locs, sort_input=False)
+
+    @staticmethod
+    def sort(*locations: Iterable[L]) -> Iterable[L]:
+        import heapq
+        return heapq.merge(*locations, key=lambda x: x.dt)
diff --git a/my/location/fallback/via_ip.py b/my/location/fallback/via_ip.py
index 0e8fb05..3bd4775 100644
--- a/my/location/fallback/via_ip.py
+++ b/my/location/fallback/via_ip.py
@@ -4,10 +4,12 @@ Converts IP addresses provided by my.location.ip to estimated locations

 REQUIRES = ["git+https://github.com/seanbreckenridge/ipgeocache"]

+from datetime import datetime
+
 from my.core import dataclass, Stats
 from my.config import location
 from my.core.warnings import medium
-from datetime import datetime
+from my.location.common import SortedLocations

 @dataclass
@@ -42,7 +44,7 @@ def fallback_locations() -> Iterator[FallbackLocation]:
 # for compatibility with my.location.via_ip, this shouldnt be used by other modules
 def locations() -> Iterator[Location]:
     medium("via_ip.locations is deprecated, use via_ip.fallback_locations instead")
-    yield from map(FallbackLocation.to_location, fallback_locations())
+    yield from SortedLocations(iter(map(FallbackLocation.to_location, fallback_locations())))

 def estimate_location(dt: datetime) -> Location:
diff --git a/my/location/google_takeout.py b/my/location/google_takeout.py
index 80b31cb..2aed070 100644
--- a/my/location/google_takeout.py
+++ b/my/location/google_takeout.py
@@ -10,7 +10,7 @@ from my.google.takeout.parser import events, _cachew_depends_on
 from google_takeout_parser.models import Location as GoogleLocation

 from my.core.common import mcachew, LazyLogger, Stats
-from .common import Location
+from my.location.common import Location, SortedLocations

 logger = LazyLogger(__name__)

@@ -20,11 +20,17 @@ logger = LazyLogger(__name__)
     logger=logger,
 )
 def locations() -> Iterator[Location]:
-    for g in events():
-        if isinstance(g, GoogleLocation):
-            yield Location(
-                lon=g.lng, lat=g.lat, dt=g.dt, accuracy=g.accuracy, elevation=None
-            )
+    def _locations() -> Iterator[Location]:
+        for g in events():
+            if isinstance(g, GoogleLocation):
+                yield Location(
+                    lon=g.lng,
+                    lat=g.lat,
+                    dt=g.dt, accuracy=g.accuracy,
+                    elevation=None,
+                    datasource="google_takeout",
+                )
+    return SortedLocations(_locations())

 def stats() -> Stats:
diff --git a/my/location/gpslogger.py b/my/location/gpslogger.py
index 95f4474..79e3628 100644
--- a/my/location/gpslogger.py
+++ b/my/location/gpslogger.py
@@ -17,7 +17,6 @@ class config(location.gpslogger):
     accuracy: float = 50.0

-from itertools import chain
 from datetime import datetime, timezone
 from pathlib import Path
 from typing import Iterator, Sequence, List
@@ -27,14 +26,17 @@ from more_itertools import unique_everseen

 from my.core import Stats, LazyLogger
 from my.core.common import get_files, mcachew
-from .common import Location
+from my.location.common import Location, SortedLocations

 logger = LazyLogger(__name__, level="warning")

 def inputs() -> Sequence[Path]:
-    return get_files(config.export_path, glob="*.gpx")
+    # sort by timestamp so that we can merge them in order
+    # gpslogger files can optionally be prefixed by a device id,
+    # so we can't always just sort by name
+    return sorted(get_files(config.export_path, glob="*.gpx", sort=False), key=lambda p: p.stat().st_mtime)

 def _cachew_depends_on() -> List[float]:
@@ -45,7 +47,11 @@ def _cachew_depends_on() -> List[float]:
 @mcachew(depends_on=_cachew_depends_on, logger=logger)
 def locations() -> Iterator[Location]:
     yield from unique_everseen(
-        chain(*map(_extract_locations, inputs())), key=lambda loc: loc.dt
+        # sort each file, then merge them all together
+        SortedLocations.map_sort(
+            *map(_extract_locations, inputs())
+        ),
+        key=lambda loc: loc.dt,
     )

@@ -65,6 +71,7 @@ def _extract_locations(path: Path) -> Iterator[Location]:
                         accuracy=config.accuracy,
                         elevation=point.elevation,
                         dt=datetime.replace(point.time, tzinfo=timezone.utc),
+                        datasource="gpslogger",
                     )

diff --git a/my/time/tz/via_location.py b/my/time/tz/via_location.py
index 6b8e835..c56c8af 100644
--- a/my/time/tz/via_location.py
+++ b/my/time/tz/via_location.py
@@ -75,7 +75,7 @@ class DayWithZone(NamedTuple):
     zone: Zone

-from my.location.common import LatLon
+from my.location.common import LatLon, SortedLocations

 # for backwards compatibility
 def _locations() -> Iterator[Tuple[LatLon, datetime]]:
@@ -99,7 +99,18 @@ def _locations() -> Iterator[Tuple[LatLon, datetime]]:
 # TODO: could use heapmerge or sort the underlying iterators somehow?
 # see https://github.com/karlicoss/HPI/pull/237#discussion_r858372934
 def _sorted_locations() -> List[Tuple[LatLon, datetime]]:
-    return list(sorted(_locations(), key=lambda x: x[1]))
+    is_already_sorted = False
+    try:
+        import my.location.all
+        is_already_sorted = isinstance(my.location.all.locations(), SortedLocations)
+    except Exception:
+        pass
+
+    if is_already_sorted:
+        logger.debug("my.location.all.locations() is already sorted, skipping sort")
+        return list(_locations())
+    else:
+        return list(sorted(_locations(), key=lambda x: x[1]))

 # Note: this takes a while, as the upstream since _locations isn't sorted, so this
@@ -192,7 +203,7 @@ def _get_day_tz(d: date) -> Optional[pytz.BaseTzInfo]:

 # ok to cache, there are only a few home locations?
 @lru_cache(maxsize=None)
-def _get_home_tz(loc) -> Optional[pytz.BaseTzInfo]:
+def _get_home_tz(loc: LatLon) -> Optional[pytz.BaseTzInfo]:
     (lat, lng) = loc
     finder = _timezone_finder(fast=False) # ok to use slow here for better precision
     zone = finder.timezone_at(lat=lat, lng=lng)
@@ -203,7 +214,7 @@ def _get_home_tz(loc) -> Optional[pytz.BaseTzInfo]:
         return pytz.timezone(zone)

-def _get_tz(dt: datetime) -> Optional[pytz.BaseTzInfo]:
+def get_tz(dt: datetime) -> Optional[pytz.BaseTzInfo]:
     '''
     Given a datetime, returns the timezone for that date.
     '''
@@ -211,16 +222,13 @@ def _get_tz(dt: datetime) -> Optional[pytz.BaseTzInfo]:
     if res is not None:
         return res
     # fallback to home tz
-    from ...location import home
-    loc = home.get_location(dt)
+    from my.location.fallback.via_home import get_location as get_home_location
+    loc = get_home_location(dt)
     return _get_home_tz(loc=loc)

-# expose as 'public' function
-get_tz = _get_tz
-

 def localize(dt: datetime) -> tzdatetime:
-    tz = _get_tz(dt)
+    tz = get_tz(dt)
     if tz is None:
         # TODO -- this shouldn't really happen.. think about it carefully later
         return dt

You could always just sort the inputs anyways (which is what I tried), since TimSort (default python sort) should have a fast case when big chunks (or the whole list) are already sorted, but then youre always doing a list(sorted(itr)) on every source before you can start the heapmerge.
Could add some version of this that the user can opt-in to, but hard to make it automatic

Going to close this in favor of #276


Dynamic rigid actors'appearance from  non-visible angles

Thanks for your great work!
How does Neurad address the appearance of dynamic rigid actors from non-visible angles

We have a (left-right) symmetry prior, so we can handle some non-visible angles. But we don't handle other non-visible angles, e.g., rendering the front of a car that has been seen only from behind

thanks for your reply!

We have a (left-right) symmetry prior, so we can handle some non-visible angles. But we don't handle other non-visible angles, e.g., rendering the front of a car that has been seen only from behind

thanks for your reply!

We have a (left-right) symmetry prior, so we can handle some non-visible angles. But we don't handle other non-visible angles, e.g., rendering the front of a car that has been seen only from behind

can you please give any code link  about the  symmetry prior ?thanks a lot

We have a (left-right) symmetry prior, so we can handle some non-visible angles. But we don't handle other non-visible angles, e.g., rendering the front of a car that has been seen only from behind

can you please give any code link about the symmetry prior ?thanks a lot

I think it could be https://github.com/georghess/neurad-studio/blob/b7012ac5ac41c8ac86a63ba7ba799bd27a57d2f0/nerfstudio/field_components/neurad_encoding.py#L211

Exactly. During training, we randomly flip actors to supervise both sides of them.

We have a (left-right) symmetry prior, so we can handle some non-visible angles. But we don't handle other non-visible angles, e.g., rendering the front of a car that has been seen only from behind

can you please give any code link about the symmetry prior ?thanks a lot

I think it could be
https://github.com/georghess/neurad-studio/blob/b7012ac5ac41c8ac86a63ba7ba799bd27a57d2f0/nerfstudio/field_components/neurad_encoding.py#L211

got it!Thank you very much!

Apply random flip if applicable

got it too!Thank you very much!


Add "Physical Flow" as Selectable 'Entity Kind' when Creating a New Involvement Kind

Description
On the Physical Flow Page, People section, you cannot add a Person because there are no roles selectable; Unable to add selectable roles because "Physical Flow" does not appear to be an allowable 'Entity Kind'
Classifying this as a feature request; I'm not sure if there are other types that need to be added as well to make sure all entity types can have people associated with them. Also not sure if my trace through below is the proper line of thinking for why this isn't working.
sample endpoint: ../physical-flow/2

Additional Details:

This Involvement Kind creation screen dropdown “Entity kind these involvements are associated to” is missing PHYSICAL_FLOW

waltz-ng/client/involvement-kind/components/svelte/InvolvementKindTable.svelte
entityList is used for the list

entityList is a hard-coded list above <-- you can see this list corresponds one-to-one with the dropdown from the GUI

‘entity’ comes from -> import {entity} from "../../../common/services/enums/entity";

waltz-ng/client/common/services/enums/entity.js

There is a “PHYSICAL_FLOW” entry here but I don’t know if it’s as simple as adding it to the entityList or if other changes are needed to bring this together

Resourcing
We would like to add this request to the Waltz team's feature backlog

I made this change locally and it looks like it works the way we want. I'll create a pull request once we confirm it looks ok. Open to feedback on whether it's truly a one-liner or if there's more work to be done. Also happy to add additional Entity types here if the community has identified others that are missing


Why does extract_backtrace return Option<Option> instead of Option ?

If underlying error has None backtrace for any reason, the chained error will not get backtrace either - extract_backtrace will return Some(None) so State::backtrace will be None, and cycle will repeat again.
It seems to me it would be better if it was just Option<BT>, and the impl returned just e.state.backtrace.clone()

Yeah, it was that way so I kept it, but I should change it. Do you want to PR?


{Network} az network application-gateway url-path-map create: Update document

Related command

Description

Resolve: https://github.com/Azure/azure-cli/issues/25889
Testing Guide

History Notes

[Component Name 1] BREAKING CHANGE: az command a: Make some customer-facing breaking change
[Component Name 2] az command b: Add some customer-facing feature

This checklist is used to make sure that common guidelines for a pull request are followed.

[ ] The PR title and description has followed the guideline in Submitting Pull Requests.

[ ] I adhere to the Command Guidelines.

[ ] I adhere to the Error Handling Guidelines.

Network

@kairu-ms -  Please check the documentation I shared. As these updates need to move to different sections. Currently, default-address-pool and default-HTTP-setting both are under optional parameters. These need to move under "Required Parameters" with corrections that you have already made.
https://microsoft-my.sharepoint.com/:w:/p/rnautiyal/EZADAhQMm81KgLKMxrWW8WQB-a9Y96Ok1QHrh5MkDjIeZQ?e=HhgreP

@rnautiyal As I said, we CANNOT mark these two parameters as mandatory. Because from client side, it'll break the behavior of users who don't use these parameters before (even if only "redirection" type will happen).
And, I've added info related to this in the help message:

For breaking change, Azure CLI only allows releases in the breaking change window, not this sprint.

@necusjz - When should we see this change reflected in public document.


[pre.11] Quest 2 Controller visualization does not re-appear after switching from hand controls to the motion controllers

Describe the bug
A clear and concise description of what the bug is.
To reproduce

Use hand motion controls to navigate
Pick up and use controllers
See issue, controller visualization does not re-appear

Expected behavior
Controller visualization re-appears when switching from hand controls to motion controllers
Your setup

Unity Version 2020.3.37f1

Target platform

Quest 2

Additional Context
Differing behavior on Oculus link compared to being built. On link, defaults to generic controller model and gives warning:
Failed to obtain controller model key from platform.
UnityEngine.Debug:LogWarning (object)
Microsoft.MixedReality.Toolkit.Input.ControllerModelLoader/d__1:MoveNext () (at C:/Users/v-clandguth/MixedRealityToolkit-Unity/com.microsoft.mrtk.input/Visualizers/ControllerVisualizer/ControllerModelLoader.cs:48)
System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<UnityEngine.GameObject>:Start<Microsoft.MixedReality.Toolkit.Input.ControllerModelLoader/d__1> (Microsoft.MixedReality.Toolkit.Input.ControllerModelLoader/d__1&)
Microsoft.MixedReality.Toolkit.Input.ControllerModelLoader:TryGenerateControllerModelFromPlatformSDK (Microsoft.MixedReality.Toolkit.Handedness)
Microsoft.MixedReality.Toolkit.Input.ControllerVisualizer/d__17:MoveNext () (at C:/Users/v-clandguth/MixedRealityToolkit-Unity/com.microsoft.mrtk.input/Visualizers/ControllerVisualizer/ControllerVisualizer.cs:153)
System.Runtime.CompilerServices.AsyncVoidMethodBuilder:Start<Microsoft.MixedReality.Toolkit.Input.ControllerVisualizer/d__17> (Microsoft.MixedReality.Toolkit.Input.ControllerVisualizer/d__17&)
Microsoft.MixedReality.Toolkit.Input.ControllerVisualizer:InstantiateControllerVisuals (bool,bool)
Microsoft.MixedReality.Toolkit.Input.ControllerVisualizer:RenderControllerVisuals (UnityEngine.InputSystem.InputDevice) (at C:/Users/v-clandguth/MixedRealityToolkit-Unity/com.microsoft.mrtk.input/Visualizers/ControllerVisualizer/ControllerVisualizer.cs:118)
Microsoft.MixedReality.Toolkit.Input.ControllerVisualizer:RenderControllerVisuals (UnityEngine.InputSystem.InputAction/CallbackContext) (at C:/Users/v-clandguth/MixedRealityToolkit-Unity/com.microsoft.mrtk.input/Visualizers/ControllerVisualizer/ControllerVisualizer.cs:91)
UnityEngine.InputSystem.LowLevel.NativeInputRuntime/<>c__DisplayClass7_0:<set_onUpdate>b__0 (UnityEngineInternal.Input.NativeInputUpdateType,UnityEngineInternal.Input.NativeInputEventBuffer*)
UnityEngineInternal.Input.NativeInputSystem:NotifyUpdate (UnityEngineInternal.Input.NativeInputUpdateType,intptr)

ISSUE MIGRATION
Issue migrated from: https://github.com/microsoft/MixedRealityToolkit-Unity/issues/10978

Original comment by:
 Clandguth

Issue was not able to be reproduced since


Introduce parenthesized helper

Summary
This PR adds a new parenthesized format helper for formatting parenthesized expressions.
This doesn't seem very useful yet, but I need to apply some custom formatting to all parenthesized expressions and having a single
place to add that logic makes that easier.

Test Plan
cargo test

Current dependencies on/for this PR:

main

PR #5565   👈

This comment was auto-generated by Graphite.


Crow

python instagram_hack.py
Doesn't work

Please can you explain it more.
What is the error that you got

Use the termux with same commands 100% working


refactor [dependabot] semver stability service

Dependabot has an unusual characteristic in that we currently show a logo by default on this badge.
We don't do this on any other badges and our contribution guidelines say we only accept badges that do this if they use the 'social' style:
https://github.com/badges/shields/blob/master/CONTRIBUTING.md#badge-guidelines
This means we can't port the dependabot badge to the new service layout exactly as it stands because we now enforce this rule in the base class - only a social badge may use default logo:
https://github.com/badges/shields/blob/b08a941490f943bd33507c62ccaf42961c7001ff/services/base.js#L336
My instinct on this one is we just change this badge to bring it into line with everything else (which is what I've proposed in this PR)
This isn't a breaking change for @dependabot. The badges they use in their PRs are served from their own servers, not shields.io e.g:
 - https://api.dependabot.com/badges/compatibility_score?package-manager=bundler&dependency-name=puma&version-scheme=semver
Does that seem reasonable?

Messages

:book:
:sparkles: Thanks for your contribution to Shields, @chris48s!

  Generated by :no_entry_sign: dangerJS

My instinct on this one is we just change this badge to bring it into line with everything else (which is what I've proposed in this PR)

Yup, that makes sense to me.


Does a CLI exist?

More generally, how do I use this?  In your example, it looks like you define an anonymous function, but how does that function get invoked?

There is no CLI.
The example function is one you can name and call.


AOSP-10 vbmeta.zip link in flashing.md is wrong

I believe it should be: https://github.com/sailfishos-sony-tama/main/releases/download/<IP_ADDRESS>-aosp10-alpha1/vbmeta.zip

Thank you very much, link fixed inflashing.md


[iOS] Bubble Card Button scrolling text becomes larger on click

Describe the bug
I have a bubble card button that sometimes have a long text so I have to enable the option scrolling text to it. Whenever I click on it, the scrolling text becomes big. This only happens on iOS regardless of via App/Browser.
To Reproduce

Create a card with a very long state text and then make it scrolling.
Click on it.
You'll see that the scrolling text becomes larger

Expected behavior
It should not cause any font changes.
Screenshots
https://github.com/user-attachments/assets/207e399b-cae2-4672-8c5c-8ca527753fc2
YAML
type: custom:bubble-card
card_type: button
button_type: state
name: Upcoming TV Show
icon: mdi:youtube-tv
card_layout: normal
show_attribute: false
show_last_changed: false
show_name: true
tap_action:
  action: navigate
  navigation_path: "#upcoming-tv"
button_action:
  tap_action:
    action: navigate
    navigation_path: "#upcoming-tv"
sub_button: []
scrolling_effect: true

Informations:

OS: iOS 18.1
Browser: Arc/Chromium
Bubble Card version: 2.3.0-beta5
Home Assistant version: 2024.11.0

Thank you for the feedback, I will check that 👌


More Dependabot updates

Description of what I changed
This is the next batch of Dependabot changes that are merged into one large PR for easier handling (tests, etc.).
Please note this is on top of PR #316 and includes 23 of those commits. Also, like that PR, the commits done
by Dependabot are kept separate (after resolving conflicts) to make it clear what parts of the changes were
done manually and what was pseudo-automated.
This and this are commits that were completely manual.

E2E test

TESTED:
NA
Checklist: I completed these to help reviewers :)

[x] I have read and will follow the review process.
[x] I am familiar with Google Style Guides for the language I have coded in.
[x] My IDE is configured to follow the Google code styles.
[x] I have added tests to cover my changes. (If you refactored existing code that was well tested you do not have to add tests)
[x] I ran mvn clean package right before creating this pull request and added all formatting changes to my commit.
[x] All new and existing tests passed.
[x] My pull request is based on the latest changes of the master branch.

Closing this as it is obsolete; we need to create a new one for the many remaining dependabot PRs.


Feature/call web service

Related to https://github.com/ps-md2/md2-projects/pull/16

[ ] generate Backend WS Proxy URL into json files


Add ruby 1.8 compatibility

Although this works, the code blows up fatally when run on Ubuntu 18.04
irb(main):001:0> require 'rqrcode'
=> true
irb(main):002:0> RQRCode::QRCode.new("asdasdsa".to_s.strip)
Floating point exception (core dumped)

so we will not be pursuing this.


API simplification tracking issue

I'm not very happy with the API of graphql-ws-client at the moment:

Too many generic parameters everywhere
Integrating into new clients takes too much boilerplate
Dropping connections when the client drops makes sense but is... kind of surprising.  It's not how most other clients work for example.

Plans to fix:

[x] Remove the GraphqlClient trait https://github.com/obmarg/graphql-ws-client/pull/58
[ ] Possibly get rid of WsMessage as a generic param on the AsyncWebsocketClient
[ ] Try to get rid of the runtime: impl SpawnExt parameter - could just return a future and let users deal with it instead.  Probably less code in the end.
[ ] Change the drop behaviour - clients and subscriptions should both keep the receiver_loop running, assuming the user has spawned it somewhere persistent.  If the user wants the old behaviour they can use the returned future to drop it.
[ ] While I'm going nuts - is AsyncWebsocketClient the best name?  Not sure (not super keen to go changing that though)

I agree with most of the changes, though the serde value seems like a regression in terms of quality when we know the type that would be returned for each client.
Returning a future for the client to drive the connection is generally a good idea, that seems to be the pattern adopted by most.

Thanks for the input @Sytten - hoped you'd see this.

the serde value seems like a regression in terms of quality when we know the type that would be returned for each client.

We weren't doing anything useful with the GenericResponse in graphql-ws-client, and by moving the responsibility for deserialisation fully into StreamingOperation::decode_response we can get rid of a trait and simplify a lot of generics.
I don't see much benefit to having that additional phase of deserialisation, and from a users perspective it functions the same as it did before.  Happy to consider rolling it back if there's something I'm missing though?

Ha its been a while since I looked at the code so I trust it will be a good change.

@Sytten v0.8.0-rc.1 is out now if you want to try upgrading.  I'd love to hear any feedback you might have


Inline functions don't work when compiled ahead of time

Numba documentation specifies that other compiled functions can be inlined and called from other compiled functions. This does not seem to be true when compiling ahead of time.
For example: here are two functions that compute the inner dot product between 2 vector arrays, one of them does the actual product, the other makes the inline call within a loop:
# Module test.py
import numpy as np
from numba import njit, float64

@njit(float64(float64[:], float64[:]))
def product(a, b):
    prod = 0
    for i in range(a.size):
        prod += a[i] * b[i]
    return prod

@njit(float64[:](float64[:,:], float64[:,:]))
def n_inner1d(a, b):
    prod = np.empty(a.shape[0])
    for i in range(a.shape[0]):
        prod[i] = product(a[i], b[i])

    return prod

As is, I can do import test and use test.n_inner1d perfectly fine. Now lets do some modifications so this can be compiled to a .pyd
# Module test.py
import numpy as np
from numba import float64
from numba.pycc import CC

cc = CC('test')
cc.verbose = True

@cc.export('product','float64(float64[:], float64[:])')
def product(a, b):
    prod = 0
    for i in range(a.size):
        prod += a[i] * b[i]
    return prod

@cc.export('n_inner1d','float64[:](float64[:,:], float64[:,:])')
def n_inner1d(a, b):

    prod = np.empty(a.shape[0])
    for i in range(a.shape[0]):
        prod[i] = product(a[i], b[i])

    return prod

if __name__ == "__main__":
    cc.compile()

I get the following error:
# python test.py
Failed at nopython (nopython frontend)
Untyped global name 'product': cannot determine Numba type of <type 'function'>
File "test.py", line 20

I'm not sure if this is a bug, or user error. If this is user error I'd love to know how to fix.

Thanks for the report. I think this does what you want:
# Module test.py
import numpy as np
from numba import float64, njit
from numba.pycc import CC

cc = CC('test')
cc.verbose = True

@njit
def product(a, b):
    prod = 0
    for i in range(a.size):
        prod += a[i] * b[i]
    return prod

@cc.export('n_inner1d','float64[:](float64[:,:], float64[:,:])')
def n_inner1d(a, b):

    prod = np.empty(a.shape[0])
    for i in range(a.shape[0]):
        prod[i] = product(a[i], b[i])

    return prod

if __name__ == "__main__":
    cc.compile()

if you decorate the callee with @njit the function call type resolution will work and resolve (and probably inline) product into the n_inner_1d function. If you want both a compiled version and an inlined version then:
# Module test.py
import numpy as np
from numba import float64, njit
from numba.pycc import CC

cc = CC('test')
cc.verbose = True

@cc.export('product','float64(float64[:], float64[:])')
@njit
def product(a, b):
    prod = 0
    for i in range(a.size):
        prod += a[i] * b[i]
    return prod

@cc.export('n_inner1d','float64[:](float64[:,:], float64[:,:])')
def n_inner1d(a, b):

    prod = np.empty(a.shape[0])
    for i in range(a.shape[0]):
        prod[i] = product(a[i], b[i])

    return prod

if __name__ == "__main__":
    cc.compile()

will do that. The caveat being that it is entirely possible in some cases that the inlined product ends up with a different type signature to that of the one declared AOT.
Hope this helps?
@sklam I wonder if it ought to be made so that a CC exported function are available during type resolution so that njit hack isn't needed?

Yes this worked. I was afraid this would build a non-generic binary, but it seems to be working on 2 machines with different intel cpus. Thanks!


Use Windows Community Toolkit library instead of custom code

It would be helpful for new users to be pointed to the Windows Community Toolkit for extra functionality. The ExpressionBuilder is best used as a library instead of copying the code from this sample. Similarly a user is better off using a library for loading image brushes instead of the half native implementation that is hard to copy to your own solution.
Use functionality from the Windows Community Toolkit instead of the custom implementations for

ExpressionBuilder -> Microsoft.Toolkit.Uwp.UI.Animations.Expressions
SamplesNative and image loading -> Microsoft.Toolkit.Uwp.UI.Media.Helpers.SurfaceLoader

Issue Type

[ ] Bug Report
[x] Feature Request
[ ] Sample request
[ ] Documentation issue or request
[ ] Other – Please describe:
UserVoice link

Current Behavior

Expected Behavior

Steps to Reproduce (for bugs)

Your Environment

SDK #:
Operating System build # :
Visual Studio Version # :

I actually think the ExpressionBuilder code here is what's in the Toolkit. I don't know the history, but it'd certainly make sense to try and simplify the sample repo by using the Toolkit as a dependency.


Should the CtrlP page link to the active Github fork instead?

The original repo hasn't had any commits since more than 2 years ago.
In comparison, the ctrpvim/ctrlp.vim fork is still actively maintained and is accepting pull requests. Word is that this fork has the blessing of the CtrlP author but there hasn't been any official word from the author himself yet, nor has he edited the original repo to point people to the fork.
In any case, I think the CtrlP page should link to the fork instead of the dormant original repo so that issues and pull requests can be handled.

Absolutely. This is a much needed redirection,

Can anyone think of a general case way to handle this sort of issue? I agree that we should be referencing the fork, but I hesitate to handle this case manually. While this case seems quite clear-cut, in general I don't think this project should be in the business of manually deciding which fork to prefer.

+1 @captbaritone

I've thought about this a bit more, and I think it's probably outside the scope of this project. Our goal is to aggregate the plugins that people are actually using. The truth is, the deprecated version is still quite popular. As people move away from the deprecated version that should be reflected in our numbers, and eventually the maintained version will bubble to the top (we hope!).
While we don't redirect, we do show the README, which prominently displays a note that it's deprecated, and gives a link to the maintained version.
I'm going to close this issue, but if somebody wants to make an argument against the above point, I'd be happy to consider reopening the issue.
Thanks everyone for your input!

That all sounds good to me, thanks @captbaritone for the thoughts and reasoning!


Fixing Couchbase issues

Fixing connect to bucket, connection issue while running multiple action in single flow, action failure status based on result error

Already added to master by Ambar as part of linux migration branch


Automate setup of distributed from cluster scheduler nodes file

We had a request today (and in fact I've heard this from a few other people) to have a way to support the automatic generation of configuration files for Python parallel computing frameworks based on the "nodes" files produced and dropped into the "node 0" (sometimes called "rank 0") master node when scheduled through a batch scheduler.
It seems like this is the kind of thing that magpie might do: https://github.com/chu11/magpie
It would be nice to have that capability for our distributed computing libraries.

Hi @ijstokes sorry for letting this slip through.  If I understand you correctly you're asking for configuration files that help to deploy on various grid-computing systems like SGE or Condor.  Is that correct?  I'm not sure I understand the idea of a nodes file.
Generally speaking I agree that deployment of distributed is likely to be a major bottleneck to adoption and needs to be addressed well.

Closing soon if no response.

I expect this is referring to something like the mpi hostfile. Such a file for distributed might look something like:
host0.name scheduler
host1.name workers=5
host2.name workers=3

which is passed to a script that launches the scheduler on host0, five workers on host1, and 3 on host2.

Such a thing already exists (but untested/documented) for the dcluster executable.

Then I'd guess you can close (or better yet, close the issue with a docs PR).


Proto.Cluster Dashboard 🚀

Proto.Cluster Dashboard.
The dashboard is a Blazor serverside app released as a Nuget package.
You can reference and use this in an Asp.NET site that hosts an Proto Cluster member.
https://user-images.githubusercontent.com/647031/152855150-f6decd24-7445-4cfa-961e-a7e2e4bc4e79.mov
Installation:

Requires .NET 6
Requires an Asp.Net Core Site to host
Add Nuget Proto.Cluster.Dashboard

//Configure your site to host the dashboard

public void ConfigureServices(IServiceCollection services)
{
    //other things to configure
    //....

    var yourActorSystem = ....

    //you need this to enable querying for actors and view actor state
    .... remoteConfig.WithRemoteDiagnostics(true);

    //these are needed
    services.AddSingleton(yourActorSystem);
    services.AddSingleton(yourActorSystem.Cluster());

    //enable blazor
    services.AddRazorPages();
    services.AddServerSideBlazor();
    services.AddMudServices();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    //other things to configure
    //....

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapBlazorHub();
        endpoints.MapFallbackToPage("/_Host");

Feel free to try this out. do note that this is experimental but should already offer a pretty good insight into your cluster state

Moved it into the core repository now


Clean up custom build logic for generating API incubation reports

Use the latest (and not deprecated) version of Worker API
Move all aggregation logic to buildSrc
Use proper variants and dependencies to aggregate reports

@bot-gradle test QF

OK, I've already triggered QuickFeedback build for you.

The incubation report after the change and before on master.


The new choose screen makes your wallet less user friendly

This choose screen is unnecessary and it makes the payment process slower!
I never wanted to scan a QR code and then copy that address to my clipboard but now I have to tap twice every time I make a payment, that really sucks when I realize that with a VISA card people just swipe and go.

And I do not want to add any contacts at all, because that gives risk of exposure and someone who gets access to my phone can identify my partners!

This has changed in the current version. Thank you for reporting!!


You are using an outdated version of pyOpenSSL

I get this error
macbookproloreto:~ admin$ mitmproxy
You are using an outdated version of pyOpenSSL: mitmproxy requires pyOpenSSL 0.14 or greater.
Your pyOpenSSL 0.13.1 installation is located at /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/OpenSSL
macbookproloreto:~ admin$

for
macbookproloreto:~ admin$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.11.5
BuildVersion:	15F34

Thanks for your bug report @loretoparisi.
How did you install mitmproxy? It seems like you are using the OSX system python - which usually has problems with OpenSSL, due to the fact, that Apple decided to deprecate it on their platform.
Please try installing the latest Python with homebrew, or try a pre-packaged mitmproxy for OSX:
https://github.com/mitmproxy/mitmproxy/releases/tag/v0.17.1

@Kriechi basically for my understanding the problem is El Capitan and the System Integrity Protection (SIP) that prevents to upgrade libraries likePyOpenSSL as downside. So I have to disable this rootless as explained here:
To disable rootless, you need to restart the computer and hold CMD + R while booting. Then in the Utilities menu, select the terminal. IN the terminal, type csrutil disable. Then restart again. To enable rootless again, just replace disable with enable.

Luckily, thanks to virtualenv this can be avoided following the good tutorial Setting up mitmproxy on OSX El Capitan that can be done in these simple steps:
$ xcode-select --install
$ git clone https://github.com/mitmproxy/mitmproxy.git
$ cd mitmproxy
$ ./dev.sh
$ . venv/bin/activate
(venv)mitmproxy admin$ mitmdump --version
mitmdump 0.18
(venv)mitmproxy admin$ mitmproxy --version
mitmproxy 0.18


html2canvas and google map v3.33

Hello!
I am facing a problem exporting google maps with polylines into an image.
I manage to reproduce the error in the following case:
after moving the map viewport, if the polyline does not appear complete in the map viewport, then the printed image does not include the polyline at all, with the latest gmaps api v.3.33.
Tested in:
html2canvas: html2canvas 1.0.0-alpha.12
Browser & version: Firefox Quantum 60.0.2 (64-bit)
Operating system: Win 7
Applying the following transformation:
var mapNodes = '.gm-style>div:first>div:first>div:last>div';
var transformer = $(mapNodes).css('transform');
var comp = transformer.split(',');
var mapLeft = parseFloat(comp[4]);
var mapTop = parseFloat(comp[5]);
$(mapNodes).css({
'transform': 'none',
'left': mapLeft,
'top': mapTop
});
and using the google map api v.3.31 (as suggested from some posts) works, but i need to use the newest google maps version (v.3.33) with the different renderer, and this solution doesn't apply anymore. I also tried with this selector: '.gm-style>div:first>div', but still not solved.
Below an example:
The map looks like that:

but printed like that:

Any ideas how to solve the problem for html2canvas and google maps v.3.33?
I would appreciate any hint!
Thank you!

This selector '.gm-style>div:first>div:first>div:last>div' is for the Google map tile layer.
I also use html2canvas with drawing overlays.
This drawing overlay tile layer is in a different div. If you use your browser's inspector tool, you'll see other div's in '.gm-style>div:first>div:first' div. Once you find other divs with a transform css component, you can start troubleshooting which div is the correct one.
You'll have to do the transform on each div that needs a transformation. For my project, the drawing layer was in '.gm-style>div:first>div:first>div:nth-child(2)>div:first>div'.
Hope this helps.

Try to Use this FIX but for me it's not work FF and Chrome same result with last release :
fix try 1: https://jsfiddle.net/denis_miroshnikov_ts/erjvu371/3/
help me please , I think I do something wrong..

@DenisKS
Your selector needs to change- use this instead
var transform = $(".gm-style>div:first>div:first>div:last>div").css("transform");
var comp = transform.split(","); //split up the transform matrix
var mapleft = parseFloat(comp[4]); //get left value
var maptop = parseFloat(comp[5]); //get top value
$(".gm-style>div:first>div:first>div:last>div").css({ //get the map container. not sure if stable
"transform": "none",
"left": mapleft,
"top": maptop,
});

Amazing. I was days looking for the solution to the gray areas generated in the maps when exporting to png by html2canvas, and also looked for to keep the correct location within the div for both the map layer and the upper one with rectangles.
The tip passed by @mylesboone worked perfectly to adjust the layers to export as PNG. Thank you so much.

The issue with blank map or an error generating the canvas was tricky, but eventually what fixed it for me was adding this config:
ignoreElements: (node) => {
        return node.nodeName === 'IFRAME';
      }

html2canvas(mapWrapper, {
      useCORS: true,
      allowTaint: false,
      ignoreElements: (node) => {
        return node.nodeName === 'IFRAME';
      }
    }).then(canvas => {
      const url = canvas.toDataURL('image/png');
      saveAs(url, 'image3.png');
      window.URL.revokeObjectURL(url);
    });


Check possible active plugin or plugin point naming clashes

Task/Issue URL: https://app.asana.com/0/488551667048375/1207420696744032/f
Description
Detect active plugin point naming clash and break build
Steps to test this PR

#4596  👈
develop

This stack of pull requests is managed by Graphite. Learn more about stacking.

Join @aitorvs and the rest of your teammates on  Graphite


Make Database on Firebase

Set up database using created diagram

this is what we are going with for the databasem


glb import error when None is given as a float parameter

Describe the bug
With a model exported with ThreeJS GLTF exporter, there is a case apparently where a float comes as None, and the blender addon crashes on importing the file.
To Reproduce
Steps to reproduce the behavior:

Open blender
Import the attached .GLB file
Check error on console

Expected behavior
The importer should maybe convert values as False ->0, True ->1 or None->0 before passing the assert method
.blend file/ .gltf (mandatory)
2024617_301.zip
Version

OS: Windows 10
Blender Version: 4.1.1

Additional context
I don't know if the bug comes from the ThreeJS exporter or in the Blender addon, but it can be fixed parsing values like False, True, None ... to numeric values instead of only checking for type. In this case, I changed the file glt2_io.py in the scripts\addons\io_scene_gltf2\io\com\ folder, from this:
def from_float(x):
    assert isinstance(x, (float, int)) and not isinstance(x, bool)
    return float(x)

to this:
def from_float(x):
    if x == False or x == None:
        x = 0
    if x == True:
        x = 1
    assert isinstance(x, (float, int)) and not isinstance(x, bool)
    return float(x)

The glb provided is not a valid glTF/glb file.
None is not a valid value for float.
Even this can be workaround, we will probably not fix it, as we don't want that some not valid files become the de facto norm.
You should report a bug to the ThreeJS GLTF exporter team.
You can check the validity of a file here: https://github.khronos.org/glTF-Validator/


Lines on a points chart?

Is it possible to overlay a line on a points chart? I want to graph out a scatter plot and then draw the averages along the horizontal and vertical axis.
I didn't see anything in the manual or docs for this, the two_axis type looks close but it paints a line over a bar chart instead of a scatter plot and I'm unsure how to change that if possible.
Sorry if this isn't the correct place to ask this question.

Should the line graph and the point graph refer to the same series, or to two different series?

I think they would be different series.
Given a plot of data containing
data = { widgets: { 1 => 2, 2 => 4, 3 => 6, 4 => 8 } }

I would also want to draw a vertical line at 2.5 and a horizontal line at 5, so the lines are derived from the points but short of some ideal averages helper for the scatter plots, it makes sense to do that calculation and pass in the additional series I think.
Assuming I understand correctly :)

I think you are suggesting two different features here.

A new type: :scatter graph that is similar to type: :point but include some average lines

A new option for type: :two_axis to be able to set which types of graphs to combine (instead of only having line vs. column)

Is that correct?
Regarding 2), I think that might be a good option, and I would accept a PR. Any suggestion on the name of the new option?
Regarding 1), adding types is also a good idea, but I would need a little more context about this new type… do you have any real-life examples I can look at?
Thanks!

Sorry if I'm being unclear.
Let me give you a solid example of my use case and what I have vs what I am trying to work towards.
I have a database containing food items for a restaurant, their profitability and how many of them are sold.
require 'prawn'
require 'squid'

Prawn::Document.generate 'out.pdf' do |pdf|
  data = {
    items: {
      20 => 1.99,
      35 => 2.29,
      15 => 4.99,
      55 => 0.59
    }
  }
  pdf.chart data, type: :point, labels: [false], formats: []
end

What I would like to do is take this existing graph and overlay vertical and horizontal lines at 31.25 and 2.465 so I would end up with something close to

In terms of additional features, I would also like to overlay a specific text label with each point, and additional text in the four corners like
# Not really executable, just possible API I made up on the fly

require 'prawn'
require 'squid'

Prawn::Document.generate 'out.pdf' do |pdf|
  data = {
    items: [
      { label: 'Hamburger', x: 20, y: 1.99 },
      { label: 'Cheeseburger', x: 35, y: 2.29 },
      { label: 'Chili Dog', x: 15, y: 4.99 },
      { label: 'Fries', x: 55, y: 0.59 }
    ]
  }
  pdf.chart data, type: :point, labels: [false], formats: []
end

I just realized I didn't sort the data set so the items as they are plotted are not in order, but hopefully my intention is clear.
Does this help explain what I am shooting for?

Regarding the labels, if "Hamburger / Cheeseburger / Chili Dog and Fries" are your categories, why don't use those as the labels for the X axis?
In other words, wouldn't the following be ok?
pdf.chart items: {"Hamburgers (20)" => 1.99, "Cheeseburger (35)" => 2.29, "Chili Dog (15)" => 4.99, "Fries (55)" => 0.59}, format: :currency

Sorry for not getting back to you sooner.
Hamburger etc.. are my data points, models with extra attributes. Such as
food_item1 = { name: 'Hamberger', sell_price: 4.99, number_sold: 150}
food_item2 = { name: 'Chili Dog', sell_price: 3.99, number_sold: 275 }

and then plot two points on a graph with the x-axis being the range of sell prices and the y-axis being the range of number sold, and want the label on the point to just be the name of the item.

Hello again!
If I understand correctly, you do want a scatter plot.
I don't think that's a graph that I can easily include in Squid. Same thing goes for pie chart.
Graphs in Squid are designed so that all the categories are equally distributed along the X axis. There is no concept of "items" that is separate from "categories on the X axis".
I believe that would require a lot of changes in the public API (and private code) of Squid.
I'm open to suggestions, but I don't plan on writing the code to add those graphs to Squid. :neutral_face:

Fair enough! I really appreciate you talking though it with me. Squid is still a great library, I'll just need to wait for another chance to use it :)
Thanks again!


Redstone gyro looks weird in PID mode

Redstone gyro always let the output of the east be 15 when it's in PID mode.

It looks weird, I cannot find the problem in your code.
(Mod files is build from latest code on branch 1.20.1/main)

PID really doesnt work, because the math is probably all wrong in there.
Anyways, its best to not use any blocks with missing textures.

Magical eastern power

PID really doesnt work, because the math is probably all wrong in there. Anyways, its best to not use any blocks with missing textures.

I guese the problem is on your PID‘s parameters.

#7 #8 Fixed


verify the checksum

Closes: #5

Please update the branch, other LGTM!

Please update the branch

Sorry but what do you mean ? :)


Multi-tenant Not Working When Running in Azure Government Tenant

I was able to run this sample successfully from a commercial AD tenant and log in with users from multiple tenants. However, when I register the app in a government tenant and try to register as a user from a different AD tenant, I'm getting the following error:
Application with identifier '9240c326-325a-48e2-8382-0efde95ee41e' was not found in the directory sasdomain1.onmicrosoft.com

I have followed all the steps in the instructions.
I've taken the specific steps outlined for making it work in Azure Government.
Once completed, I can log in with a user account in the government tenant that the app is registered but when attempting to log in with a user from a different AD tenant I get the above error.

The user's tenant allows users to consent to apps accessing company data on their behalf.
I have double-checked the app registration and the "availableToOtherTenants" flag is true.
Here is the error including the correlation ID from my last attempt:
Correlation ID: f7b94d33-0aa9-4ea4-b2b2-13184d9d0f37
--
Timestamp: 2017-12-21 14:58:19Z
AADSTS70001: Application with identifier '9240c326-325a-48e2-8382-0efde95ee41e' was not found in the directory sasdomain1.onmicrosoft.com

Any help would be greatly appreciated.

I am having a very similar issue
Request Id: ee1c22f4-ac4e-4ecd-8cf7-c9aba7490100 Correlation Id: 339553ac-0d07-48f3-a33e-2b559b91ca40 Timestamp: 2018-02-08T00:00:32Z Message: AADSTS70001: Application with identifier 'd3f22e24-b87b-4ba2-8c88-4ae572c31982' was not found in the directory alabamaui.com

Oh, and I did read the readme and applied the changes required for azure government cloud. Including adding the visual studio extension and connecting with my account.

I am having the same issue. Followed all the steps and got multi-tenant application working against users from multiple public AADs. When following the same configuration steps in Azure government I am getting the error that the application with identifier was not found in the users' home directory. I have read from https://docs.microsoft.com/en-us/azure/azure-government/documentation-government-plan-identity this:
If you choose Azure AD Public identities for your Azure Government application, you must register the application in your Azure AD Public tenant. Otherwise, if you perform the app registration in the directory the subscription trusts (Azure Government) the intended set of users cannot authenticate.
but I am unable to find instructions for how to register an app in a public cloud if the app lives in a gov cloud.

Just following up because I got a ping from your comment, the issue is that multitenant apps are not supported in Azure Gov US yet.  When I talked to them in May there was no ETA.

About registering an app in public cloud you can go to portal.azure.com. You would need to register the app in both Public and Azure Government (portal.azure.us) separately.
These would be two separate instances of the App registration and managed independently.
About having a multi-tenant app in Azure Government, a multi-tenant application in Arlington will not be accessible from public cloud.

Closing as OP has not responded


Polish the default JVM options for namesrv and broker (for Linux/MacOS) servers

What is the purpose of the change

The goal of this PR is to dynamically calculate proper JVM heap available for RocketMQ namesrv and broker, and set them in JVM options when they get started. It is derived from the community project apache/rocketmq-externals PR #89, which aims to run Rocketmq in Docker daemon environments.

Due to the default JVM heap demands of the RocketMQ namesrv and broker, user in community raised issue like  Issue #78. This PR also aims to solve this kind of issue from upstream.

Please note that this change only works for Linux/MacOS servers.
Brief changelog
In this PR, we use gawk to calculate the max possible heap used by a JVM, and set JVM options for namesrv and broker. For example, in ${ROCKETMQ_HOME}/bin/runserver.sh, we add the following changes:
#===========================================================================================
# JVM Configuration
#===========================================================================================
# Get the max heap used by a jvm, which used all the ram available to the container.
MAX_POSSIBLE_HEAP_STR=$(java -XX:+UnlockExperimentalVMOptions -XX:MaxRAMFraction=1 -XshowSettings:vm -version |& awk '/Max\. Heap Size \(Estimated\): [0-9KMG]+/{ print $5}')
MAX_POSSIBLE_HEAP=$MAX_POSSIBLE_HEAP_STR
CAL_UNIT=${MAX_POSSIBLE_HEAP_STR: -1}
if [ "$CAL_UNIT" == "G" -o "$CAL_UNIT" == "g" ]; then
  MAX_POSSIBLE_HEAP=$(echo ${MAX_POSSIBLE_HEAP_STR:0:${#MAX_POSSIBLE_HEAP_STR}-1} `expr 1 \* 1024 \* 1024 \* 1024` | awk '{printf "%d",$1*$2}')
elif [ "$CAL_UNIT" == "M" -o "$CAL_UNIT" == "m" ]; then
  MAX_POSSIBLE_HEAP=$(echo ${MAX_POSSIBLE_HEAP_STR:0:${#MAX_POSSIBLE_HEAP_STR}-1} `expr 1 \* 1024 \* 1024` | awk '{printf "%d",$1*$2}')
elif [ "$CAL_UNIT" == "K" -o "$CAL_UNIT" == "k" ]; then
  MAX_POSSIBLE_HEAP=$(echo ${MAX_POSSIBLE_HEAP_STR:0:${#MAX_POSSIBLE_HEAP_STR}-1} `expr 1 \* 1024` | awk '{printf "%d",$1*$2}')
fi

# Dynamically calculate parameters, for reference.
Xms=$[MAX_POSSIBLE_HEAP/4]
Xmx=$[MAX_POSSIBLE_HEAP/4]
Xmn=$[MAX_POSSIBLE_HEAP/8]
# Set for `JAVA_OPT`.
JAVA_OPT="${JAVA_OPT} -server -Xms${Xms} -Xmx${Xmx} -Xmn${Xmn}"
JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8  -XX:-UseParNewGC"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/rmq_srv_gc.log -XX:+PrintGCDetails"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
JAVA_OPT="${JAVA_OPT}  -XX:-UseLargePages"
JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib"
#JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"

$JAVA ${JAVA_OPT} $@

And  in ${ROCKETMQ_HOME}/bin/runbroker.sh, we add the following changes:
#===========================================================================================
# JVM Configuration
#===========================================================================================
# Get the max heap used by a jvm, which used all the ram available to the container.
MAX_POSSIBLE_HEAP_STR=$(java -XX:+UnlockExperimentalVMOptions -XX:MaxRAMFraction=1 -XshowSettings:vm -version |& awk '/Max\. Heap Size \(Estimated\): [0-9KMG]+/{ print $5}')
MAX_POSSIBLE_HEAP=$MAX_POSSIBLE_HEAP_STR
CAL_UNIT=${MAX_POSSIBLE_HEAP_STR: -1}
if [ "$CAL_UNIT" == "G" -o "$CAL_UNIT" == "g" ]; then
  MAX_POSSIBLE_HEAP=$(echo ${MAX_POSSIBLE_HEAP_STR:0:${#MAX_POSSIBLE_HEAP_STR}-1} `expr 1 \* 1024 \* 1024 \* 1024` | awk '{printf "%d",$1*$2}')
elif [ "$CAL_UNIT" == "M" -o "$CAL_UNIT" == "m" ]; then
  MAX_POSSIBLE_HEAP=$(echo ${MAX_POSSIBLE_HEAP_STR:0:${#MAX_POSSIBLE_HEAP_STR}-1} `expr 1 \* 1024 \* 1024` | awk '{printf "%d",$1*$2}')
elif [ "$CAL_UNIT" == "K" -o "$CAL_UNIT" == "k" ]; then
  MAX_POSSIBLE_HEAP=$(echo ${MAX_POSSIBLE_HEAP_STR:0:${#MAX_POSSIBLE_HEAP_STR}-1} `expr 1 \* 1024` | awk '{printf "%d",$1*$2}')
fi

# Dynamically calculate parameters, for reference.
Xms=$[MAX_POSSIBLE_HEAP/4]
Xmx=$[MAX_POSSIBLE_HEAP/4]
Xmn=$[MAX_POSSIBLE_HEAP/8]
MaxDirectMemorySize=$[MAX_POSSIBLE_HEAP/4]
# Set for `JAVA_OPT`.
JAVA_OPT="${JAVA_OPT} -server -Xms${Xms} -Xmx${Xmx} -Xmn${Xmn}"
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:SurvivorRatio=8"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/mq_gc_%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy"
JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch"
JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=${MaxDirectMemorySize}"
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -XX:-UseBiasedLocking"
JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib"
#JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"

numactl --interleave=all pwd > /dev/null 2>&1
if [ $? -eq 0 ]
then
	if [ -z "$RMQ_NUMA_NODE" ] ; then
		numactl --interleave=all $JAVA ${JAVA_OPT} $@
	else
		numactl --cpunodebind=$RMQ_NUMA_NODE --membind=$RMQ_NUMA_NODE $JAVA ${JAVA_OPT} $@
	fi
else
	$JAVA ${JAVA_OPT} $@
fi

Verifying this change
The changes have been verified in Docker environment based on CentOS 7.  So it should be compatible with any VM or bare-metal environments based on CentOS 7. Details can be found in apache/rocketmq-externals PR #89.
Follow this checklist to help us incorporate your contribution quickly and easily. Notice, it would be helpful if you could finish the following 5 checklist(the last one is not necessary)before request the community to review your PR.

[x] Make sure there is a Github issue filed for the change (usually before you start working on it). Trivial changes like typos do not require a Github issue. Your pull request should address just this issue, without pulling in other changes - one PR resolves one issue.
[x] Format the pull request title like [ISSUE #123] Fix UnknownException when host config not exist. Each commit in the pull request should have a meaningful subject line and body.
[x] Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
[x] Write necessary unit-test(over 80% coverage) to verify your logic correction, more mock a little better when cross module dependency exist. If the new feature or significant change is committed, please remember to add integration-test in test module.
[x] Run mvn -B clean apache-rat:check findbugs:findbugs checkstyle:checkstyle to make sure basic checks pass. Run mvn clean install -DskipITs to make sure unit-test pass. Run mvn clean test-compile failsafe:integration-test  to make sure integration-test pass.
[x] If this contribution is large, please file an Apache Individual Contributor License Agreement.

@vongosling @XiaoZYang Could you help drive this? Thanks.

@vongosling base changed.

@XiaoZYang @vongosling I have the idea if we can split this PR into two parts: one for Linux and the other one for Windows. Can we merge this part first since currently Windows environment is not the main scenario for Docker usage. For Windows I think we need time to polish that script. If this works for you I will change the title of this PR, which should reflect this idea.

@vongosling I have updated my title and PR purpose accordingly. Thanks.

@vongosling PTAL. cc @XiaoZYang

@huanwei  if the runbroker.sh and runserver.sh is only dynamic set the jvm head?this can use in any Network program on java?

@huangyiminghappy I think so. You can try it on your program, and watch the JVM heap.

In Cassandra, the default JVM MAX heap size=max(min(1/2 ram, 1024MB), min(1/4 ram, 8GB)). Maybe it is better if we also add a threshold value of MAX size, in case the JVM using unnecessary large memory when deploying on a large memory machine. For example, may use nearly 120GB on 512GB machine, but usually, we do not need 120GB JVM, right?

closed due time too long and conflits.


Custom KV server

Will custom K/V servers that adhere to requirements and are verified be an option in the future? Or will there only be the official Google build and controlled implementation?

Hi @dynamix , could you elaborate a bit on your concerns behind the question? e.g., are you interested in for example more flexibility of the request processing logic, resource savings or better ownership of running servers in private data centers, less stringent visibility requirements of the server code, or something else?
We have just published another explainer of the K/V server user defined functions to talk about the feature to provide more customization in the processing logic. I wonder if that'd be of interest to you.


Add withNimbleOptions() helper function

This adds a helper withNimbleOptions() to make it easier to temporarily set nimble options, e.g.
cnf <- withNimbleOptions(list(experimentalUseTensorflow = TRUE), {
    compileNimble(nf)
})

Note to reviewers: This PR includes make man noise from stale man pages that weren't updated on other PRs.
Why?
We often temporarily set nimble options in tests, and we often forget to unset those options. The withNimbleOptions(list(...), {...}) pattern will help prevent these errors. This pattern also makes it easier to compose nimble options (e.g. to temporarily disable tensorflow in one part of a helper function, regardless of whether it was previously enabled).
How?
The withNimbleOptions() function saves a temp copy of the old options. When multiple withNimbleOptions() are nested inside each other, these temp copies constitute a stack, and options are push onto and popped off of this stack. This pattern is very common, e.g. used in Python's numpy.errstate.

@paciorek Does this look ok to merge?

LGTM

Thanks, Chris!


concise and easy-to-read

• fixed grammar error

sweet dude you close the PR and then fix your grammar haha

I'm sorry to have closed the issue with any comments. Yes, the readme file is updated in 6114de8b0180da89106980e69ba4f147c9c97802.


Missing class properties transform.

I'm having an issue:

While building for os.linux.x86_64:    packages/ostrio:files/core.js:12:2: /packages/ostrio:files/core.js: Missing class properties transform.
I am using Meteor 1.4

Hello @chaudharykiran ,

You will need to install version compatible with<EMAIL_ADDRESS>What version of ostrio:files you're on?
Please follow our issue template.

Hello @dr-dimitru , Sorry for issue temaplate.
I am in Meteor <IP_ADDRESS>.

Sorry for issue template.

No worries. Could you please update this thread with info we request at our issue template

I am using ostrio:files v 1.9.7 and ostrio:cookies v 2.2.4

You should downgrade to v1.7*, try:

1.7.16, 1.7.15 or 1.7.14

meteor remove ostrio:files
meteor add<EMAIL_ADDRESS>

Note - it's always a good idea to use latest available software.
We can not guarantee<EMAIL_ADDRESS>and<EMAIL_ADDRESS>will work stable

@chaudharykiran there is more info requested in our issue template:

Where this issue appears? OS (Mac/Win/Linux)? Browser name and its version?
Is it Client or Server issue?

@dr-dimitru I downgradef to 1.7.15 but again another error is occurring  TypeError: FileCollection is not a function. When should I found documentation of 1.7.15.

@chaudharykiran check v1.7.15 release and its readme

I am very very thankful to you @dr-dimitru. Thank you once again.

@chaudharykiran you're welcome :)
I hope you will be able to upgrade to latest release soon.
Let me know once this issue will be solved.

Feel free to reopen it in case if the issue is still persists on your end.


Finish Inventory Editor and Inventory Export Modals

Editor should have a 2 vertical panes, one with a form, and cards for sub-items, and the other for raw json editing. There should be an indicator if the json is valid or not.

Needs more modals. One for components, and another for Properties

Maybe just a text interface for properties


Can’t delete OTA. Used previous build of UO to block OTA’s...

Used previous build to block OTA’s and did remount. Now I am using latest build, well, I’d like to use latest build, but I noticed a half installed OTA, that no matter how many times I try to delete it won’t go away. It keeps trying to download 12.1.4, but seems blocked. I want to remove the half that is downloaded, to safely use tool, but it appears I am blocked from deleting OTA.  IPhone 6s+ 12.1.2
Had RootlessJB installed when snapshot was taken, but removed it before side-loading this build. Uninstalled all jailbreak files and related apps including Filza, rebooted (twice) and that’s when the half downloaded OTA appeared.

This is a non-issue. It gave cause for concern due to warnings about bootloops if OTA existed, but I read through the restore log from remount I did while having RootlessJB installed, realized the remount was successful and aware of the partial OTA, so I jailbroke, everything was ok.
Sorry for creating an issue where there was none.


update to the constructr 0.14.0 (closes #33)

PR updates dependencies to versions from constructr 0.14.0. It results in some changes in the ConsulCoordination.scala (mainly abandonment of A: NodeSerialization)

LGTM. @gerson24 please review. @nikdon awesome work. Thanks for contributing!.

@juanjovazquez, @gerson24, thanks for the review, fix all issues but the formatting of the imports mentioned above, please have a look.

LGTM, thanks a lot! :)


Add support for text queries to the DSL

There is a quick unit test for this as well, but I was unable to execute it because I had trouble getting the test suite working.
Small addition to support:
http://www.elasticsearch.org/guide/reference/query-dsl/text-query.html
Thanks,
Nathan

Hi Nathan, could you add a simple integration test as well? Also, could you post here the troubles with the test suite? It should really be working with no problems...

The tests, including Nathan's addition, all pass after running:
bundle install --path .bundle
bundle exec rake test

Karmi,
Just added a quick integration test!
-Nathan

Nathan, I'm terribly sorry it took me song long to process the patch. It's now included with some cleanups in karmi/tire@a7a62d. Thanks!


Manipulating properties with semicolons results in invalid ItemGroup evaluation

Steps to reproduce
Project file
<Project>
  <PropertyGroup>
    <TargetFrameworks>a;b</TargetFrameworks>
    <TargetFrameworksTrimmed>$(TargetFrameworks.Trim())</TargetFrameworksTrimmed>
  </PropertyGroup>
  <Target Name="Build">
    <ItemGroup>
      <TargetFramework Include="$(TargetFrameworks)"/>
      <TargetFrameworkTrimmed Include="$(TargetFrameworksTrimmed)"/>
    </ItemGroup>
    <Message Text="TargetFramework: %(TargetFramework.Identity)"/>
    <Message Text="TargetFrameworkTrimmed: %(TargetFrameworkTrimmed.Identity)"/>
  </Target>
</Project>

Command line
msbuild /bl

Expected  behavior
Build:
  TargetFramework: a
  TargetFramework: b
  TargetFrameworkTrimmed: a
  TargetFrameworkTrimmed: b

Actual behavior
Build:
  TargetFramework: a
  TargetFramework: b
  TargetFrameworkTrimmed: a;b

Environment data
msbuild /version output:
Microsoft (R) Build Engine version 15.9.20+g88f5fadfbe for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.

<IP_ADDRESS>856

MSBuild is treating the output of the property function as an escaped string.  You can achieve the result you want by unescaping it:
diff --git a/repro.proj b/repro.proj
index b1b8969..f2fa499 100644
--- a/repro.proj
+++ b/repro.proj
@@ -1,7 +1,7 @@
 <Project>
   <PropertyGroup>
     <TargetFrameworks>a;b</TargetFrameworks>
-    <TargetFrameworksTrimmed>$(TargetFrameworks.Trim())</TargetFrameworksTrimmed>
+    <TargetFrameworksTrimmed>$([MSBuild]::Unescape($(TargetFrameworks.Trim())))</TargetFrameworksTrimmed>
   </PropertyGroup>
   <Target Name="Build">
     <ItemGroup>

S:\repro\Microsoft\msbuild\issues\3940> msbuild
Microsoft (R) Build Engine version 15.9.20+g88f5fadfbe for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.

Build started 11/19/2018 10:46:04 AM.
Project "S:\repro\Microsoft\msbuild\issues\3940\repro.proj" on node 1 (default targets).
Build:
  TargetFramework: a
  TargetFramework: b
  TargetFrameworkTrimmed: a
  TargetFrameworkTrimmed: b
Done Building Project "S:\repro\Microsoft\msbuild\issues\3940\repro.proj" (default targets).

Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:00.08

This behavior is confusing, but I don't see any way to change it without breaking backward compatibility, so I suspect we're stuck with it.

Thanks!
I was suspecting some kind of escaping (tried to play with %3b instead of semicolon) but that was not it.
I will close the issue then.


Recursive tag is not working for ubuntu 18.0

ctags -R * command is not working in ubuntu 18

This plugin just executes ctags. It can't fix its incorrect behaviors.


Implement custom graphics

Instead of just sticking to the material design, it would be cool to have this "galaxy" aesthetic where the background is like stars and stuff (this would further enhance the theme and stuff).
This is something very low priority; this doesn't need to happen until after most of the design and content is implemented.

Completed via 131d19bfabc80cf77c38afb5e8287dbc8df1ecab


Modified expect with \n..

The expected result is changed by adding new lines and dots and fails

if it is referenced:

Click to see XSpec

  <x:scenario focus="on" label="match choice">
    <x:context href="input/input_1.xml" select="/"/>
    <x:expect href="output/output_1.xml" label="choice replaced by type." select="/"/>
  </x:scenario>

But there are no problems when a literal expected result:

Click to see XSpec

<x:scenario focus="on" label="match choice">
    <x:context href="input/input_1.xml" select="/"/>
    <x:expect label="choice replaced by type."><mei meiversion="4.0.1" xmlns="http://www.music-encoding.org/ns/mei">
        <trill accidupper="s" place="above" staff="1" startid="#note_7428" type="accidupper_supplied_NMA-editors" xml:id="trill_7614"/>
      </mei>
    </x:expect>
  </x:scenario>

I'm using oXygen v25, and XSPec Framework 2.2.6
The full example you may try here:
supply_trill_accidupper-lower.zip
Possibly relates to https://github.com/xspec/xspec/issues/1155

output_1.xml is indented. In other words, it has whitespace-only text nodes between elements.
Since x:expect/@href keeps whitespace-only text nodes intact, your expected result has whitespace-only text nodes as they are in output_1.xml. In the expected result (right side) in your screenshot, \n and . represent those whitespace-only text nodes. (See Wiki for what \t \n \r characters mean.)
I haven't looked into your stylesheet, but I guess it's implicitly or explicitly discarding whitespace-only text nodes inside <mei> or around <trill>. The actual result (left side) in your screenshot has no whitespace-only text nodes represented by \n or ..
When XSpec compares the actual result and the expected result, all nodes are considered as significant. Whitespace-only text nodes are not ignored. Your actual result has no whitespace-only text nodes, but your expected result has some. XSpec compared them, found them different and declared Failure.
On the other hand, x:expect[empty(@href)] discards whitespace-only text nodes. That's why you found "no problems when a literal expected result". Your expected result has no whitespace-only text nodes.
For more details about whitespace-only text nodes, see Wiki.

Thank you for quick response and a very good explanation. There should be an issue with whitespace. Nevertheless, I'm still getting a wrong test result.

The expected result gets a line break.

Otherwise the files are identical when applying the diff:

(I also removed the XML declaration as I thought, this might be a problem).
I just used the test-helper.xsl you've provided and configured my xspec as in the tutorial:

Click to see XSpec.

<?xml version="1.0" encoding="UTF-8"?>
<x:description run-as="external" stylesheet="../supply_trill_accidupper-lower.xsl" xmlns:test-helper="x-urn:tutorial:helper:ws-only-text:test-helper" xmlns:mei="http://www.music-encoding.org/ns/mei" xmlns:x="http://www.jenitennison.com/xslt/xspec">

  <x:helper stylesheet="../../lib/test-helper.xsl"/>

  <x:scenario label="match choice">
    <!--    <x:param href="input/input_1.xml" name="global-context-item"/>-->
    <x:context href="input/input_1.xml" select="/"/>
    <!--    <x:expect href="output/output_1.xml" label="choice replaced by type."  select="/"/>-->
    <x:expect label="choice replaced by type."><mei meiversion="4.0.1" xmlns="http://www.music-encoding.org/ns/mei">
        <trill accidupper="s" place="above" staff="1" startid="#note_7428" type="accidupper_supplied_NMA-editors" xml:id="trill_7614"/>
      </mei>
    </x:expect>
  </x:scenario>

  <x:scenario label="choice with no supplied">
    <!--    <x:param href="input/input_1.xml" name="global-context-item"/>-->
    <x:context href="input/input_2.xml" select="test-helper:remove-whitespace-only-text(.)"/>
    <x:expect href="output/output_2.xml" label="choice replaced by type."  select="test-helper:remove-whitespace-only-text(.)"/>
    <!--<x:expect label="choice replaced by type."><mei meiversion="4.0.1" xmlns="http://www.music-encoding.org/ns/mei">
        <choice xml:id="choice_10188">
          <corr resp="#NMA-editors" xml:id="corr_10188">
            <trill extender="true" lform="wavy" place="above" staff="4" startid="#note_10137" tstamp2="2.7" xml:id="trill_10188a"/>
          </corr>
          <orig xml:id="orig_10188">
            <trill extender="false" place="above" staff="4" startid="#note_10137" xml:id="trill_10188b"/>
          </orig>
        </choice>
      </mei>
    </x:expect>-->
  </x:scenario>

</x:description>

Possibly, the difference is in the XSL?

Click to see XSL (though without dependencies).

<?xml version="1.0" encoding="UTF-8"?>
<stylesheet exclude-result-prefixes="xs mei xd dme functx" version="3.0" xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:dme="http://www.mozarteum.at/ns/dme" xmlns:functx="http://www.functx.com" xmlns:map="http://www.w3.org/2005/xpath-functions/map" xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:mei="http://www.music-encoding.org/ns/mei" xpath-default-namespace="http://www.music-encoding.org/ns/mei">

  <xi:include href="docs.xsl" xpointer="element(/1/1)"/>
  <include href="../lib/basic.xsl"/>
  <include href="../lib/functions/functx-1.0-doc-2007-01.xsl"/>
  <include href="../lib/functions/functions_DIME.xsl"/>
  <include href="../lib/applicationChanges.xsl"/>

  <template match="/">
    <variable name="process.choice">
      <apply-templates select="." mode="process.choice"/>
    </variable>

    <sequence>
      <apply-templates mode="applicationChanges" select="$process.choice"/>
    </sequence>
  </template>

  <xd:doc>
    <xd:desc>
      <xd:p>Matches choice with trill that have supplied @accidupper or @accidlower</xd:p>
    </xd:desc>
  </xd:doc>
  <template mode="process.choice" match="choice[corr[supplied[trill]] and orig[trill]]">
    <choose>
      <when test="corr/supplied/trill[@accidupper] and orig/trill[not(@accidupper)]">
        <call-template name="create.trill">
          <with-param name="trill" select="corr/supplied/trill[@accidupper]"/>
          <with-param name="supplied.attribute.name" select="corr/supplied/trill/@accidupper/name()"/>
        </call-template>
      </when>
      <when test="corr/supplied/trill[@accidlower] and orig/trill[not(@accidlower)]">
        <call-template name="create.trill">
          <with-param name="trill" select="corr/supplied/trill[@accidlower]"/>
          <with-param name="supplied.attribute.name" select="corr/supplied/trill/@accidlower/name()"/>
        </call-template>
      </when>
      <otherwise>
        <call-template name="copy.element"/>
      </otherwise>
    </choose>
  </template>

  <xd:doc>
    <xd:desc>Copies the tril from corr with all its attributes. Adds @type.</xd:desc>
    <xd:param name="trill"/>
    <xd:param name="supplied.attribute.name"/>
  </xd:doc>
  <template name="create.trill">
    <param name="trill" as="element()"/>
    <param name="supplied.attribute.name" as="xs:string"/>

    <variable name="type.value">
      <variable name="resp.value" select="$trill/parent::supplied/@resp => substring-after('#')"/>
      <value-of select="$supplied.attribute.name || '_' || 'supplied_' || $resp.value"/>
    </variable>

    <copy-of select="
        dme:add-mei-attributes(
        $trill, xs:QName('type'), $type.value)"/>
  </template>

  <variable name="currentStylesheet" select="doc('')"/>
</stylesheet>

</x:description>

</details

Looks like your actual result is an element node (element(mei)) while your expected result of x:expect[@href] is a document node (document-node(element(mei))). Since an element node and a document node are different node types (even if the document node contains the same element), the test result is Failure.
If you run XSpec without using Oxygen's XSpec Helper View add-on, then you should get a test report like https://github.com/xspec/xspec/wiki/images/xpath-from.png where the difference is highlighted in XPath ... from colored in pink. For more details, see the Difference in XPath ... from section in Wiki. Unfortunately Oxygen's XSpec Helper View add-on removes this critical info from its Q-Diff...
Probably what you want to write is something like this:
<x:expect
   href="output/output_2.xml"
   label="choice replaced by type."
   select="test-helper:remove-whitespace-only-text(.)/mei" />

Note /mei in @select. See Wiki for how x:context, x:expect, x:param and x:variable work with or without @select and @href.

Thank you very much for a very good explanation!

Unfortunately Oxygen's XSpec Helper View add-on removes this critical info from its Q-Diff...

Opened xspec/oXygen-XML-editor-xspec-support#50 .


Add cookie token extractor

Hi,
We store the token in a cookie (secure and httponly) in onAuthenticationSuccess like this :

    public function onAuthenticationSuccess(Request $request, TokenInterface $token)
    {
        $response = parent::onAuthenticationSuccess($request, $token);

        $tokenJWT = json_decode($response->getContent(), true)['token'];

        // Ajoute le token avec l'id de l'utilisateur en clé dans les Redis configurés, avec le ttl contenu dans la conf
        $this->rms->set($this->redisDB, $token->getUser()->getId(), $tokenJWT, $this->jwtTokenTTL);

        // Crée le cookie contenant le token, avec le ttl contenu dans la conf
        $response->headers->setCookie(new Cookie('CERBERE', $tokenJWT, (new \DateTime())->add(new \DateInterval('PT' . $this->jwtTokenTTL . 'S')), '/', null, $this->cookieSecure));

        return $response;
    }

Cookie is send transparently from Front to Back.
So we need a cookie token extractor.
Thanks

Hi,
Nice addition ! I'm waiting for the travis build to complete but it seems good for merging.
2 little details though. Could you squash you commits into a single one ? And what do you think about giving the default cookie name the same as the query parameter ?
Thanks.

Ok it's done.
For the same name as the query parameter, it's more a thinking to have about the global conf of the bundle.
Indeed, there is code duplication in the factory at this level.
Why not just have (or something like this) :

            extractors:
                enabled: ['authorization_header', 'cookie', 'query_parameter']
                name:     Bearer

That's a good idea. In the mean time, let's merge this PR.


feat(db) add support for read transformations

Summary
This is continuation of the dao transformations. This time the PR adds read transformations to DAOs, and opens a door for encryption of data at rest.

'Ok


[Staging] xorg: updates and cleanup

Motivation for this change
followup from https://github.com/NixOS/nixpkgs/pull/48549
Things done
waiting for my machine to compile everything ;)
@worldofpeace should apply cleanly to staging now
@MP2E looking into libXp now

@MP2E looking into libXp now

05a334ee637a1c1706163d12c14278ad73dda0e0 IIRC gets things like that?

This seems to add a bunch of dup inputs in the xpra expression, FWIW.  (still reviewing/resolving/merging, sorry)

Fixes https://github.com/NixOS/nixpkgs/issues/44492

I have less time now, but would still like to see this get merged soon - otherwise there will be a lot of ugliness in merging the *proto -> xorgproto part. Anything I can help with? It should be fairly stable, since i used the https://github.com/NixOS/nixpkgs/pull/48549 as my daily driver for a while and there are only little deviations in this patchset.
@FRidh @matthewbauer any comments?
@dtzWill could work, but i had no time testing it. If you would link your more interesting patches from your xorg branch(es), i'd try to incorporate them here.

Rebase and I'll merge it.

Thanks @globin @FRidh

What do we do about these broken packages @vcunat mentioned? Can we just remove them again or should we mark as broken?

I can see that the following have already been fixed

xorg.oclock
xorg.editres

Using Citrix Workspace instead of Citrix Receiver seems to fix the slowness issue even with Xorg 1.20.5.


Update Fides to use the Fideslang models

❗ DEPENDS ON ethyca/fideslang#94 ❗
Now that all of the DSR related metadata has been upstreamed into fideslang the codebase needs to be updated reference all the models from fideslang instead.
There will likely need to be some updates to existing dataset yaml files to no longer use fidesops_meta
Acceptance criteria

Remove all of the code from dataset.py that was upstreamed into fideslang
Update the codebase to use all the models from fideslang.

Note: this work has been merged into the unified-fides-resources fides branch for now.