[WIP] OSRA-326 Partner Facade

DO NOT MERGE
for comparison & discussion only. cf. #278
https://osraav.atlassian.net/browse/OSRA-326
This is my idea of what a facade should do: package data for presentation to
the view. In the partners controller, its utility is negligible since most
actions do not instantiate multiple variables and their interface to the views
is already minimal. With that in mind, having explored the use of a facade in
the partners controller as per our initial intent, I am not certain that its
advantages outweigh the costs here. Other controllers, however, may well benefit from
facades. Sponsor show & User show both display the main object's associations,
and these associations feel like ideal candidates for loading from a facade.
In #278, the facade takes on multiple responsibilities and thus violates
SOLID guidelines. In addition to sending data from the controller to the view,
it also gets involved in building and updating the partner object with
attributes returned from the view to the controller. The facade also takes
over validation of params, which in my mind clearly falls into the controller's
area of responsibility.

:+1:
I see what you mean. And as you say, the partners controller is too simple for a facade to be helpful.
This is why I felt it's better to move all the logic from the controller to the facade. I guess it depends how you see the use of the facade because the way I made it would break some of the rails conventions.


Not Reponsive

This is a good project but it's not reponsive to other devices.

can i try something .

Yes, you can but the problem is there is no single maintainer for the project. No one to merge pull request.

Sir If It possible Than Find Someone Who Like To Become maintainer for the project Like me.

Sadly I am not the owner of this project @Chetax
I have reached out to the owner himself on linkedin but he is yet to respond to my messages.
I see all of your love and passion for this project. Thank you everyone. Lets hope he comes back to fix this soon.


Using a dataset built through builder script for training purposes.

Hi, first I would like to thank you for your tremendous work with this library.
The problem I'm having right now is that I would like to fine-tune one of your BERT models on a custom dataset. The training example that you've provided here uses one of your already prepared which is being served on HF with an accompanying dataset config file. However, I've built my own dataset with the help of a dataset script from one of your templates provided here.
Now the problem is specifically in the following lines from the train_text_classification.py script:
train_dataset = Dataset.load(dataset_path, split="train", tokenizer_path=base_model_path)
eval_dataset = Dataset.load(dataset_path, split="test", tokenizer_path=base_model_path)
model = BertTextClassification(BertTextClassificationConfig(id2label=train_dataset.config.id2label))

As I have created my datasets using the load_dataset method, I'm facing two issues. Firstly, I can't pass a tokenizer_path to load_dataset and second, datasets built using load_dataset don't seem to have a config attribute and therefore train_dataset.config.id2label doesn't exist.
I was wondering if there was a way to convert a dataset built using a script with load_dataset to a Hezar dataset or if there's a way to modify the training script such that it works with a custom dataset.

Hi @mahdiyehebrahimi. So glad to hear your feedback.
You are right. There must be some sort of function to convert or create a config file for the datasets for better flexibility.
What I've been doing so far is that I create a dataset_config.yaml file and upload it in the repo.
A dataset config file for text classification is as simple as below:
name: text_classification
config_type: dataset
task: text_classification
label_field: label
text_field: text

Save this as a dataset_config.yaml file and upload it in the root of your repo.
It is worth mentioning that you don't need to create datasets and upload them to the Hub with Hezar's specific format to be able to finetune a model. You can always subclass one of the Dataset modules like TextClassificationDataset or ImageCaptioningDataset or even the Dataset class itself (for full control). Then you can easily finetune your model on your data like below:
from hezar.data import TextClassificationDataset, TextClassificationDatasetConfig

class CustomClassificationDataset(TextClassificationDataset):
    def __init__(self, config: TextClassificationDatasetConfig, split, **kwargs):
        super().__init__(config=config, split=split, **kwargs)
        # Customize tokenizer, etc.
        # Customize dataset properties

    def _load(self, split):
        # Implement your own dataset loading, it can be offline too.
        data = load_dataset(self.config.path)
        # Convert to dataframe, etc.
        # Preprocess rows and columns, etc.
        # Anything you want
        return data

    # You can also customize the `getitem` method
    def __getitem__(self, index):
        text, label = self.data[index]  # This syntax only works if the return object of `self._load()` is a HF Dataset
        # You can also use text, label = self.data.iloc[index] if `self.data` is a pandas dataframe
        # Just make sure that the output of this method must be a dictionary containing `token_ids`, `labels`, etc. This depends on what your model wants actually.

Let me know if this helps or there's anything else I can help you with.

For anyone crossing here, there is now tutorials on creating custom datasets to use in Hezar in the docs. See https://hezarai.github.io/hezar/tutorial/datasets.html


[question] How can you pass data to the background handler?

Hi, I have noticed that you are able to specify a background handler, so that it can freely run in an isolate. Though, since Isolates do not share memory, how should you pass data between the main and the background isolate?
I need that for localization of the strings and also to keep track of each upload through an integer that increments after each upload.
Thanks in advance!

My understanding is that you would need to handle that yourself somehow.
The background isolate has a FlutterEngine attached so that you can access the WidgetsFlutterBinding, but there is no BuildContext and no locale information readily available.
And you would probably need to handle communication between the isolates via send and receive ports.
I have a similar problem as I need to keep track of the files that have already been uploaded because I need to trigger
additional network requests in that case.

@lyio Yes, that's the main point, usually you can set up a sendPort when you spawn an isolate, so that you can have a communication between the GUI isolate and the background worker.
I've looked a bit into the source code or the internal documentation, but I couldn't find anything, that's why I asked here, and of course, you can't handle that on the GUI Isolate, which may die while the background one should not.
May you give me more information on how to do something similar through WidgetsFlutterBinding?
Also, thanks for answering

Look at IsolateNameServer & register a named port which you can look up.
Also, moor supports multi-isolate operation and you may be able to persist data in there.

@ened Oh, thanks, I didn't know anything like that actually existed, while regarding moor, I already use Hive as my database solution, which can also be modified from a separate Isolate.

@ened is the backgroundHandler always invoked? From the example I gather that you register the handler once and that the isolate is kept running.
But on the Android side the Isolate is only spun up when you actually schedule work. So is there one isolate per task?

@lyio Should be one isolate only which is kept around but can be stopped at some point. Do you observe unexpected behavior?

well, at the moment I am not observing any behavior.
This is the handler:
void uploaderBackgroundHandler() {
  WidgetsFlutterBinding.ensureInitialized();
  final _logger = Logger('uploaderBackgroundHandler');

  // Notice these instances belong to a forked isolate.
  final uploader = FlutterUploader();
  _logger.warning('started background isolate');
  uploader.progress.listen((task) {
    // application is in background and we have no idea, which tasks
    // need to be handled here
    _logger.severe('+++++++++++++++++++++++++++++++++++++++++++++++++++');
    _logger.severe(task);
    _logger.severe('+++++++++++++++++++++++++++++++++++++++++++++++++++');

    // probably persist the taskId somewhere
  });

  uploader.result.listen((event) {
    _logger.severe('---------------------------------------');
    _logger.severe(event);
    _logger.severe('---------------------------------------');
  });
}

None of the log statements are triggered.
I also have regular listeners in my main isolate that listen for progress and result. Those are triggered as expected.
So, I am not sure what else to do. Is there anything I need to do apart from calling setBackgroundHandler?


String manipulation

There are currently two set methods and I've modified one of them.
Set has remained as it was before, it changes the version of everything that is specified.
Version however extracts the numbers and the points from the given string.
This is especially useful if you run the plugin from a Github workflow and want to use the branch name as the version.
Say the branchname is: release / 0.1.8
then the version is only 0.1.8

Okay @f3ath, tests are broke, lol.
When you add a new commit to this PR, and open the action details before it runs into the test section you can see its progress and that it finishes the tests...

Okay @f3ath, tests are broke, lol.
When you add a new commit to this PR, and open the action details before it runs into the test section you can see its progress and that it finishes the tests...

Sorry for the number of commits, I tried to solve the problem with the tests, but I'm not that experienced with it.
The PR deals with something else. Hope it helps :)

Sorry for the number of commits, I tried to solve the problem with the tests, but I'm not that experienced with it.
The PR deals with something else. Hope it helps :)

Hi @M123-dev, thanks for the PR. It seems to me that pre-processing the command arguments is out of scope for this tool. For your case, have you considered using grep (or sed, or awk) to extract the version?
E.g. echo "release / 0.1.8" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+'

Thank you for the tip @f3ath , yes that should help. Anyways thanks for the package 👍


use composer to handle dependencies

The goal of this task is to be able to create a YAWIK instance by:
composer create-project cross-solution/yawik MyYawik
This should install the YAWIK installation into a MyYawik directory.
Additional Modules should be installed by eg.
composer require cross-solution/yawik-company-registration
or removed by
composer remove cross-solution/yawik-company-registration
Drupal shows how to do it: https://github.com/drupal-composer/drupal-project

We've send a pull request to the composer/installers project
https://github.com/composer/installers/pull/296

our pull request was merged
https://github.com/composer/installers/pull/320


builtin django-threadedcomments outofdate

Hi guys,
I was having an issue using threadedcomments, it seems that the one you guys used is 0.5 and it seems to be not working at least with django 1.8, the error was:

from django.utils.encoding import force_unicode
ImportError: cannot import name 'force_unicode'

When manually installing django-threadedcomments everythings went smooth. Is there a way to manualy remove the built in package of this apps ? I don,t want to have 2 of this package in my site-package
It will be nice to have at least a note about this issue

it seems that the one you guys used is 0.5
When manually installing django-threadedcomments everythings went smooth.

I'm sorry, I don't really get what you mean. Do you have an example what you installed, or when things went wrong?


MarkerWithLabel missing in TypeScript declaration

MarkerWithLabel is missing TypeScript declaration in index.d.ts so it cannot be used in TS applications without suppressing TypeScript.

+1

+1

+1

+1

+1

+1

+1

@StefanoSega @dszymczuk @ademspr @SergeyW  @sangnguyenplus @vincentjames501  The repo of this project is unmaintained more than a 2 years, and we had build new version https://www.npmjs.com/package/@react-google-maps/api
We had rewrite it to TypeScript, and updating it frequently: https://github.com/JustFly1984/react-google-maps-api/tree/master/packages/react-google-maps-api
You can enjoy autocomplete.
You can see our docs: https://react-google-maps-api-docs.netlify.app
Also a lot of examples: https://react-google-maps-api-gatsby-demo.netlify.app/ https://github.com/JustFly1984/react-google-maps-api/tree/master/packages/react-google-maps-api-gatsby-example/src/examples
The bundle size is much smaller: https://bundlephobia.com/result?p=@react-google-maps/api
Our Spectrum community: https://spectrum.chat/react-google-maps
Our Slack channel: https://join.slack.com/t/react-google-maps-api/shared_invite/enQtODc5ODU1NTY5MzQ4LTBiNTYzZmY1YmVjYzJhZThkMGU0YzUwZjJkNGJmYjk4YjQyYjZhMDk2YThlZGEzNDc0M2RhNjBmMWE4ZTJiMjQ
Enjoy!


Fix object require cycles

THis fixes #97 and #99 with minimal changes

I have no plans on merging this. Circular imports are valid per the ES modules spec, so there’s no reason to remove them, except that often downstream tools do not handle them correctly or issue spurious warnings. I might remove them eventually, but it’s not a priority.


Training Setup Error

Hello! I do apologize if this is something easily fixed that I missed, but it seems that the current training code throws an error related to the name2 color2. Any ideas where I might be going wrong?
Traceback (most recent call last):
  File "train.py", line 139, in <module>
    t.train()
  File "train.py", line 98, in train
    for image, mask in self.loader:
  File "/usr/local/lib/python3.7/dist-packages/torch/utils/data/dataloader.py", line 521, in __next__
    data = self._next_data()
  File "/usr/local/lib/python3.7/dist-packages/torch/utils/data/dataloader.py", line 1203, in _next_data
    return self._process_data(data)
  File "/usr/local/lib/python3.7/dist-packages/torch/utils/data/dataloader.py", line 1229, in _process_data
    data.reraise()
  File "/usr/local/lib/python3.7/dist-packages/torch/_utils.py", line 434, in reraise
    raise exception
ZeroDivisionError: Caught ZeroDivisionError in DataLoader worker process 0.
Original Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/torch/utils/data/_utils/worker.py", line 287, in _worker_loop
    data = fetcher.fetch(index)
  File "/usr/local/lib/python3.7/dist-packages/torch/utils/data/_utils/fetch.py", line 49, in fetch
    data = [self.dataset[idx] for idx in possibly_batched_index]
  File "/usr/local/lib/python3.7/dist-packages/torch/utils/data/_utils/fetch.py", line 49, in <listcomp>
    data = [self.dataset[idx] for idx in possibly_batched_index]
  File "train.py", line 46, in __getitem__
    name2  = self.color1[idx%len(self.color1)] if np.random.rand()<0.7 else self.color2[idx%len(self.color2)]
ZeroDivisionError: integer division or modulo by zero

Please print the variables of self.color1, self.color2 and self.samples. I guess you have changed the file path or file name that all these variables are empty.

ah! my apologies, appears it was a super simple error on my part. did not have all the testing folders with imagery. all good! thank you for the reply.


Using Docker alpine

What is the purpose of this Pull Request?
Using alpine as base image.
Generate a smaller docker image. From 707 M to 381M
Add linter to Dockerfile
What was done to achieve this purpose?
Change the order of pip install
How to test if it really works?
docker build -t rosie .
docker run --rm -v /tmp/serenata-data:/tmp/serenata-data rosie test
Who can help reviewing it?
Anyone with docker

Coverage remained the same at 98.045% when pulling 58ccad07510124d60bae87a742519a030c4fabaa on caduvieira:docker_alpine into c599dc73298fdc5c1ceb4077fa1553c75358e90c on datasciencebr:master.

The other is the Dockefile linter: how does it work, can you give us more information on that, on the advantages of using it?

Hell yeah, @caduvieira — just did my homework and Dockerfile linters are awesome : ) Just a minor change in requirements.txt and we're good to go!

Hi @caduvieira and @cuducos.
I've just merged the smaller docker image (I was imagining that was better after this PR). I'll test this one locally, and give you a better feedback :)

So, me again here:
For me it is working ok @cuducos:

```console
➜  rosie git:(caduvieira-docker_alpine) docker build -t rosie .
Sending build context to Docker daemon  467.5kB
Step 1/9 : FROM alpine:3.6
3.6: Pulling from library/alpine
b56ae66c2937: Pull complete
Digest: sha256:b40e202395eaec699f2d0c5e01e6d6cb8e6b57d77c0e0221600cf0b5940cf3ab
Status: Downloaded newer image for alpine:3.6
 ---> 37eec16f1872
Step 2/9 : LABEL maintainer "https://github.com/datasciencebr/rosie"
 ---> Running in b822360e12a1
 ---> 70afa33d3278
Removing intermediate container b822360e12a1
Step 3/9 : COPY requirements.txt ./
 ---> fc5b807ad2b6
Step 4/9 : COPY setup ./
 ---> 086cf675f2a9
Step 5/9 : COPY rosie.py ./
 ---> 5ad42b0c78ba
Step 6/9 : COPY rosie ./rosie
 ---> 2f61dea68771
Step 7/9 : COPY config.ini.example ./
 ---> e8f7feb43826
Step 8/9 : RUN apk add --no-cache python3 libstdc++ lapack &&     python3 -m ensurepip &&     rm -r /usr/lib/python*/ensurepip &&     pip3 install --upgrade pip setuptools &&     if [ ! -e /usr/bin/pip ]; then ln -s pip3 /usr/bin/pip ; fi &&     apk add --no-cache         --virtual=.build-dependencies         g++ gfortran musl-dev lapack-dev         python3-dev ca-certificates  libxslt-dev libxml2-dev &&     ln -s locale.h /usr/include/xlocale.h &&     ln -s /usr/bin/python3 /usr/bin/python &&     ./setup &&     find /usr/lib/python3.*/ -name 'tests' -exec rm -r '{}' + &&     rm /usr/include/xlocale.h &&     rm -r /root/.cache &&     apk del --purge .build-dependencies
 ---> Running in b468b7617854
fetch http://dl-cdn.alpinelinux.org/alpine/v3.6/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.6/community/x86_64/APKINDEX.tar.gz
(1/16) Installing libgcc (6.3.0-r4)
(2/16) Installing libquadmath (6.3.0-r4)
(3/16) Installing libgfortran (6.3.0-r4)
(4/16) Installing lapack (3.7.0-r0)
(5/16) Installing libstdc++ (6.3.0-r4)
(6/16) Installing libbz2 (1.0.6-r5)
(7/16) Installing expat (2.2.0-r1)
(8/16) Installing libffi (3.2.1-r3)
(9/16) Installing gdbm (1.12-r0)
(10/16) Installing xz-libs (5.2.3-r0)
(11/16) Installing ncurses-terminfo-base (6.0_p20170930-r0)
(12/16) Installing ncurses-terminfo (6.0_p20170930-r0)
(13/16) Installing ncurses-libs (6.0_p20170930-r0)
(14/16) Installing readline (6.3.008-r5)
(15/16) Installing sqlite-libs (3.20.1-r0)
(16/16) Installing python3 (3.6.1-r3)
Executing busybox-1.26.2-r7.trigger
OK: 81 MiB in 27 packages
Requirement already satisfied: setuptools in /usr/lib/python3.6/site-packages
Requirement already satisfied: pip in /usr/lib/python3.6/site-packages
Requirement already up-to-date: pip in /usr/lib/python3.6/site-packages
Collecting setuptools
  Downloading setuptools-36.6.0-py2.py3-none-any.whl (481kB)
Installing collected packages: setuptools
  Found existing installation: setuptools 28.8.0
    Uninstalling setuptools-28.8.0:
      Successfully uninstalled setuptools-28.8.0
Successfully installed setuptools-36.6.0
fetch http://dl-cdn.alpinelinux.org/alpine/v3.6/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.6/community/x86_64/APKINDEX.tar.gz
(1/25) Installing binutils-libs (2.28-r3)
(2/25) Installing binutils (2.28-r3)
(3/25) Installing gmp (6.1.2-r0)
(4/25) Installing isl (0.17.1-r0)
(5/25) Installing libgomp (6.3.0-r4)
(6/25) Installing libatomic (6.3.0-r4)
(7/25) Installing pkgconf (1.3.7-r0)
(8/25) Installing mpfr3 (3.1.5-r0)
(9/25) Installing mpc1 (1.0.3-r0)
(10/25) Installing gcc (6.3.0-r4)
(11/25) Installing musl-dev (1.1.16-r14)
(12/25) Installing libc-dev (0.7.1-r0)
(13/25) Installing g++ (6.3.0-r4)
(14/25) Installing gfortran (6.3.0-r4)
(15/25) Installing lapack-dev (3.7.0-r0)
(16/25) Installing python3-dev (3.6.1-r3)
(17/25) Installing ca-certificates (20161130-r2)
(18/25) Installing libgpg-error (1.27-r0)
(19/25) Installing libgcrypt (1.7.9-r0)
(20/25) Installing libxml2 (2.9.4-r4)
(21/25) Installing libxslt (1.1.29-r3)
(22/25) Installing zlib-dev (1.2.11-r0)
(23/25) Installing libxml2-dev (2.9.4-r4)
(24/25) Installing libxslt-dev (1.1.29-r3)
(25/25) Installing .build-dependencies (0)
Executing busybox-1.26.2-r7.trigger
Executing ca-certificates-20161130-r2.trigger
OK: 275 MiB in 52 packages
Collecting geopy>=1.11.0 (from -r requirements.txt (line 1))
  Downloading geopy-1.11.0-py2.py3-none-any.whl (66kB)
Collecting numpy==1.13.1 (from -r requirements.txt (line 2))
  Downloading numpy-1.13.1.zip (5.0MB)
Collecting scipy==0.19.0 (from -r requirements.txt (line 3))
  Downloading scipy-0.19.0.zip (15.3MB)
Collecting pycpfcnpj==1.0.2 (from -r requirements.txt (line 4))
  Downloading pycpfcnpj-1.0.2.tar.gz
Collecting scikit-learn==0.18.1 (from -r requirements.txt (line 5))
  Downloading scikit-learn-0.18.1.tar.gz (8.9MB)
Collecting serenata-toolbox (from -r requirements.txt (line 6))
  Downloading serenata_toolbox-12.2.2-py3-none-any.whl
Collecting tqdm (from serenata-toolbox->-r requirements.txt (line 6))
  Downloading tqdm-4.19.4-py2.py3-none-any.whl (50kB)
Collecting lxml>=3.6 (from serenata-toolbox->-r requirements.txt (line 6))
  Downloading lxml-4.1.0.tar.gz (4.2MB)
Collecting pandas>=0.18 (from serenata-toolbox->-r requirements.txt (line 6))
  Downloading pandas-0.21.0.tar.gz (11.3MB)
Collecting boto3 (from serenata-toolbox->-r requirements.txt (line 6))
  Downloading boto3-1.4.7-py2.py3-none-any.whl (128kB)
Collecting aiofiles (from serenata-toolbox->-r requirements.txt (line 6))
  Downloading aiofiles-0.3.2-py3-none-any.whl
Collecting beautifulsoup4>=4.4 (from serenata-toolbox->-r requirements.txt (line 6))
  Downloading beautifulsoup4-4.6.0-py3-none-any.whl (86kB)
Collecting aiohttp (from serenata-toolbox->-r requirements.txt (line 6))
  Downloading aiohttp-2.3.1.tar.gz (1.1MB)
Collecting python-dateutil>=2 (from pandas>=0.18->serenata-toolbox->-r requirements.txt (line 6))
  Downloading python_dateutil-2.6.1-py2.py3-none-any.whl (194kB)
Collecting pytz>=2011k (from pandas>=0.18->serenata-toolbox->-r requirements.txt (line 6))
  Downloading pytz-2017.3-py2.py3-none-any.whl (511kB)
Collecting botocore<1.8.0,>=1.7.0 (from boto3->serenata-toolbox->-r requirements.txt (line 6))
  Downloading botocore-1.7.36-py2.py3-none-any.whl (3.7MB)
Collecting jmespath<1.0.0,>=0.7.1 (from boto3->serenata-toolbox->-r requirements.txt (line 6))
  Downloading jmespath-0.9.3-py2.py3-none-any.whl
Collecting s3transfer<0.2.0,>=0.1.10 (from boto3->serenata-toolbox->-r requirements.txt (line 6))
  Downloading s3transfer-0.1.11-py2.py3-none-any.whl (54kB)
Collecting chardet (from aiohttp->serenata-toolbox->-r requirements.txt (line 6))
  Downloading chardet-3.0.4-py2.py3-none-any.whl (133kB)
Collecting multidict>=3.0.0 (from aiohttp->serenata-toolbox->-r requirements.txt (line 6))
  Downloading multidict-3.3.0.tar.gz
Collecting async_timeout>=1.2.0 (from aiohttp->serenata-toolbox->-r requirements.txt (line 6))
  Downloading async_timeout-2.0.0-py3-none-any.whl
Collecting yarl>=0.11 (from aiohttp->serenata-toolbox->-r requirements.txt (line 6))
  Downloading yarl-0.13.0.tar.gz (136kB)
Collecting six>=1.5 (from python-dateutil>=2->pandas>=0.18->serenata-toolbox->-r requirements.txt (line 6))
  Downloading six-1.11.0-py2.py3-none-any.whl
Collecting docutils>=0.10 (from botocore<1.8.0,>=1.7.0->boto3->serenata-toolbox->-r requirements.txt (line 6))
  Downloading docutils-0.14-py3-none-any.whl (543kB)
Installing collected packages: geopy, numpy, scipy, pycpfcnpj, scikit-learn, tqdm, lxml, six, python-dateutil, pytz, pandas, jmespath, docutils, botocore, s3transfer, boto3, aiofiles, beautifulsoup4, chardet, multidict, async-timeout, yarl, aiohttp, serenata-toolbox
  Running setup.py install for numpy: started
    Running setup.py install for numpy: still running...
    Running setup.py install for numpy: still running...
    Running setup.py install for numpy: finished with status 'done'
  Running setup.py install for scipy: started
    Running setup.py install for scipy: still running...
    Running setup.py install for scipy: still running...
    Running setup.py install for scipy: still running...
    Running setup.py install for scipy: still running...
    Running setup.py install for scipy: still running...
    Running setup.py install for scipy: still running...
    Running setup.py install for scipy: still running...
    Running setup.py install for scipy: still running...
    Running setup.py install for scipy: still running...
    Running setup.py install for scipy: still running...
    Running setup.py install for scipy: finished with status 'done'
  Running setup.py install for pycpfcnpj: started
    Running setup.py install for pycpfcnpj: finished with status 'done'
  Running setup.py install for scikit-learn: started
    Running setup.py install for scikit-learn: still running...
    Running setup.py install for scikit-learn: still running...
    Running setup.py install for scikit-learn: finished with status 'done'
  Running setup.py install for lxml: started
    Running setup.py install for lxml: still running...
    Running setup.py install for lxml: finished with status 'done'
  Running setup.py install for pandas: started
    Running setup.py install for pandas: still running...
    Running setup.py install for pandas: still running...
    Running setup.py install for pandas: still running...
    Running setup.py install for pandas: still running...
    Running setup.py install for pandas: still running...
    Running setup.py install for pandas: finished with status 'done'
  Running setup.py install for multidict: started
    Running setup.py install for multidict: finished with status 'done'
  Running setup.py install for yarl: started
    Running setup.py install for yarl: finished with status 'done'
  Running setup.py install for aiohttp: started
    Running setup.py install for aiohttp: finished with status 'done'
Successfully installed aiofiles-0.3.2 aiohttp-2.3.1 async-timeout-2.0.0 beautifulsoup4-4.6.0 boto3-1.4.7 botocore-1.7.36 chardet-3.0.4 docutils-0.14 geopy-1.11.0 jmespath-0.9.3 lxml-4.1.0 multidict-3.3.0 numpy-1.13.1 pandas-0.21.0 pycpfcnpj-1.0.2 python-dateutil-2.6.1 pytz-2017.3 s3transfer-0.1.11 scikit-learn-0.18.1 scipy-0.19.0 serenata-toolbox-12.2.2 six-1.11.0 tqdm-4.19.4 yarl-0.13.0
WARNING: Ignoring APKINDEX.84815163.tar.gz: No such file or directory
WARNING: Ignoring APKINDEX.24d64ab1.tar.gz: No such file or directory
(1/25) Purging .build-dependencies (0)
(2/25) Purging g++ (6.3.0-r4)
(3/25) Purging libc-dev (0.7.1-r0)
(4/25) Purging gfortran (6.3.0-r4)
(5/25) Purging gcc (6.3.0-r4)
(6/25) Purging binutils (2.28-r3)
(7/25) Purging libatomic (6.3.0-r4)
(8/25) Purging libgomp (6.3.0-r4)
(9/25) Purging musl-dev (1.1.16-r14)
(10/25) Purging lapack-dev (3.7.0-r0)
(11/25) Purging python3-dev (3.6.1-r3)
(12/25) Purging ca-certificates (20161130-r2)
Executing ca-certificates-20161130-r2.post-deinstall
(13/25) Purging libxslt-dev (1.1.29-r3)
(14/25) Purging libxslt (1.1.29-r3)
(15/25) Purging libxml2-dev (2.9.4-r4)
(16/25) Purging zlib-dev (1.2.11-r0)
(17/25) Purging libxml2 (2.9.4-r4)
(18/25) Purging binutils-libs (2.28-r3)
(19/25) Purging mpc1 (1.0.3-r0)
(20/25) Purging mpfr3 (3.1.5-r0)
(21/25) Purging isl (0.17.1-r0)
(22/25) Purging gmp (6.1.2-r0)
(23/25) Purging pkgconf (1.3.7-r0)
(24/25) Purging libgcrypt (1.7.9-r0)
(25/25) Purging libgpg-error (1.27-r0)
Executing busybox-1.26.2-r7.trigger
OK: 81 MiB in 27 packages
 ---> 06ce7a17a7aa
Removing intermediate container b468b7617854
Step 9/9 : ENTRYPOINT python rosie.py
 ---> Running in 73cf659df460
 ---> 6b28182e950a
Removing intermediate container 73cf659df460
Successfully built 6b28182e950a
Successfully tagged rosie:latest
```

and the tests:
$ docker run --rm -v /tmp/serenata-data:/tmp/serenata-data rosie test

➜  rosie git:(caduvieira-docker_alpine) docker run --rm -v /tmp/serenata-data:/tmp/serenata-data rosie test
......................................................................
----------------------------------------------------------------------
Ran 70 tests in 2.768s

OK

@cuducos I couldn't reproduce that error

It took a long time to build the image but ran smoothly here too. :)

Hey @cuducos What do you think have this image builded by Docker hub?

Hey @cuducos What do you think have this image builded by Docker hub?

Looks that it's already done here so the part about how to run this image could be just the second line with a small modification on README.md something like docker run --rm -v /tmp/serenata-data:/tmp/serenata-data datasciencebr/rosie test  since Docker downloads the image if it's not there yet.
@caduvieira @cuducos @anaschwendler What do you think of this?

Ok, just re-ran the build and it worked — probably just some minor internet instability or whatever. I'm sorry about that.
I think we need small tweaks before I'm able to merge it:

During the scikit-learn wheel build it was failing because of "missing scipy"

So this is an intended exception. Could you document it adding a comment in the requirements.txt file? (BTW I tested sorting it and indeed it fails! Thanks for the catch, @caduvieira!)

a small modification on README.md something like docker run --rm -v /tmp/serenata-data:/tmp/serenata-data datasciencebr/rosie test since Docker downloads the image if it's not there yet.

And this edit suggested by @lipemorais, since people can use the image from Docker Hub instead of building theirs themselves ; )

Coverage remained the same at 98.045% when pulling 00129b7e24b784dcd188f93f8a72aa54a2163afd on caduvieira:docker_alpine into c599dc73298fdc5c1ceb4077fa1553c75358e90c on datasciencebr:master.

Done and rebased

Coverage remained the same at 98.045% when pulling cf817242c4e5d886fd3b60fdc0b80e8ab8659533 on caduvieira:docker_alpine into 49c069d674f3399f9b69c5c4c6b0ef81cd4fb21c on datasciencebr:master.

@caduvieira, may in the future we could split the new docker file based on Alpine and the docker file linter improvement in two different PR, so it could be merged even if the other one is not able to be merged yet. ;)

Last review!

Clone the project:

$ git clone git@github.com:datasciencebr/rosie.git

Change to Rosie' folder:

$ cd rosie

Change to the tested branch:

$ git checkout -b caduvieira-docker_alpine master

Merge its content:

$ git pull https://github.com/caduvieira/rosie.git docker_alpine

Run the new Docker commands:

$ docker build -t rosie .
$ docker run --rm -v /tmp/serenata-data:/tmp/serenata-data rosie test

The result:
➜  rosie git:(caduvieira-docker_alpine) docker run --rm -v /tmp/serenata-data:/tmp/serenata-data rosie test
......................................................................
----------------------------------------------------------------------
Ran 70 tests in 3.189s

OK

Done!


migration in status 5 since ~12h

brief description
The files from task 220918_180601:nbinnorj_crab_JMENanoRun3_v2p1_EGamma_Run2022D-PromptReco-v1 are failing to be published by CRAB Publisher because they require the mirgation 3401574,  which is still in status 5 despite being submitted around 12 hours ago.
It is possible that I am simply too greedy, but from my (very little) user experience with DBSMigration so far I had the impression that the status change 5->0 is usually quite quick and I worry that something may be wrong.
What should we do? Is it worth investigating what happened or should we simply try and remove and submit the migration again if it stays in status 5 for too long?
Thanks you very much for you help and kudos for the great work, this is the first "issue" with DBSMigration we see since weeks, which is a good thing!
some further information
The migration 3401574 seems to be the only one stuck in status 5 at the moment:
> curl -L --key $X509_USER_PROXY --cert $X509_USER_PROXY "https://cmsweb-prod.cern.ch/dbs/prod/phys03/DBSMigrate/status?migration_status=5"
[
{"create_by":"/DC=ch/DC=cern/OU=computers/CN=tw/crab-prod-tw01.cern.ch","creation_date":1663534952,"last_modification_date":1663534952,"last_modified_by":"/DC=ch/DC=cern/OU=computers/CN=tw/crab-prod-tw01.cern.ch","migration_input":"/EGamma/Run2022D-PromptReco-v1/MINIAOD#9b00d04b-4691-48d3-83b3-477fd9617c22","migration_request_id":3401574,"migration_server":null,"migration_status":5,"migration_url":"https://cmsweb-prod.cern.ch:8443/dbs/prod/global/DBSReader","retry_count":0}
]

Something strange may have happened, since DBSMigrate server says that the migration was moved to status 0
> hostname && pwd
vocms0750.cern.ch
/cephfs/product/dbs-logs
> grep "3401574" dbs2go-*-m-*-20220918
[...]
dbs2go-phys03-m-6494c59fd6-n7zfh.log-20220918:[2022-09-18 21:02:32.65678911 +0000 UTC m=+551201.391874504] migrate.go:1378: update migration request 3401574 to status 0
[...]

Dario, the logs reveal the following message:
[2022-09-18 21:32:53.093813555 +0000 UTC m=+553021.828898949] handlers.go:474: DBSPostHandler: API=submit, dn=[/DC=ch/DC=cern/OU=computers/CN=tw/crab-prod-tw01.cern.ch], uri=/dbs/prod/phys03/DBSMigrate/submit
[2022-09-18 21:32:53.094131219 +0000 UTC m=+553021.829216613] handlers.go:514: API=submit params=map[] createBy=/DC=ch/DC=cern/OU=computers/CN=tw/crab-prod-tw01.cern.ch separator=','
[2022-09-18 21:32:53.094331789 +0000 UTC m=+553021.829417182] migrate.go:669: submit migration request  {"migration_url":
"https://cmsweb-prod.cern.ch:8443/dbs/prod/global/DBSReader", "migration_input": "/EGamma/Run2022D-PromptReco-v1/MINIAOD#9
b00d04b-4691-48d3-83b3-477fd9617c22"}
...
[2022-09-18 21:32:53.345052223 +0000 UTC m=+553022.080137616] handlers.go:86: DBSError Code:125 Description:DBS Migration error Function:dbs.migrate.SubmitMigration Message:Migration request /EGamma/Run2022D-PromptReco-v1/MINIAOD#9b00d04b-4691-48d3-83b3-477fd9617c22, id=0 Error: migration request /EGamma/Run2022D-PromptReco-v1/MINIAOD#9b00d04b-4691-48d3-83b3-477fd9617c22 is already exist in DB with id=3401574

It means that crab client called SubmitMigration API when this migration request was already there. Once I start walking backwards in log file I found the following:
[2022-09-18 21:02:32.658228471 +0000 UTC m=+551201.393313854] migrate.go:866: Migration request for /EGamma/Run2022D-Promp
tReco-v1/MINIAOD#ca04d20c-837d-429a-b10e-ad2dff52218a insert MigrationRequest record {MIGRATION_REQUEST_ID:0 MIGRATION_URL
:https://cmsweb-prod.cern.ch:8443/dbs/prod/global/DBSReader MIGRATION_INPUT:/EGamma/Run2022D-PromptReco-v1/MINIAOD#ca04d20
c-837d-429a-b10e-ad2dff52218a MIGRATION_STATUS:0 MIGRATION_SERVER: CREATE_BY:/DC=ch/DC=cern/OU=computers/CN=tw/crab-prod-tw01.cern.ch CREATION_DATE:1663534952 LAST_MODIFIED_BY:/DC=ch/DC=cern/OU=computers/CN=tw/crab-prod-tw01.cern.ch LAST_MODIFICATION_DATE:1663534952 RETRY_COUNT:0}
[2022-09-18 21:02:32.658463442 +0000 UTC m=+551201.393548824] migrate.go:1330: unable to query statement:
SELECT MIGRATION_SERVER
FROM cms_dbs3_prod_phys03_owner.MIGRATION_REQUESTS
WHERE MIGRATION_REQUEST_ID = :migration_request_id

error=ORA-02396: exceeded maximum idle time, please connect again

[2022-09-18 21:02:32.65870935 +0000 UTC m=+551201.393794744] migrate.go:746: finished {MIGRATION_REQUEST_ID:3401574 MIGRATION_URL:https://cmsweb-prod.cern.ch:8443/dbs/prod/global/DBSReader MIGRATION_INPUT:/EGamma/Run2022D-PromptReco-v1/MINIAOD#
9b00d04b-4691-48d3-83b3-477fd9617c22 MIGRATION_STATUS:5 MIGRATION_SERVER: CREATE_BY:/DC=ch/DC=cern/OU=computers/CN=tw/crab-prod-tw01.cern.ch CREATION_DATE:1663534952 LAST_MODIFIED_BY:/DC=ch/DC=cern/OU=computers/CN=tw/crab-prod-tw01.cern.ch LAST
_MODIFICATION_DATE:1663534952 RETRY_COUNT:0} with 4 migration requests

So, I see the following data flow:

at 2022-09-18 21:02:32.658228471 we got submit request API call
at 2022-09-18 21:02:32.658463442 we got ORA-02396 query error which fails due to idle timeout ORACLE connection

I think we got unlucky since during that time one of the ORACLE connection timeout due to idle state. This cause the request to stay in QUEUD state.
Therefore, we have two solutions (which I suggest you evaluate an decide how to use in a future):

you can either delete request and submit it again
or, you can explicitly process the request via /process API, in this case you will do:

# migration document
cat > m.json << EOF
{
    "migration_rqst_id":65023
}
EOF

# submit migration request to explicitly process it
curl -H "Content-Type: application/json"<EMAIL_ADDRESS>\
    http://localhost:9898/dbs2go-migrate/process

I think it would be interested to know if you'll use second method for two reason:

I think we never used this API before and it is good chance to see how it will work
it does not contradict the first approach to delete and resubmit, but you may decide in your workflow that you may try explicitly process migration requests which stale for too long. And, if such procedure does not work after couple of times you may declare failure and open a ticket.

But I think both approaches are the same in your side. Now, at least we know the reason of failure and it is ORACLE connection issue rather a failure in a business logic of DBSMigrate/DBSMigration. I need to study and see what to do with such ORACLE failures though and I think we should keep this ticket open until I find solution. My bet that I should check ORACLE failure if make exception for this kind of error and retry obtain ORACLE connection again.

Thanks for diagnosis Valentin. IMHO it should be DBS migration server duty to check on failures and do proper restarts. Things may always fail for various reasons, Oracle restarts, CMSWEB restarts, networks issues, all unplanned and unexpected. But from client side (i.e. us) once we have submitted a request and logged an ID for it, it is fair to assume that the remote server will keep doing its best to fulfill it, or mark as failed.
We do retry failed migrations, but if server does not announce a "failure", it means to us that server is still working on it, so best approach is not to touch it.
I do not like to code things like "if status=5 for N hours, than read it as status=9". It fully destroys the agreed-upon semantics of what status means.
The /process API is intriguing. Indeed we never use it and never looked at it. I am not sure how we should deal with it though, exactly for the above reason. Is this a "forced retry ?" .  Is this not a marvelous use case for "the server tries again" ?

@vkuznet let me try now to move from high level "is this my or your responsibility" to the details of what happens, which of course I may have misunderstood here. Maybe you can simply look at what exactly are the requirements for a migration to move from 5 to 0 and verify whether some checks could be introduced to make it go to  3 in a case like this ?
IIUC migrations in status 3 will be automatically retried ( up to 3 times )  as per https://github.com/dmwm/dbs2go/blob/master/docs/MigrationServer.md
If not because of unexpected, transient glitches like this, what are the conditions which may cause a migration to go in status 3 ?
Also, IIUC, when client submits  a migration ID is created with status=5 in an ad-hoc table, and the migration /submit API only returns success if this happened. After that there is a polling cycle and migration is acted upon and moved to 0. So it appeats that the code which should move it to 0 is continuosly called in at each polling cycle, and continuously failing. That's really something to deal with inside server.
Finally, I believe that /process should also be something that server may use, not client. IIUC the documetnation it is an API which forcefully pushes something into action while the server is full time busy processing its own queue... ahem... if there are free resources, the server should use them. If there are now, better that client does not mess with an overloaded system. I do not see an use case for CRAB to try to force migration server hand this way. We patiently retry to request migration for needed blocks and only stop when those are found in target DBS. The semantic I was given in DBS3 times was "try to submit and DBS will tell you if migration is already in progress" so requesting a migration which is already there is sort of part of the contract. But if the new server prefers a "check for a migration in progress before submitting", we can certainly add it. That means 2 calls instead of 1 in large majority of cases, but server is fast enough that it could handle w/o sweat. Your call.

Stefano, I understand everything you're saying and I'm working on solution. The only issue is how to test this unforeseen ORACLE errors. I'll put something in production server today/tomorrow and it would be useful if we'll not touch this request 3401574 as I'll use it to test the solution.

I deployed new code which now handles such stale requests and voila without my or yours intervention it works. Your request is processed and migrated with status 2 (SUCCESS).
scurl -s "https://cmsweb-prod.cern.ch/dbs/prod/phys03/DBSMigrate/status?migration_request_id=3401574" | jq
[
  {
    "create_by": "/DC=ch/DC=cern/OU=computers/CN=tw/crab-prod-tw01.cern.ch",
    "creation_date":<PHONE_NUMBER>,
    "last_modification_date":<PHONE_NUMBER>,
    "last_modified_by": "/DC=ch/DC=cern/OU=computers/CN=tw/crab-prod-tw01.cern.ch",
    "migration_input": "/EGamma/Run2022D-PromptReco-v1/MINIAOD#9b00d04b-4691-48d3-83b3-477fd9617c22",
    "migration_request_id": 3401574,
    "migration_server": "dbs2go-phys03-migration-6f75c685c9-bvg7h",
    "migration_status": 2,
    "migration_url": "https://cmsweb-prod.cern.ch:8443/dbs/prod/global/DBSReader",
    "retry_count": 0
  }
]

Please confirm from your end and let me know if we can close the issue, or close it on your own if you're happy with resolution.

Shortly after your last comment, CRAB Publisher managed to properly publish all the files. Everything looks good to me. Thank you very much Valentin for the very prompt implementation of a solution. I will happily close this issue :)

(image taken from https://monit-grafana.cern.ch/goto/Cvccyx7Vk?orgId=11)


Support multiple candidates

When searching for "Leviathan Wakes" audible returns 2 results, but only one is an option in beets-audible
audible products results
And it seems like beets-audible is merging the dictionaries for these books. The second book is selected B073H9PF2D but the subtitle from the first B00P9XDQFY is saved to the metadata.

I suspect this is an instance of beetbox/beets#4299

I just confirmed that I have nightly installed ( I checked for your changes to beets in the PR above) and I still only get 1 candidate.

Your fix is only half way there. The change you made in 4299 stops the matches from being marked as duplicates, but then they are all added to the results dictionary using the same key, album_id which is none. This is why only the last worst match is being presented to the user.
https://github.com/beetbox/beets/blob/988bf2672cac36fb625e0fc87983ff641a0c214e/beets/autotag/match.py#L385-L386

Can you report this issue upstream?

This feature was added in #23


gopass - add recipient - squash commits?

If I add a recipient using gopass, I get individual commits for every secret.  Looking at the git history, its quite long and I am wondering if it makes sense to 'squash' all the commits for a single recipient that gets added? Or if not, why would that not make sense?

Good catch. At the moment adding or removing recipients is implemented in a very simple way, i.e. we just re-use the existing facilities which - under the hood - will do all the work.
We could (easily) make this a little more complex to have a less cluttered history.

@dominikschulz this would be a good addition for sure.  Thanks for adding this to your milestone.  If i can help in some way with implementing this, i'd be happy to give it a try.

Right now this would be either very hacky or very error prone to implement, but we're currently trying to figure out a sane way to implement this.

@dominikschulz thank you for the reply.  I'd be glad to help if anything is needed.


Added tutorial by IIT Bombay

Hacktoberfest notes:

due to volume of submissions, we may not be able to review PRs that do not pass tests and do not have informative titles.
please read our contributing guidelines
be sure to check the output of Travis-CI for linter errors
if this is your first open source contribution, make sure it's not your last!

What does this PR do?
Add Resource(s) | Remove Resource(s) | Add info | Improve Repo
For resources
Description
Why is this valuable (or not)?
How do we know it's really free?
For book lists, is it a book? For course lists, is it a course? etc.
Checklist:

[x] Not a duplicate
[x] Included author(s) if appropriate
[ ] Lists are in alphabetical order
[x] Needed indications added (PDF, access notes, under construction)

All videos, slides and script of video are separately downloadable under the right-hand side side-bar.


Support query by name

Allows to select a snabb instance by name in lwaftr query.
Before lwaftr query had an ad-hoc implementation that allowed to select a Snabb instance by name.  When SnabbVMX was called passing the --id argument, it stored an instance id in a counter called 'nic/id'.
A PID in lwaftr query could be either a PID or an SnabbVMX's ID. In case of being an ID, its value was compared to the value stored in 'nic/id'.
This PR adds proper support for querying by name using the standard mechanism (search instance name in /by-name folder). Additionally, the PR reworks other subcommands that used the former implementation.
Fixes #623.

@xray7224 Fixed issues. The last two commits contain the relevant changes.


Create a User Authentication Page

Please do work for this task in a branch named issue-02.
**Grouped into issue-07 since I was working on NavBar and forgot to create a new branch for the login authentication.

A duplicate issue so was moved and closed. See Issue 7 for more info.


Add pkcli setup_dev minimal_sirepo

I have a collection of 000.yml scattered around that I use for testing. We also have testing code in the existing 000.yml. Neither of these solutions are very good. One idea is to replace them with pkcli commands.
As a first step, I propose adding rsconf setup-dev minimal-sirepo which will have the bare necessities needed to setup sirepo on v4.radia.run (ex no v5 or v9). I find having the least amount of configuration possible helps me understand what's going on and then I can add more as I work on a feature.

https://github.com/radiasoft/rsconf/pull/339 needs to be merged before this is fixed.


Resources text format usage

I'm using script files to generate some scenes of my projects. It works fine with your text format, except when it comes to asset management. Unless I've missed it, I haven't been able to find documentation about the file format for tex, atex, fnt and similar binary formats, which makes them quite hard to correctly generate. Looking at the issues and the source code, I've been able to find references to a tres format, but I'm not sure if it's what I'm looking for, since it doesn't seem to be used for textures and fonts in the example files.
Basically, I'd like to be able to write a file with the following:
[texture]
image_path = /assets/directory/myImage.png
image_data = 45A45D21B454BADDCFFDE88==

Is that possible, one way or the other?
I'm aware that it would increase the project size and loading time, and that not every resource needs to be imported first (but some are, such as fonts, so why not do it for everything since a script will do it anyway), but I'd still like to know if it's possible. Being able to dynamically generate resources pre-build would be a tremendous help.

I've figured the following from a font resource. However, I'm not sure what this 333? (0x3FFFFFFF) means, anybody to help?
RSRC                   Magic number
^@^@^@^@               Endianness
^@^@^@^@               Is 64 bits file (false)
^A^@^@^@               Version major
^@^@^@^@               Version minor
^@^@^@^@               Format version
^E^@^@^@Font^@         Resource type
\237\276^B^@^@^@^@^@   Offset to impoty metadata
^@^@^@^@               Reserved
^@^@^@^@               Reserved
^@^@^@^@               Reserved
^@^@^@^@               Reserved
^@^@^@^@               Reserved
^@^@^@^@               Reserved
^@^@^@^@               Reserved
^@^@^@^@               Reserved
^@^@^@^@               Reserved
^@^@^@^@               Reserved
^@^@^@^@               Reserved
^@^@^@^@               Reserved
^@^@^@^@               Reserved
^@^@^@^@               Reserved
^M^@^@^@               String table size

^N^@^@^@resource/name^@
^F^@^@^@flags^@
^F^@^@^@image^@
^E^@^@^@size^@
^H^@^@^@storage^@
^N^@^@^@lossy_quality^@
^N^@^@^@script/script^@
 ^@^@^@textures^@
^F^@^@^@chars^@
 ^@^@^@kernings^@
^G^@^@^@height^@
^G^@^@^@ascent^@
^O^@^@^@distance_field^@

^@^@^@^@               Amount of external resources
^B^@^@^@               Amount of internal resources
\n^@^@^@local://0^@    Subresource #1 actual path
E^A^@^@^@^@^@^@        Subresource #1 64 bits offset
\n^@^@^@local://1^@    Subresource #2 actual path
\232&^B^@^@^@^@^@      Subresource #2 64 bits offset
^M^@^@^@ImageTexture^@ Subresource #1 type
^E^@^@^@               Subresource #1 properties count
^A^@^@^@               Subresource #1 property #1 name index
^C^@^@^@               Subresource #1 property #1 variant type (float)
^D^@^@^@               Subresource #1 property #1 variant value (float)
^B^@^@^@               Subresource #1 property #2 name index
^U^@^@^@               Subresource #1 property #2 variant type (image)
^B^@^@^@               Subresource #1 property #2 image encoding
\372$^B^@              Subresource #1 property #2 image size
<a lot>                Subresource #1 property #2 image data
<a lot>                Subresource #1 property #2 image padding
^C^@^@^@               Subresource #1 property #3 name index
^B^@^@^@               Subresource #1 property #3 variant type (int)
^E^@^@^@               Subresource #1 property #3 variant value (int)
^D^@^@^@               Subresource #1 property #4 name index
333?
^E^@^@^@Font^@
^F^@^@^@
^G^@^@^@
...

If you are generating stuff, I'm not sure you want to generate a .tex file manually. Why not just use a png file? Or are you doing it for 3D?

RSRC is a compressed resource, it uses a special file compression so you won't be able to simply parse it, you need to zlib-decompress it by blocks. It's not very simple..

I'm doing this for 2D. Basically, I have a PSD file - I'd like to parse it, extract each layer into various pictures, import these textures into Godot, import the needed fonts from the filesystem or an asset project, and generate a scene that uses all of this. The psd-parsing thing is already working great, as is the scene generation. The texture import is fine, but I can't specify any import options on a per-file basis, during the generation (since they're only png files). And as far as the texture import goes, I'm a bit stuck, since generating bmfont files doesn't seem practical.
At first, my idea was to create 'placeholder' files, that would contains the relative path to the source files and a boggus last-update timestamp (01/01/1970-like) so that Godot would automatically "re-import" the source files (actually importing them for the first time) - this way, I would only have to deal with metadata, and let Godot do the heavy work. However, fonts apparently don't support re-import, so once again, I'm a bit stuck :(

I wouldn't bother creating binary files.. you can use png files fine
On Mon, May 2, 2016 at 7:11 PM, Maël Nison<EMAIL_ADDRESS>wrote:

I'm doing this for 2D. Basically, I have a PSD file - I'd like to parse
it, extract each layer into various pictures, import these textures into
Godot, import the needed fonts from the filesystem or an asset project, and
generate a scene that uses all of this. The psd-parsing thing is already
working great, as is the scene generation. The texture import is fine, but
I can't specify any import options on a per-file basis, during the
generation (since they're only png files). And as far as the texture import
goes, I'm a bit stuck, since generating bmfont files doesn't seem practical.
At first, my idea was to create 'placeholder' files, that would contains
the relative path to the source files and a boggus last-update timestamp
(01/01/1970-like) so that Godot would automatically "re-import" the source
files (actually importing them for the first time) - this way, I would only
have to deal with metadata, and let Godot do the heavy work. However, fonts
apparently don't support re-import, so once again, I'm a bit stuck :(
—
You are receiving this because you commented.
Reply to this email directly or view it on GitHub
https://github.com/godotengine/godot/issues/4420#issuecomment-216380665

But how about the fonts, or what if I need to set custom export parameters on some textures? On top of that, a few of these textures should belong to the same atlas, so if I can't generate the resource files, I will have to generate image groups ... that doesn't sound very practical :(

Godot should now support dynamic fonts, so you can use these. Try save any
of those resources as tres and you should see the text format, should work
for fonts and other stuff.
On Mon, May 2, 2016 at 7:36 PM, Maël Nison<EMAIL_ADDRESS>wrote:

But how about the fonts, or what if I need to set custom export parameters
on some textures? On top of that, a few of these textures should belong to
the same atlas, so if I can't generate the resource files, I will have to
generate image groups ... that doesn't sound very practical :(
—
You are receiving this because you commented.
Reply to this email directly or view it on GitHub
https://github.com/godotengine/godot/issues/4420#issuecomment-216385603

@reduz I've finally understood how work subresources stored in tres files, and it seems to be very close to what I was looking for! However, is it possible to embed the dynamic font data inside the file? When I tried, I got the following:
[gd_scene load_steps=5 format=1]

[sub_resource type="DynamicFontData" id=3]

[sub_resource type="DynamicFont" id=2]

size = 20
font = SubResource( 3 )

As you can see, the DynamicDataFont is missing a data property (similar to what image is to ImageTexture nodes).

Actually, I've opened a new issue (#4600), and I'm gonna close this one. Thanks for your help!

@arcanis Have you any success with importing psd? Sounds like huge job. It could save a lot of time to some of use if you share your experience =)

Hey @jjay - Yes, I've successfully been able to "cast" my psd file into a standalone .tscn file ready to be used in Godot. In order to do this, I used a node.js script w/ the pegjs package to parse the existing tscn files, the psd package to extract layer infos from the psd files, and a custom built library to work with the tscn tree.
My code currently only works on my specific psd file (I hardcoded names etc), but I'd very much like to make a generic utility that could be used on any psd file. Even supporting only a subset of Photoshop's features could probably help quite a few people. I'll probably be able to work on this in the next months.


[System.Net.WebClient] does not contain a method with the name "new"

Set-ExecutionPolicy Bypass -Scope Process -Force;iex "$(([System.Net.WebClient]::new()).Download
String('http://install.expandframework.com'));Install-Xpand -Assets @('Assemblies','Nuget','VSIX','Source')  #-Version '
19.1.402.0' -SkipGac -InstallationPath 'C:\Xpand'"
An error occurred while calling the method, because [System.Net.WebClient] does not contain a method with the name "new".
Windows 7

whats your powershell version?

2.0

to be safe i guess u need to upgrade to 5

Closing issue for age. Feel free to reopen it at any time.
.Thank you for your contribution.


geolocation stop in background for huawei smartphone

Geolocation stop in background for huawei smartphone
Your Environment
for huawei smartphone  as p10 lite when the app goes into the background, after a while the operating system stops the geolocation.

Plugin version: "0.5.0-alpha.42",
Platform: Android
OS version: 8.0.0
Device manufacturer and model: p10 lite
React Native version:0.53.0
Plugin configuration options: BackgroundGeolocation.configure({
desiredAccuracy: 10,
stationaryRadius: 50,
distanceFilter: 50,
debug: false,
startOnBoot: false,
stopOnTerminate: false,
locationProvider: BackgroundGeolocation.ACTIVITY_PROVIDER,
interval: 10000,
fastestInterval: 5000,
activitiesInterval: 10000,
stopOnStillActivity: false, // test per berto
startForeground: true,
notificationIconColor: "#e33",
notificationIconLarge: "ic_launcher",
notificationIconSmall: null,
notificationTitle: "MUV",
notificationText: "Background tracking",
saveBatteryOnBackground: false,
activityType: type === "Public" ? "AutomotiveNavigation" : "Fitness"
});

is there a method to prevent the operating system kills the app in the background ?

This is a known battery optimisation 'feature' of many Android devices. Many manufacturers, including Huawei, add their own power managers and kill all background services as soon as screen is closed or app is no longer visible.
This even happens when it's a foreground service!
You have to get the user to manually whitelist the app from the settings, and example for many devices can be seen here.
There is a permission related to this on Android, 'REQUEST_IGNORE_BATTERY_OPTIMIZATIONS'. However, Google have been known to automatically ban apps that use this permission, so use it at your own risk.

Yes, this is unfortunately rising up trend.

Having same issue with background location in Huawei phones. Is there a any solution other than REQUEST_IGNORE_BATTERY_OPTIMIZATIONS?

Having same issue with background location in Huawei phones. Is there a any solution other than REQUEST_IGNORE_BATTERY_OPTIMIZATIONS?


update logging placement

Implements ideas from #287

I'm not sure if this affects anyone but if someone is using their own logging settings and configuring a handler named 'sanic' as well other custom loggers, it will be necessary to set 'propagate': False in the logging dict config after this change.


Update to about.md

Fixed link to Columbia workshop in about.md. Resolves #157

Thanks @timothyarthur !


[Switches] IE: weird switches animations

Ops, sorry. Forgot to add my browser info:

Same on Edge

same on Edge. please help to fix.

I just tested on IE 11 (win 7 and 8.1), as well as Edge 12 (win 10) -- using browserstack -- and cannot reproduce this today. So closing for now.

Thanks!


Document deprecate HOC

When attempting to tackle something like #454 it would be good to have instances of the Header component complain when they're used, advising that code should be changed to use Heading instead.
For reference, this is an example method of deprecating a component via an HOC:
https://whawker.github.io/2016/07/15/deprecating-react-components-with-higher-order-components.html
Additionally we now have some props that are deprecated, such as the old boolean width setting props for GridCol - it would be good to have a mechanism for marking props as being deprecated.
For reference, this library provides a mechanism for deprecating props, however it may not be entirely suitable for our current needs:
https://www.npmjs.com/package/react-deprecate
As per #442 this should be added to our documentation.

The deprecate HOC now provides a mechanism for marking whole components as deprecated.
At present there is no generic "deprecate a prop" mechanism - instead that is being done on an individual case-by-case basis.
What remains to be done is to document the deprecate HOC in CONTRIBUTING.md

duplicate of #442


Adding visit node methods - one is called by doxygen directive

I have added two visit node methods in translator.py and two unit tests. The code itself is not much, only testing requires a bit more.
- visit_toctree: this method is called when there are two nested toctrees and the deepest one is hidden. Other writers (html, html5, manpage) have the same definition. The example below show the structure:
# index.rst:

  .. toctee::
     subindex

# subindex.rst

  .. toctree::
    :hidden:

    page

- visit_desc_signature_line: this method is called by doxygenclass directive when you try to include C++ documentation generated by doxygen. Like:
.. doxygenclass::  ClassName
   :project: projectName
   :members:

Testing of this requires to have breathe in the extensions of the package (only for testing). I have
added it to tox.ini for py36 and py37. In any case, I would understand you prefer to keep the environment simpler. I have added it because IMO doxygen is important for many people and being able to have it in this builder can lead to having a global solution for documentation. So, having breathe for testing would make sense for me. I will try to attach a screenshot to show the result of including doxygen documentation in Confluence (from the added unit test) (not sure if this is possible)
I have created a decorators/utils in ConfluenceTestUtil to allow skip unit tests when the python or sphinx version does not satisfy the minim criteria. "skipIf" from pytest skips leads an error.
Thanks for the feedback!

Attached the result of including doxygen documentation on Confluence.
You can compare with the results shown in breathe documentation.

I like a bunch of things in this pull request -- of course the primary fixes to the extension node management and some of the new testing feature checks.
Although, I am personally not a find of the inclusion of breathe in the primary test environment. I do not mind having tests for Doxygen (due to its popularity), but the test cases verifying Doxygen output and the use of breathe should be done in an independent tox environment. I do not mind also if this environment is included in the Travis CI process, as long as its it an optional test. Support for having Doxygen content placed into documents onto Confluence pages is a nice goal to have, but not a requirement (thus should be optional).
Note that due to other issues being addressed in this extension,  the expected window for this feature is planned around end-of-year (2019; see this comment for more details. Also note that with possible changes needed for #229, there may need to be additional verification done to make sure any new storage format requirements did not break anything.

Thank you, @jdknight.
I understand the point of including breathe and Doxygen in a separate tox environment. As those changes and the changes related to Travis are configuration/management changes, I assume you prefer to do it yourself.
I am really sorry to hear about #229, I hope no new issues have raised since the last update.

Some key changes in this pull request are now being handling in #270. This is to help introduce important changes in this pull request for the upcoming stable release. Reasons why this pull request was not just merged in have been noted above in the comments.
Changes not introduced in #270 should still be considered. The use of breathe will help provide good content to improve visualization of code-related documentation. It maybe more ideal to use this in validation testing instead of unit testing (since there may be too much content for expected output verification to be useful). To be looked at again next development window.

Finally able to complete the port of the remaining features introduced in this pull request (see #478). The validation environment has been tweaked to support processing a series of Doxygen-generated documentation content using Breathe. Hopefully this can help improve autodocs-generated content over the life-cycle of this extension. Thanks again for the original pull request and the fixes/features provided.


As a user, I would like to see weather conditions that might influence (or have influenced) the road conditions.

Yr.no or Mets API. Based on lat/long when dropping pin. Add filter to view or not view weather data on the map and/or roads

https://api.met.no/weatherapi/locationforecast/1.9/documentation


Update business calendar

Coverage remained the same at 98.333% when pulling 48c6d35da34c46704ec10592d978fb4a510e5d83 on update-business-calenar into f6fb1eb0dffb2f9b3d538445a7444560b1a1d0a9 on master.


Simple report feature added; download endpoint all club-member as csv; added 100 memberReactions in seed data

What's here (& what to consider)
Gist

Preliminary implementations for report generation added, by calculating averages of emoji values in memberReactions over a given time period.

GET members' positivity in a certain club or all clubs for their all submissions for all activities.
GET activities' avg feedback positivity by all members given to them in a certain club or all clubs.

A download endpoint for all clubname,memberid pairs CSV is created.

A few views model added for endpoint's json return.

Added 100 copies of randomly generated memberReactions in seed data.

Behavior update: When posting new memberReaction the Club-member relation will get automatically added if not already. So practically there is no need to use the endpoint adding member to club.

Endpoint documentation at  HERE

Type of Change

[x] Bug fix (non-breaking change which fixes an issue)
[x] New feature (non-breaking change which adds functionality)
[x] This change requires a documentation update

Change Status

[ ] Complete, tested, ready to review, and merge
[x] Complete, but not tested (may need new tests)
[ ] Incomplete / work-in-progress, PR is for discussion or feedback
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

How has this been tested?

[x] Tested in Postman
[ ] Test suite provides the same results as prior to making changes

Checklist

[] My code follows the style guidelines of this project
[x] I have performed a self-review of my own code# What's here (& what to consider)
[x] My changes generate no new warnings
[x] New and existing unit tests pass locally with my changes
[x] There are no merge conflicts

Before merging, we should fix typos like posivity and positivty, which occur in several places.
Otherwise, these changes look good.

The typo was fixed in  This commit


Adding example of the api usage

Hey, thanks for the PR! I feel like there is a better place, than the example folder for this though. Examples should probably be more focused on showcasing interactions of commands & gamestate, i.e. 'How to start/wait for/end quests', 'How to navigate expeditions', or 'How to send regular update commands' and less on integration with other tools like a database.
If you create a new independent repo with your code, that other people can clone & run, I'd love to add a "Showcase" section to the readme, that links to yours and other projects, that use this API though. Something alone the lines of:

Description
Link

A GUI tool to quickly fetch the scrapbook
https://github.com/the-marenga/sf-scrapbook-helper

Send out discord notification about guild events via a DB
https://github.com/Sempoinus1/sf-db-notify

Automatic scrapbook fighting with steam SSO support
https://github.com/novosadkry/sfscraper-rs

Alrighty! I'm on it then. I was wondering if it's even good idea to pull whole solution as example. I will rework that.
I will try to do some simplified examples too


AI-Powered Personal Fitness Coach

Project Idea: AI-Powered Personal Fitness Coach
Description: Develop an AI-based personal fitness coach that creates personalized workout routines based on user data, including fitness goals, current activity levels, and medical history. The system should use computer vision to analyze workout posture through a webcam or mobile camera, offering real-time feedback and adjustments. Additionally, it could recommend meal plans based on nutritional goals and track user progress over time, adapting recommendations as the user progresses.
Input:
User profile data (e.g., age, weight, fitness goals)
Real-time video feed of workouts for posture analysis
Progress logs and workout history
Output:
Custom workout routines
Real-time feedback on workout form
Adapted meal and fitness plans based on progress and goals

Hi!
I want to work on this please assign it to me

@JahnaviDhanaSri go ahead!


Useful tools

AI Photo Object removal
Great for removing noise when creating image occlusion cards

Image upscaling
Sometimes I find a diagram that is nice, but the resolution is terrible. Upscaling works well.
Before:

After:

Effective learning: Twenty rules of formulating knowledge


Using blinker for better flow control

I came across a library called blinker. https://pythonhosted.org/blinker/
I think we can use this module for http flow control.

Commit 	9cc9907 close this issue


Text Input maxLength prop do not work with numbers

When <input/> has type="text", we can't type more characters than it's set in maxLength prop. However, this feature doesn't work with <input type="number"/>
video description

You can add a max attribute that will specify the highest possible number that you may insert


remote playback

[ ] Replace chromecast icon with a route icon - pops up a dialog to reroute playback
[ ] Make a framework to connect to a remote device
[ ] Control player over webserver
[ ] make file lists visible across devices - possibly make another fragment for files lists
- try to show in playlist first and see if its complicated.
[ ] and remote control for controlling player remotely via server
[ ] when playing hub creates a player session which can be broadcast

[ ] possibly create websocket to listen to queue on hub

[ ] Create player session object for clients to subscribe to - connects to #457

[ ] implement MediaSessionContract.Manager and have that create the PlayerSession

[ ] routing: have the ability to read a file from a remote computer so browse another device and have a "play on .." - pops up a list of remote screens to play on.  then send a message to play the item.
[ ] move LivePlaybackController to shared move all prefs to MultiPlatformPreferencesWrapper
[ ] wrap chromecast connection wrapper on a generic wrapper

also this error: occured in hotel where multi-ping works but i think http comms must be blocked
FATAL EXCEPTION: DefaultDispatcher-worker-9
                                                                                Process: uk.co.sentinelweb.cuer.app.debug, PID: 22262
                                                                                java.net.NoRouteToHostException: No route to host
                                                                                at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
                                                                                at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:762)
                                                                                at io.ktor.network.sockets.SocketImpl.connect$ktor_network(SocketImpl.kt:50)
                                                                                at io.ktor.network.sockets.SocketImpl$connect$1.invokeSuspend(Unknown Source:15)
                                                                                at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
                                                                                at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
                                                                                at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:115)
                                                                                at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:100)
                                                                                at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:584)
                                                                                at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:793)
                                                                                at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:697)
                                                                                at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:684)
                                                                                Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@f4d2061, Dispatchers.IO]

occurred on android trying to start server on port 80
FATAL EXCEPTION: DefaultDispatcher-worker-1
 Process: uk.co.sentinelweb.cuer.app.debug, PID: 25646
 java.net.SocketException: Permission denied
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Net.java:442)
at sun.nio.ch.Net.bind(Net.java:434)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
at io.ktor.network.sockets.ConnectUtilsJvmKt.bind(ConnectUtilsJvm.kt:35)
at io.ktor.network.sockets.TcpSocketBuilder.bind(TcpSocketBuilder.kt:45)
at io.ktor.network.sockets.TcpSocketBuilder.bind(TcpSocketBuilder.kt:29)
at io.ktor.network.sockets.TcpSocketBuilder.bind$default(TcpSocketBuilder.kt:25)
at io.ktor.server.cio.backend.HttpServerKt$httpServer$acceptJob$1.invokeSuspend(HttpServer.kt:48)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)


draw_line invisible by tilemap

i make a random tilemap，than draw line，line is down of procedure tilemap...so line can be saw...

Sorry, but without more information it's going to be hard to help you. Also, please fill in the issue template.

I'll close this for now, please update your issue once you can provide more details and fill the issue template.


Performance metric drop down not working and explanation of feature attribution is not clear

When implementing manifold module in jupyter notebook performance drop down is not working, export segmentation is not working and need a clear explanation of feature attribution usuage

I have the same issue please advise.


saiTharunDusa

The Readme file is currently lengthy and complex, making it challenging for newcomers to comprehend how to contribute effectively to the project.
To enhance accessibility and clarity, I propose relocating the Contributing section to the beginning of the Readme file and streamlining its content where feasible.
I kindly request assistance from anyone willing to dedicate time to address this issue and improve the project's accessibility for all contributors. Thank you!

I'm really excited to be a part of this project and help make it easier for everyone to get involved. My name is Sai Tharun Dusa, and I love the idea of making open-source projects more friendly and understandable for new people. The idea to move and simplify the contributing section in the Readme file is exactly what I was hoping for. I think that if we organize the information clearly, it will be much simpler for newbies to figure out how they can help with the project. I can't wait to start working on this and team up with all of you to make these changes. If anyone has any thoughts or ideas on how we can tackle this task, please share them with me.
Excited to work together!

Hi @caiton1,
I wanted to reach out to you because I really value your expertise and insights. Your contributions to the project have been amazing, and I think your perspective could really help us improve the accessibility of the project's Readme file. I was wondering if you could share your thoughts on the idea of moving and simplifying the Contributing section of the Readme file. Your guidance would be super helpful as we try to make the project more friendly for newbies.
Thank you so much for considering my request and for all the awesome work you've been doing for the project!
Best Regards,
Sai Tharun Dusa


Drag & Drop a static body

This might be a very simple thing to do but I have troubles getting around it.
How do I drag and drop a static body?
I know that the idea of static solid might be outside of the dragging concept but somehow I need this ability of positioning some statics, otherwise, with the mouse.
Thank you!

Look into the source of Matter.MouseConstraint I think you can do something similar but use Body.setPosition rather than using a constraint.

Looking in the Matter.MouseConstraint source is very helpful!
Thank you!


Try latest corefx packages

Wont work until kestrel updates its pipeline versions and corefxlabs fixes their weird 318-1 and 318-5 versions


Override domainBaseUrl per Notion recommendation

Recommended fix from Ryo (Notion on Reddit) and @wentin in the issue queue.

the corrections work for me

Closing this PR since @stephenou included it in their latest commit 🎉  https://github.com/stephenou/fruitionsite/commit/8b1f7dcf4e593348f3ba73a345f8b99b01dfc47d

I'm still experiencing this as of Oct 4, 21.
Reported my issue here: https://github.com/stephenou/fruitionsite/issues/113#issuecomment-933634168
CC: @laughnan @sweethuman


Safari Support

https://developer.apple.com/documentation/safariservices/safari_web_extensions/converting_a_web_extension_for_safari

https://developer.apple.com/documentation/safariservices/safari_web_extensions/converting_a_web_extension_for_safari

Closing this and marking it as wontfix because I personally will not fix this. @LogicalJoe seems to have had success following the instructions in the link above (in https://github.com/Legend-of-iPhoenix/cemetech-userstyle/issues/28#issuecomment-770308450)


Camel - Attributes & Operations views

They are mostly the same as what JMX plugin provides, but they are embedded in the Camel plugin. We need to find a way to reuse the parts of JMX plugin from a different plugin.
Attributes

Operations

@joshiraez I think Paul is already doing it partly for Camel plugin. This task is a bit complicated to implement, since it requires to consider to what extent they should share the impl with JMX plugin. So, it should be easier for him to complete it. @phantomjinx What do you think?

For the Camel Plugin, this is in fact complete since the Camel version of the Attributes View is the JMX version. Closing as #125 relates to only JMX plugin tree selections.


xrdp on CentOS 8 with wayland

Can xrdp run on CentOS 8 with wayland?
If not, does it even support wayland?

Not yet.


Add format as an acceptable Rails/HttpPositionalArguments keyword

This adds format as an acceptable keyword argument in the Rails/HttpPositionaArguments cop.
I believe this is desired behavior, as I have been using format: :json in many of my controller specs.

Just needs a rebase now.

Should be good to go now


Make spinners store values to SharedPreferences

Must start after #10 is solved.
Expected Behaviour
Selecting options from the dropdown should set a corresponding value to SharedPreferences.
e.g. Choosing 25 minutes from spinner should set a value 150000 (miliseconds) to SharedPreferences.
This problem hasn't been figured out end-to-end and will require some experimenting on your end - but here's a supporting SO link.
Please include Log.v( statements for easy testing purposes.
If you hit a dead-end, comment back here with the problem and we'll solve this together....
Please declare all miliseconds as a final constant.
e.g.  private final long TWENTY_FIVE_MINUTES = 150000;

Interested in taking up this issue? Leave a comment expressing you interest along with you @slack id.abnd.
Each issue expects a 24hr turnaround time by default. In case where a student doesn't come back with an update after 24 hours have elapsed, the issue is up for grabs by anyone.

I am working on this issue @numerative

Noted! 👍

There is no need to declare these duration variables as the array in spinners is always the same. So, just storing the position in shared preferences would work. @numerative


FancyZones loses zone settings when monitor changes resolution

Environment
Windows build number: Microsoft Windows [Version 10.0.19041.208]
PowerToys version: Version v0.17.0
PowerToy module for which you are reporting the bug (if applicable): FancyZones

Steps to reproduce

Set up fancyzones with 4 zones (quadrants)
Run a game or use display settings so the monitor resolution changes to a lower value (in my case from 4k down to 2k or 1920x1080)
Change the monitor resolution back to standard (in my case 4k)
Zones are gone (or maybe just changed somehow?)

Expected behavior
I would expect the zone configuration to withstand running a game, closing it, and returning to normal work.
Actual behavior
The zones either disappear, or perhaps reset to default? In any case, the zones I had configured aren't there anymore.

I just tested using 0.20 (eta tomorrow) and the zones do come back.  Betting this was the same behavior for 0.19.x

It is true, I have not noticed this issue in the latest release of 0.19.x.


fix rangeEnd usingDotNotation

I left out a usingDotNotation on calculateRangeEnd in #718. Fixed and a test added.

Great, thanks again!

@obeliskos I hate to be one of those people, but what's the release process for Loki these days? Any rough ETA on when we can expect a new version with these latest changes? Let me know if I can help with testing etc.

Hey @Moocar, I will update the changelog and request @techfort publish to npm.
I expect this will be 1.5.6 version, hopefully within the next few days.  Thanks for your patience :)
LokiJS originally targeted solstice/equinox deliveries so your nested indexed queries might be nice for a return to tradition.

Awesome. Thanks @obeliskos and @techfort !

Sorry for the delay, I notified @techfort after updating the changelog, but he has been occupied with personal issues so it seems he has not done this yet.
Hopefully he finds time to publish in the next few days, otherwise I will drop an email to remind him.


Package Validator - Valid URL fails when using HEAD request

After the introduction of defaulting to using a HEAD request (introduced in this issue) there are now cases where valid URL's are no longer validating correctly.
For example, see this package version:
https://community.chocolatey.org/packages/vscode-intellicode/1.2.13
When running through package-validator, the response status code for this URL https://marketplace.visualstudio.com/items/VisualStudioExptTeam.vscodeintellicode/license, when using a HEAD request is NotFound, however, when using a GET request, it responds with Ok.
We will need to introduce additional handling to cater for this edge case, and to re-run URL validation with a GET request.
┆Issue is synchronized with this GitLab issue by Unito

This is a follow up issue that was created after conversation in Gitter:
https://gitter.im/chocolatey/chocolatey.org?at=6094efae963923553aeb2c50
@dgalbraith for visibility