Wrapper: create_directory()

Change the function text and documentation.
The new text should be:
This function is used to create a directory at the specified path.
If create_subdirs is True, the function creates all intermediate-level directories needed to contain the leaf directory.
Default is True.
If the directories already exist, it does nothing.
If create_subdirs is False, the function will raise an error if the directory already exists or if any intermediate-level directories in the path do not exist.

Already solved


DOCS-#4296: Fix docs warnings

What do these changes do?
This PR fixes warnings/errors which occurs during docs building.

[x] commit message follows format outlined here
[x] passes flake8 modin/ asv_bench/benchmarks scripts/doc_checker.py
[x] passes black --check modin/ asv_bench/benchmarks scripts/doc_checker.py
[x] signed commit with git commit -s
[x] Resolves #4296 #3099
[x] tests passing
[x] module layout described at docs/development/architecture.rst is up-to-date
[x] added (Issue Number: PR title (PR Number)) and github username to release notes for next major release

docs build: https://modin--4297.org.readthedocs.build/en/4297/

Hi @modin-project/modin-core , this PR is ready for review.

@YarShev @dchigarev PR is ready for review.

Hi @YarShev ! Your comments were addressed, please take a look!

@alexander3774, please resolve conflicts.

@alexander3774, please resolve conflicts.

@YarShev conflict was resolved.


Update relay connection documentation

Description

Fixed example graphql query
Replaced map() with list comprehension
Added ID field to User class
Removed usage of attribute for field ID
Added method to User class

Types of Changes

[ ] Core
[ ] Bugfix
[ ] New feature
[ ] Enhancement/optimization
[x] Documentation

Issues Fixed or Closed by This PR

Related with issue #2553

Checklist

[x] My code follows the code style of this project.
[x] My change requires a change to the documentation.
[x] I have updated the documentation accordingly.
[x] I have read the CONTRIBUTING document.
[ ] I have added tests to cover my changes.
[x] I have tested the changes and verified that they work and don't break anything (as well as I can manage).

@patrick91 - updated also the documentation for the Relay since it contained more of them same errors. :)


Question about IS and FID score reported.

Hi.
Thank you for your wondrous works, GANs with DiffAugment!
I wonder the evaluation details of your work: dataloader, IS, and FID values on imagenet 128 resolution experiments.
In the BigGAN paper and authors' PyTorch implementation, the authors wrote that cropping along with long edge and resizing images are used (plz refer to 453-476 lines of https://github.com/ajbrock/BigGAN-PyTorch/blob/master/utils.py).
Also, for evaluation:

they use 1,281,167  training images to calculate moments: mu, and covariance, for calculating FID.
they split 50,000 generated images into ten folds (each fold has 5,000 samples), and each fold is used to calculate IS.

However, your implementation of BigGAN on Imagenet:

use imagenet validation images (total 50,000) to calculate the moments for calculating FID (CRGAN, ICRGAN does).
use 50,000 generated images to calculate IS without splitting into 10 folds.
As can see at "data-efficient-gans/DiffAugment-biggan-imagenet/compare_gan/datasets.py" 476-491 lines, your implementation for pre-processing seems to use bounding box information (tf.image.sample_distorted_bounding_box).

Since all values reported in your paper are calculated from your implementation, this is not a problem.
But, I just wonder about the details of your evaluation.
Thank you:)
Sincerely,
MInguk Kang

BigGAN-PyTorch is the unofficial implementation of BigGAN, and they have claimed that their FID calculation is not official. We believe that our FID calculation matches the most widely accepted version (the same as compare_gan), where the validation images are used and are only center cropped. The "distorted" version is only used for training.

Thank you!
Your answer has really help me a lot.
In your paper, I think the comparison with other papers is fair.
I just want to summarize the evaluation protocol of recently published papers.
I would like to ask you a question that identifies the training and evaluation protocol used in your work.
[Training]
Use the "distorted" cropping method out of [distorted, random, middle, zoomed]  for the training dataset.
[Evaluation]
Use the center crop method for the validation (50K) dataset.
[FID]
Use 50k generated samples and 50K valuation images from the ILSVRC2012 dataset.
[IS]
Use 50K generated images that are contained in the single fold.
Is it correct that you learned and evaluated with the details above?
Thank you!
Sincerely,
Minguk Kang

Looks correct except that the "zoomed" cropping method is used for training in our configurations.


refactor: clean-up svu

Depends on #53

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

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

Totals

Change from base Build<PHONE_NUMBER>:
0.0%

Covered Lines:
13

Relevant Lines:
160

💛  - Coveralls


Cannot create new project

I cannot create a new project in Ghidra. Here's the error that comes up:

Here's path to environment variable:

What directory are you trying to create the new project in?

What directory are you trying to create the new project in?

I tried  creating a new directory (folder) "test" on my desktop which came up with the original error shown above . I then tried using the Ghidra directory and still had the same error. I tried installing Java in the Ghidra directory also which did not work. I'm puzzled. I'm assuming it has something to do with the Java install.

Hmmm. I assume you can create directories at these locations outside of Ghidra?

Yes. No problems

I managed to narrow down the problem. The error only occurs when I try to create a project on the Desktop or any directory located on the Desktop. I checked the permissions for the Desktop and all privileges are allowed. Hmmm...still investigating. But at least now I can create a project under my User Profile.

I just tried Ghidra 10.4 with JDK 21 and had no issues creating a new project on a Windows 10 or 11 desktop.  I am going to close this issue assuming something is weird about your environment, but if you come across more info that points to a problem with Ghidra, please feel free to reopen.


Update actionlint to 1.6.13

Overview
Update to v1.6.13
Details
Hi @sosukesuzuki ! Thank you for the great library.
I want to update actionlint version because I want to use secrets: inherit in reusable workflow supported in v.1.6.13.

@sosukesuzuki
Hi, I appreciate this useful library.
Do you have a plan to merge this PR or update to latest actionlint? It contains many updates for recent GitHub Actions' features.

Hi @sosukesuzuki ! Thank you for the great library.
Do you have a plan to merge this PR or update to latest actionlint? It contains many updates for recent GitHub Actions' features.


[forwardport] Add eks-operator 1.0.1000

Original PR:
https://github.com/rancher/system-charts/pull/493

@thedadams  I am confused about the version.
In dev-v2.6, we already have 1.0.100 and 1.1.100, and now you are adding 1.0.1000?

@jiaqiluo Yes, that's correct. Version 1.1.100 will be removed soon. I am adding version 1.0.1000 to dev-v2.5, so it needs to be here as well.

Think we decided not to do this anymore, depending on what Ricky finds out


Report test report

Populate test results in actions summaries and MRs. This has the added benefit of validating the JUnit XML output.

Coverage remained the same at 99.64% when pulling cdb2d548afec9e4be89b1b79d588a30a75bcc984 on thetic:junit into 2342647c93f6f5e0b30ca21001449dcb55a0c276 on cpputest:master.

Oh, howcome ?

I can't get this to work:
https://github.com/EnricoMi/publish-unit-test-result-action#support-fork-repositories-and-dependabot-branches


setting owner and group to non-root makes golang::packages fail

golang::packages tries to cache the package in the chef client cache directory, which is only writable by root:
      Recipe: golang::packages
         * golang_package[github.com/etsy/hound/cmds/...] action install
           * bash[Installing package github.com/etsy/hound/cmds/...] action run

             ================================================================================
             Error executing action `run` on resource 'bash[Installing package github.com/etsy/hound/cmds/...]'
             ================================================================================

             Mixlib::ShellOut::ShellCommandFailed
             ------------------------------------
             Expected process to exit with [0], but received '141'
             ---- Begin output of "bash"  "/tmp/chef-script20160620-579-420w5l" ----
             STDOUT:
             STDERR: /tmp/chef-script20160620-579-420w5l: line 1: /tmp/kitchen/cache/github.com-etsy-hound-cmds-...: Permission denied
             ---- End output of "bash"  "/tmp/chef-script20160620-579-420w5l" ----
             Ran "bash"  "/tmp/chef-script20160620-579-420w5l" returned 141

             Cookbook Trace:
             ---------------
             /tmp/kitchen/cache/cookbooks/golang/providers/package.rb:14:in `block in class_from_file'

             Resource Declaration:
             ---------------------
             # In /tmp/kitchen/cache/cookbooks/golang/providers/package.rb

        5:   bash "Installing package #{new_resource.name}" do
        6:     code "#{node['go']['install_dir']}/go/bin/go get -v #{new_resource.name} 2> >(grep -v '(download)$' > #{tmp_file_path})"
....

The cache file needs to be created with the correct ownership.

the fix was merged 4 years ago


Updated the glog library version from 0.3.4 to 0.3.5

While the original reason for this change was because of an issue #20780, with further investigation I concluded that the issue is till present for this combo of versions:
glog - 0.3.5
google-cast-sdk - 4.3.1
Downgrading google-cast-sdk to 4.3.0 fixed the build issue.
Release Notes:
Updated glog version from 0.3.4 to 0.3.5 for iOS
[IOS] [ENHANCEMENT] [GLOG]

Warnings

:warning:

:clipboard: Test Plan - This PR appears to be missing a Test Plan.

:warning:

:clipboard: Release Notes - This PR may have incorrectly formatted Release Notes.

  Generated by :no_entry_sign: dangerJS

Singed the CLA

@dulmandakh Done.


RGBD stream stopping after 1hour with increasing ram requirement

System Configuration
Please complete Your Configuration detail below. Refer to the BKC at Configuration.

Version
Your Configuration

Operating System
ubuntu 14.04

Kernel
4.4.0-66-generic

ROS
Indigo

ROS RealSense
1.8.0

librealsense
1.12.1

Camera Type-Firmware
SR300 <IP_ADDRESS>

Expected Behavior
The depth stream from topic /camera/depth_registered/points is obtained at all times.
Actual Behavior
The ram requirements of the process keeps increasing until it reaches to 95% of the total ram which in my case is 32GB. After eating up the ram the sensor stops publishing the topic.
I have seen following messages after the node is shutdown

rs_wait_for_frames
[camera/camera_nodelet_manager-1] process has died [pid 10166, exit code -9, cmd /opt/ros/indigo/lib/nodelet/nodelet manager __name:=camera_nodelet_manager
Without any message
I could receive more 100k frames in rviz before the node crashes.
I can't understand why the requirement of memory keeps increasing as the nodes don't store anything while processing input data.
Kindly let me know what could be a way to run the sensor for longer durations.

Steps to Reproduce
roslaunch realsense_camera sr300_nodelet_rgbd.launch
Thank you
Arpit

Related to intel-ros/realsense/issues/243

Hello @arpit15,
Do you still need help with this issue?
Regards,
Jesus G.
Intel Customer Support

@jlgarcia75 I was facing the same problem a month ago. I have not being using the sensor due to mis-alignment issues in depth and rgb images. However there are no updates in librealsense, should I hope any different results?

Hello @arpit15,
The misalignment issues can be due to a miscalibrated camera which is unfortunate in an SR300 because it cannot be calibrated in the field.
Have you tried to reproduce with the latest version of RealSense ROS and Librealsense?
This is the ROS repository that we support: https://github.com/intel-ros/realsense/releases
This is TAG 2.0.1 of the repository, so it is the latest release.
The Release Notes of this release states that it supports librealsense 2.8.1.
Regards,
Jesus G.
Intel Customer Support

@jlgarcia75 I have not tried with TAG 2.0.1. I will be able to check the issue in the next week and post the results.

Hello @arpit15,
Do you still need help with this issue.
Regards,
Jesus
Intel Customer Support


Bug in LS/RS slider when pins are defined as -1 during compile

There is currently a bug where if the LS / RS slider is defined as -1 in the config file the unit will default to LS.
Stick selection is not persistent though reset so it will always go back to LS even if placed in a different mode via the online config.
There are two ways that I believe we can address this:
1 - Make DPad mode the default, not LS
2 - Force defining of a pin for each the LS / RS slider pins
Additionally, Ferals old documentation talks about a shortcut for selecting the functions via start + select + left for LS, right for RS and up for DPad, I would like to explore having this added as there is no way to do this currently while in game.

Pins for LS and RS were set to unsigned 8-bit, which cause the comparisons to fail. Added cast on the conversions, will note for future issues.

Fixed in 0.5.1 release.


Add undefined as return value in docs where applicable

This adds undefined as a possible return value in the docs for functions
that might return undefined. Examples has also been added showing how
the functions might return undefined.
This was previously done for find and findLast but the docs were not
consistent.

I like it except that I would capitalize Undefined to match things like String, Bool, and Int.

@CrossEye Would you write it Null as well? To me that looks very strange, they are after all primitives are they not? This is what the documentation for find looks like today, undefined lower case. I prefer that. http://ramdajs.com/0.14/docs/#find

Yes, I would write Null.  These are not primitives here but types.  I would like to follow the Haskell conventions that single lower-case letters represent specific arbitrary, but fixed-for-this-signature, types, and all other names use UpperCamelCase.
I haven't done it, but I am planning on making a new pass through the signatures based on what we've learned about them since the original pass.

idk, Undefined and Null feel a little weird. But I don't have real strong fellings either way

Regardless of first letter case, are there any functions missing after this?

Almost certainly.   I'll try to take a look when I'm in front of a computer.   The first one that comes to mind is reduce.

i took a pass thru the docs and didn't see any that have undefined as part of their contract (as opposed to pathological casses like reduce -> undefined)

Cool.  Haven't had any time.  But should we document the -- pathological, really? -- edge cases, too?

@CrossEye IMO no.
Reduce returns the same type that the accumulator function returns. If that is undefined, reduce will return undefined. And as I see it, that is already specified in the type signature.

I agree with @CrossEye on the capitalization. The Undefined type has a single value. This hints at the existence of the Undefined constructor:
> Object.prototype.toString.call(undefined)
'[object Undefined]'

I don't like to distinguish between null and undefined, however, so I would prefer to use ?. For example:
head :: [a] -> a?

i'm pretty sure we don't have any functions that return null by contract, so we can punt on that.

I don't like to distinguish between null and undefined, however, so I would prefer to use ?. For example:
head :: [a] -> a?

Actually, I like that a lot.  I really don't like the | in our fairly-strongly typed signatures; it feels squishy.  The ? annotates it more as an exception case.

My point is that if a function may return null/undefined, callers should use == null rather than === null or === undefined. I don't believe in differentiating JavaScript's two nil values. This is just one opinion, of course. :)

i prefer the bar, myself. It's more consistent with the ML/Haskell style, and more explicit -- I don't have to go look up what ? means somewhere.
On the other hand, how about grouping null and undefined under one pseudo-type Nil and have the sig be head :: [a] -> a | Nil? You would have to go lookup what Nil means, but we may have that problem anyways if @paldepind 's Key idea gets in

The two nil values may be unpopular. But it is not as if find can return either of them. If no match is found, undefined is the value that is returned.

Reduce returns the same type that the accumulator function returns. If that is undefined, reduce will return undefined. And as I see it, that is already specified in the type signature.

But it could be a case that the function is never called, too, if you start with an empty list.  If you have an undefined accumulator too, then you will have an undefined result:
var avg = function(ls) {
  var count = 0, total = 0;
  return R.reduce(function step(curr, next) {
    count++;
    total += (next || 0)
    return total / count;
  }, undefined, ls);
};

avg([8, 6, 7, 5, 3, 0, 9]); //=> 5.428571428571429
avg([]); //=> undefined

Note that the step function will only return a number, but that reduce can still return undefined.  This is the sort of place where I think there is still ambiguity.

you can do all sorts of crazy :hankey: in js to mess with type. i don't think we should strive to comprehensively cover them all in a signature. The purpose of the signature is to describe the intent, not all the crazy edge cases.

The purpose of the signature is to describe the intent, not all the crazy edge cases.

I'm with @buzzdecafe on this (for the second time today, which must be a record!).

I'm with @buzzdecafe on this (for the second time today, which must be a record!).

yeah, this could be trouble

Right, and I am somewhat mixing up the two things presented by @TheLudd today:  The signatures probably should be simple.  But functions getting wrapped in Maybes should probably include all those that could reasonably return undefined.

@CrossEye You do present a valid argument that reduce might return undefined, but I am not at all enthusiastic about wrapping it in a Maybe. That was not an idea I had...

reduce is only a partial function if it doesn't take an initial value. Since R.reduce requires an initial value, its output is defined for every input.

@TheLudd:  That's the thing.  Once you set down that road, it seems you really have to commit to it.  That's why I was reluctant to do this same thing some time back.  And now David went off and started the excellent Sanctuary to prove me wrong!  :smiling_imp:

@CrossEye But it seems like @davidchambers is right. reduce does not return undefined for an empty list. It returns the initial argument. And so I would not consider reduce to be a part of functions that need to specify that they might return undefined.
http://ramdajs.com/repl/?v=0.14.0#R.reduce(R.add%2C 0%2C [])

What's the plan? I'm fine with either head :: [a] -> a? or head :: [a] -> a | Undefined. I prefer the former.

Come up with a decision and I will change accordingly.

my vote is for head :: [a] -> a | Undefined

Works for me. Update this pull request when you have a few minutes, @TheLudd. :)

Done

:deciduous_tree:


Add acronym

For #48in24. I sourced the regexp from Bethany at http://forum.exercism.org/t/48in24-exercise-02-27-acronym/9806/12.

The CI error is for D&D Character, which initially passed the tests when #232 was opened but failed once it was merged in.

I'll rebase once #234 is merged.


0.1.0 video in ios  is jpg

the ios AssetEntity file output is jpg, should be a video file.

fix in #7


grace's article: you have to go all the way up on mobile when starting a new section :/

ugh i saw :(


Failing to scrape data from Rocky Mountain Power site

No RMP data is coming into HA. Core version 2024.2.2
I followed the instructions and things seemed to be going okay. It asked for the username and password and I left the Selenium value at the default setting. MFA is not enabled. I can log into the RMP site no problems.
The bar graph defaults to my primary account.
I looked at the HA logs and saw this.
Logger: homeassistant.components.sensor
Source: components/sensor/init.py:396
Integration: Sensor (documentation, issues)
First occurred: 5:35:08 PM (3 occurrences)
Last logged: 5:35:08 PM
<class 'custom_components.rocky_mountain_power.sensor.RockyMountainPowerSensor'> sets an invalid suggested_unit_of_measurement. Please create a bug report at https://github.com/jaredhobbs/rocky-mountain-power/issues. This warning will become an error in Home Assistant Core 2024.5

Oh, and the Selenium Grid shows nothing, no sessions.

This error originated from a custom integration.
Logger: urllib3.connectionpool
Source: custom_components/rocky_mountain_power/rocky_mountain_power.py:91
Integration: Rocky Mountain Power (documentation, issues)
First occurred: 5:32:12 PM (3 occurrences)
Last logged: 5:32:12 PM
Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f62310ec6e0>: Failed to establish a new connection: [Errno -5] Name has no usable address')': /session
Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f62310caff0>: Failed to establish a new connection: [Errno -5] Name has no usable address')': /session
Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f62310ecfe0>: Failed to establish a new connection: [Errno -5] Name has no usable address')': /session
Logger: aiohttp.server
Source: /usr/local/lib/python3.12/site-packages/aiohttp/web_protocol.py:421
First occurred: 5:32:12 PM (1 occurrences)
Last logged: 5:32:12 PM
Error handling request
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/urllib3/connection.py", line 174, in _new_conn
conn = connection.create_connection(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/urllib3/util/connection.py", line 72, in create_connection
for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/socket.py", line 963, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
socket.gaierror: [Errno -5] Name has no usable address
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/urllib3/connectionpool.py", line 715, in urlopen
httplib_response = self._make_request(
^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/urllib3/connectionpool.py", line 416, in _make_request
conn.request(method, url, **httplib_request_kw)
File "/usr/local/lib/python3.12/site-packages/urllib3/connection.py", line 244, in request
super(HTTPConnection, self).request(method, url, body=body, headers=headers)
File "/usr/local/lib/python3.12/http/client.py", line 1327, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/usr/local/lib/python3.12/http/client.py", line 1373, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/usr/local/lib/python3.12/http/client.py", line 1322, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/usr/local/lib/python3.12/http/client.py", line 1081, in _send_output
self.send(msg)
File "/usr/local/lib/python3.12/http/client.py", line 1025, in send
self.connect()
File "/usr/local/lib/python3.12/site-packages/urllib3/connection.py", line 205, in connect
conn = self._new_conn()
^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/urllib3/connection.py", line 186, in _new_conn
raise NewConnectionError(
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7f62310ecda0>: Failed to establish a new connection: [Errno -5] Name has no usable address
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/aiohttp/web_protocol.py", line 452, in _handle_request
resp = await request_handler(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/aiohttp/web_app.py", line 543, in _handle
resp = await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/aiohttp/web_middlewares.py", line 114, in impl
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/security_filter.py", line 91, in security_filter_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/forwarded.py", line 100, in forwarded_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/request_context.py", line 28, in request_context_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/ban.py", line 80, in ban_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 235, in auth_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/headers.py", line 31, in headers_middleware
response = await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/view.py", line 149, in handle
result = await handler(request, **request.match_info)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/decorators.py", line 72, in with_admin
return await func(self, request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/config/config_entries.py", line 185, in post
return await super().post(request, flow_id)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/data_validator.py", line 72, in wrapper
result = await method(view, request, data, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/data_entry_flow.py", line 110, in post
result = await self._flow_mgr.async_configure(flow_id, data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 358, in async_configure
result = await self._async_configure(flow_id, user_input)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 404, in _async_configure
result = await self._async_handle_step(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 501, in _async_handle_step
result: FlowResult = await getattr(flow, method)(user_input)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/rocky_mountain_power/config_flow.py", line 74, in async_step_user
errors = await self.hass.async_add_executor_job(_validate_login, user_input)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/concurrent/futures/thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/rocky_mountain_power/config_flow.py", line 42, in _validate_login
api.login()
File "/config/custom_components/rocky_mountain_power/rocky_mountain_power.py", line 452, in login
self.utility.login(
File "/config/custom_components/rocky_mountain_power/rocky_mountain_power.py", line 133, in login
self.init_browser()
File "/config/custom_components/rocky_mountain_power/rocky_mountain_power.py", line 91, in init_browser
self.br = webdriver.Remote(
^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/selenium/webdriver/remote/webdriver.py", line 208, in init
self.start_session(capabilities)
File "/usr/local/lib/python3.12/site-packages/selenium/webdriver/remote/webdriver.py", line 292, in start_session
response = self.execute(Command.NEW_SESSION, caps)["value"]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/selenium/webdriver/remote/webdriver.py", line 345, in execute
response = self.command_executor.execute(driver_command, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/selenium/webdriver/remote/remote_connection.py", line 300, in execute
return self._request(command_info[0], url, body=data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/selenium/webdriver/remote/remote_connection.py", line 321, in _request
response = self._conn.request(method, url, body=body, headers=headers)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/urllib3/request.py", line 81, in request
return self.request_encode_body(
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/urllib3/request.py", line 173, in request_encode_body
return self.urlopen(method, url, **extra_kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/urllib3/poolmanager.py", line 376, in urlopen
response = conn.urlopen(method, u.request_uri, **kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/urllib3/connectionpool.py", line 827, in urlopen
return self.urlopen(
^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/urllib3/connectionpool.py", line 827, in urlopen
return self.urlopen(
^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/urllib3/connectionpool.py", line 827, in urlopen
return self.urlopen(
^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/urllib3/connectionpool.py", line 799, in urlopen
retries = retries.increment(
^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/urllib3/util/retry.py", line 592, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='5f203b37-selenium-standalone-chrome', port=4444): Max retries exceeded with url: /session (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f62310ecda0>: Failed to establish a new connection: [Errno -5] Name has no usable address'))


Move from browserify to webpacker

In our team meeting on 10/13, a couple of us were complaining about the very long build times browserify takes as we're developing javascript. So we decided to look a bit at webpack.
Turns out Rails is moving toward a more modern understanding of the place of javascript on the front end. [Evidenced by a javascript folder now at the app level, not relegated to being in the app/assets]. Rails now provides the webpacker gem to facilitate webpack in rails apps. It appears that as of Rails 5.1, this is the recommended method to building and packaging javascript assets.
The dev experience includes a wrapper around webpack-dev-server that allows hot recompiling of javascript. It also includes all the goodness of webpack in terms of code splitting and dependency mapping. (I haven't tried it with the complete app but the speed looks promising.  Webpack at least shows you progress unlike browserify).
From a first look, my short term recommendation is that we create one large entry point (bundle) for all the application code. This will be the easiest migration path because of the way our javascript is currently setup.
As we migrate to React 16 and hopefully move to using import rather than window.shared, it may make sense to create an entry point for the vendor javascript that is common to most of our pages and perhaps an entry point for each page.
@alexsoble and @kevinrobinson, have you used webpacker in other projects? Any thoughts on stragegy?

Yes I use webpacker in a Rails 5.1 project! 👍

@jhilde In terms of prioritizing code-quality features, would you rank this one as more important or #1121?

Sounds good!  Here's what we learned trying to do this last time: https://github.com/studentinsights/studentinsights/pull/861#issuecomment-284084767, which might be outdated, or we might find other ways of tackling it.
It'd be awesome if this is a drop-in replacement, but my assumption is that it won't be and that iterating on the production config will require testing in the demo or staging site.  If not, then building towards JS-centric tooling that's separate from Rails seems like a better long-term path (eg create-react-app).

Note to self, search the issues. ;-)  I recalled there being some conversation but wasn't up to speed on webpack, etc.
I'm a big fan of create-react-app backed with a restish API.
So yes, if we all agree that's the future path, might be better time spent looking at that. Would be interesting to add some json endpoints to studentinsights and spin up a little create-react-app. I use create-react-app backed by AWS lambda functions for my little apps (github.com/freedomconnexion/registration-web). I've been playing around with using jwt for endpoint authentication...it's pretty straightforward in rails.

And yes @alexsoble, now that you've done some great iterating on the structure of the importers, I'd love to dive into detailed logging in import_record.
(At least I don't have to wait for browserify for the work on the importers!)

@kevinrobinson @alexsoble So should I close, modify the title, or leave open for now?

@kevinrobinson Curious to hear more of your thinking on the comparison between create-react-app and webpacker — what are the major pros of each approach in your view?
@jhilde Why don't we make the title "Replace Browserify" for now?

A couple of other things I'm wondering about:

Will we need to migrate completely from window.shared to import/export before we make this jump?
Will we need to replace main.jsx files with a single entry point and React Routing before we make this jump?
Are either of these pieces we can tackle in a separate PR to prepare for moving to create-react-app or webpacker?

Hey @alexsoble....
create-react-app uses webpacker under the covers. Migrating to create-react-app is more about separation of the front end from the back end.
My big picture thought is that we may or may not migrate at this time, but to the point @sentientmachine (I think) made last week, we should have a design doc on new components going forward. My list would include:

use the prop-types library
extend React.Component vs React.createClass
favor imports vs. window.shared when possible

And then, upgrading to React 16 when we are ready. We'll need to do this anyways eventually.
As a separate item, we could create a proof of concept with create-react-app that:

Adds token authentication to our rails app
Adds a json endpoint for a dataset (could just do a current page's serializedData for a first pass)
Creates a basic create-react-app that allows the user to authenticate, building a simple page (StudentProfile?) from data retrieved through the new json endpoint?

From there, we can decide:

Is it worth it?
How best to structure it with an eye toward as much code reuse as possible?
How we would migrate?

Does that sound reasonable?

Hey @jhilde!
Did some reviewing past branches in this direction with @kevinrobinson. One thing we came up with was a list of dependencies that we'll need to change before we can move to an option like webpacker. Here are some notes so that we can break this into incremental pieces:
Things to change before we move to webpacker

we'll need a single point of entry, we don't use modules everywhere yet
we'll need to change the JS tests and the teaspoon configuration
we'll need to look at production deploys

Things to change before we move to create-react-app in particular

json endpoints
authentication mechanism (something like jwt, like you mentioned)
migration strategy for SPA

The single point of entry/ES6 modules jumps out at me as the first thing we could tackle. This is a prerequisite to moving off browserify-rails. It's also a change that we could ship and deploy in its own PR, celebrate and have a little online party for, and then return to the big-picture goal of moving away from browserify-rails with one less obstacle in our way. I'll split it off into its own issue and tie it to this PR. This will involve changing lots of JS but with the power of our team will clear it faster than we think and it will feel great when we land!

@jhilde See #1180 as a starting point!

Closed by https://github.com/studentinsights/studentinsights/pull/1182


[plot] Add more formats to plot SaveAction

In the SaveAction:

Add save of plot as SVG, closes #503
Add save of active image with colormap applied as RGB in PNG and TIFF, closes #437

This PR also contains some refactoring:

New module: silx.gui._utils with QImage<->numpy.array
Moved colormap functions from matplotlib backend to silx.gui.Colors

One remark: When saving active image as RGB, the data array is converted to an RGB image, but neither negative image scale nor Y axis orientation is taken into account.
So the saved image can have axes flipped from what is seen is the plot (as it is already the case when saving image data to file from the plot).

Ready for review

LGTM


DAAS membership eligibility

How does DAAS determine whether someone has a "substantial relationship to Switzerland". According to "Article 11 Members & Membership Requirements" on Page 4 of the DAAS Statute 170907_DAAS Statues.docx, it appears that eligibility to gain membership of the DAAS is only otherwise available to residents of Switzerland.

This is outsourced by the DAAS to the whitelisters.


ReorderableListView throws NPE if any it's child has height > container height

There are only two items but it doesn't matter. If any item has height bigger scrollable area after reordering it throws en error:
======== Exception caught by gesture library =======================================================
The following _CastError was thrown while routing a pointer event:
Null check operator used on a null value

When the exception was thrown, this was the stack:
#0      SliverReorderableListState._itemOffsetAt (package:flutter/src/widgets/reorderable_list.dart:801:51)
#1      SliverReorderableListState._dragEnd.<anonymous closure> (package:flutter/src/widgets/reorderable_list.dart:636:32)
#2      State.setState (package:flutter/src/widgets/framework.dart:1088:30)
#3      SliverReorderableListState._dragEnd (package:flutter/src/widgets/reorderable_list.dart:624:5)
#4      _DragInfo.end (package:flutter/src/widgets/reorderable_list.dart:1150:12)
...
====================================================================================================

To reproduce it just start an example, hold on the first item and drag it down until items are switch positions.
[✓] Flutter (Channel stable, 2.2.3, on macOS 11.4 20F71 darwin-x64, locale en-GB)
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
[✓] Xcode - develop for iOS and macOS
[✓] Chrome - develop for the web
[✓] Android Studio (version 4.2)
[✓] Connected device (3 available)

• No issues found!

import 'package:flutter/material.dart';

void main() => runApp(App());

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) => MaterialApp(home: Home());
}

class Home extends StatelessWidget {
  const Home({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    final h = MediaQuery.of(context).size.height + 100;
    return Scaffold(
      appBar: AppBar(title: Text('ReorderableListView NPE')),
      body: ReorderableListView(
        onReorder: (p1, p2) {},
        children: [
          Container(
            key: Key('item 0'),
            height: 300,
            color: Colors.green,
          ),
          Container(
            key: Key('item 1'),
            height: h,
            color: Colors.red,
          ),
        ],
      ),
    );
  }
}

https://user-images.githubusercontent.com/15782257/127118098-6ba6d444-d3ba-4d05-b7bb-49f1e8b29098.mov

Verified on latest stable (2.2.3) and master (2.4.0-5.0.pre.202) and observed same exception:
Launching lib/main.dart on iPhone 12 Pro Max in debug mode...
Running pod install...
Running Xcode build...
Xcode build done.                                           42.4s
Debug service listening on ws://<IP_ADDRESS>:52523/EOe7aF4DJDc=/ws
Syncing files to device iPhone 12 Pro Max...

======== Exception caught by gesture library =======================================================
The following _CastError was thrown while routing a pointer event:
Null check operator used on a null value

When the exception was thrown, this was the stack:
#0      SliverReorderableListState._itemOffsetAt (package:flutter/src/widgets/reorderable_list.dart:801:51)
#1      SliverReorderableListState._dragEnd.<anonymous closure> (package:flutter/src/widgets/reorderable_list.dart:636:32)
#2      State.setState (package:flutter/src/widgets/framework.dart:1088:30)
#3      SliverReorderableListState._dragEnd (package:flutter/src/widgets/reorderable_list.dart:624:5)
#4      _DragInfo.end (package:flutter/src/widgets/reorderable_list.dart:1150:12)
...
====================================================================================================

The error doesn't occur in non null-safety version, ie, in sdk: ">=2.7.0 <3.0.0"

 flutter doctor -v
[✓] Flutter (Channel stable, 2.2.3, on Mac OS X 10.15.4 19E2269 darwin-x64,
    locale en-GB)
    • Flutter version 2.2.3 at /Users/dhs/documents/fluttersdk/flutter
    • Framework revision f4abaa0735 (4 days ago), 2021-07-01 12:46:11 -0700
    • Engine revision 241c87ad80
    • Dart version 2.13.4

[✓] Android toolchain - develop for Android devices (Android SDK version 30)
    • Android SDK at /Users/dhs/Library/Android/sdk
    • Platform android-30, build-tools 30.0.3
    • ANDROID_HOME = /Users/dhs/Library/Android/sdk
    • Java binary at: /Users/dhs/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/202.7486908/Android
      Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.3, Build version 12C33
    • CocoaPods version 1.10.1

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 4.1)
    • Android Studio at /Users/dhs/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/202.7486908/Android
      Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build
      1.8.0_242-release-1644-b3-6915495)

[✓] VS Code (version 1.57.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.21.0

[✓] Connected device (4 available)
    • SM G975F (mobile) • RZ8M802WY0X • android-arm64 • Android 10 (API 29)
    • iPhone 12 Pro Max (mobile) • A5473606-0213-4FD8-BA16-553433949729 • ios
      • com.apple.CoreSimulator.SimRuntime.iOS-14-3 (simulator)
    • macOS (desktop)            • macos                                •
      darwin-x64     • Mac OS X 10.15.4 19E2269 darwin-x64
    • Chrome (web)               • chrome                               •
      web-javascript • Google Chrome 91.0.4472.114

• No issues found!

CC @darrenaustin

This appears to be a problem with items getting kicked out of the cache because the big item fills the entire viewport. While I am not sure yet how to fix this in the framework, a possible workaround in the app is to set the cacheExtent on the list to be as large as the biggest item (if you know that ahead of time):
import 'package:flutter/material.dart';

void main() => runApp(App());

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) => MaterialApp(home: Home());
}

class Home extends StatelessWidget {
  const Home({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    final h = MediaQuery.of(context).size.height + 100;
    return Scaffold(
      appBar: AppBar(title: Text('ReorderableListView NPE')),
      body: ReorderableListView(
        onReorder: (p1, p2) {},
        children: [
          Container(
            key: Key('item 0'),
            height: 300,
            color: Colors.green,
          ),
          Container(
            key: Key('item 1'),
            height: h,
            color: Colors.red,
          ),
        ],
        cacheExtent: h,
      ),
    );
  }
}

Tried by giving this (don't have the height ahead of time):
cacheExtent: MediaQuery.of(context).size.height * 1.5,

Stack trace
Non-fatal Exception: io.flutter.plugins.firebase.crashlytics.FlutterError: Null check operator used on a null value. Error thrown Instance of 'Ria'.
#00 pc 0xc2f743 com.agendaboa.app (SliverReorderableListState._itemOffsetAt [reorderable_list.dart:885])
#01 pc 0xc2f593 com.agendaboa.app (SliverReorderableListState._dragEnd.<anonymous closure> [reorderable_list.dart:746])
#02 pc 0x9062af com.agendaboa.app (State.setState [framework.dart:1114])
#03 pc 0xc2f28b com.agendaboa.app (SliverReorderableListState._dragEnd [reorderable_list.dart:734])
#04 pc 0xc2f233 com.agendaboa.app (SliverReorderableListState._dragEnd [reorderable_list.dart:733])
#05 pc 0xbfd1a3 com.agendaboa.app (_DragInfo.end [reorderable_list.dart:1255])
#06 pc 0x4bdaa7 com.agendaboa.app (MultiDragPointerState._up [multidrag.dart:158])
#07 pc 0x4bd83b com.agendaboa.app (MultiDragGestureRecognizer._handleEvent [multidrag.dart:266])
#08 pc 0x4bd6b3 com.agendaboa.app (MultiDragGestureRecognizer._handleEvent [multidrag.dart:254])
#09 pc 0xce9f67 com.agendaboa.app (PointerRouter._dispatch [pointer_router.dart:98])
#10 pc 0x3c6bfb com.agendaboa.app (PointerRouter._dispatchEventToRoutes.<anonymous closure> [pointer_router.dart:143])
#11 pc 0x43e0a3 com.agendaboa.app (_LinkedHashMapMixin.forEach [compact_hash.dart:617])
#12 pc 0x3c6b73 com.agendaboa.app (PointerRouter._dispatchEventToRoutes [pointer_router.dart:141])
#13 pc 0x3c6af3 com.agendaboa.app (PointerRouter.route [pointer_router.dart:127])
#14 pc 0x504713 com.agendaboa.app (GestureBinding.handleEvent [binding.dart:460])
#15 pc 0xce9ec3 com.agendaboa.app (GestureBinding.dispatchEvent [binding.dart:440])
#16 pc 0x3c69ef com.agendaboa.app (RendererBinding.dispatchEvent [binding.dart:337])
#17 pc 0x3c694b com.agendaboa.app (GestureBinding._handlePointerEventImmediately [binding.dart:395])
#18 pc 0x3c62f3 com.agendaboa.app (GestureBinding._flushPointerEventQueue [binding.dart:357])
#19 pc 0x604583 com.agendaboa.app (GestureBinding._handlePointerDataPacket [binding.dart:295])
#20 pc 0x60448f com.agendaboa.app (GestureBinding._handlePointerDataPacket [binding.dart:290])
#21 pc 0x399e0f com.agendaboa.app (_invoke1 [hooks.dart:167])
#22 pc 0x399d57 com.agendaboa.app (PlatformDispatcher._dispatchPointerDataPacket [platform_dispatcher.dart:341])
#23 pc 0x399ce3 com.agendaboa.app (_dispatchPointerDataPacket [hooks.dart:94])

Device
Brand:motorola
Model:Moto G (5S)
Orientation: Portrait
RAM free: 546.11 MB
Disk free: 11.39 GB
Operating System
Version:Android 7.1.1
Orientation: Portrait
Rooted:No
Crash
Date:Mar 1, 2023, 6:18:01 PM
App version:3.7.3 (176)

Flutter version: 3.3.8

What is the latest status on this issue? I just received the same error message


Single subscriber processing many messages of the same type in parallel?

For the use case:

Only one single Message Type
StatelessService (or Statefull) as Subscriber
Unordered Execution allowed (it's ok using the new BrokerServiceUnordered)
Long "ReceiveMessage" execution time (> 30 sec)
parallel execution of "ReceiveMessage" at subrscriber side is allowed
Is it feasible to you to allow the Broker to push messages in parallel? What are the side effects?
(as far as I understood the Concurrent Reliable Queue allow multiple transactions in parallel)

If the above case does have a sense:
Could we consider not only the StatelessService (or Statefull) but also an Actor? (for sure the actor will re-introduce a serialization in the elaboration processing but this should be transparent to the broker, isn't it?)
In case it does not have any sense, how to treat the long-processing messages?
Maybe creating some queue at subscriber side to store the messages before starting the real execution?
Thank in advance for any suggestion!

Message delivery happens inside a transaction to ensure guaranteed at-least-once-delivery. Those transactions shouldn't take too much time, or other subscribers will be starved. Would it work if your subscribing service / actor would receive the message and enqueue it locally, and then asynchronously process their local queue?  (using code that is very similar to the broker)

This is exactly what I've implemented.
But I'm still wondering if this "subscriber queue" could or could not (should or should not) be considered as a part of the "PubSub" infrastructure (read: your PubSub Library).
I mean, in the same way (a brilliant idea) you introduced 2 flavor of brokers (standard and unordered) because there are different needs at "publishing side" we could think at my problem in the same way and provide a sort of SubscriberServiceBaseClass for any "long running" subscribers.
This will cover a real case need without asking the adopters to create it from scratch everytime.
(I didn't spend more than 1ms to think at what "SubscriberBaseClass" means, it could be an extension method over an interface? it could be a real service abstract class to inherit? a dedicated RelyBroker? something else?)

I've added a setup: https://github.com/loekd/ServiceFabric.PubSubActors/blob/master/ServiceFabric.PubSubActors/SubscriberServices/LongRunningTaskSubscriber.cs
Please have a look. It doesn't (yet) process in parallel, but it does buffer incoming messages.


EntryPointNotFoundException when trying to connect using OAuth

When trying to connect to our Dynamics 365 CRM using an OAuth connection string, I am receiving an exception stating that the "EntryPointNotFoundException: Entry point was not found". This is the same connection string used in other repositories and works, the only difference being that the working repo is a .Net Framework 4.8 repo, while mine is a .Net Core 6.0 project.
connection string values were removed for security reasons

@sesockchris
Not a lot to go on here... We actively use and deploy this on .net6 +
I, personally, have seen recompile errors if you switch from Framework to Core in the same project.  But I do not get that you're doing that.  You can usually clear those by deleting all OBJ and Bin directories.
Could you provide a bit more environmental data?  Are you running the .net6 bits on Windows / Non-Windows?

Going to close this post at this time as there is not enough info to work with,.


(CGSize)messageBubbleSizeForItemAtIndexPath:(NSIndexPath *)indexPath return a wrong size

sometimes I got a wrong CGSize for messageBubble , help~

@kirayamato1989 - are you using a custom font?

hi jessesquires!
I'm not using a custom font, only change the cell.textView.textColor .  >_<

hm... are you seeing the same results when using the english keyboard?

Yes, i got the same results when using english keyboard~~~3

I'm having similiar problems with both polish / english text. The size also changes on subsequent enters to my view controller. Meaning that one time it will be okay, the next one it won't. @jessesquires what are you testing on? I'm having this issue on both simulator and physical device (iOS 8.3, iPhone 5).

Sounds like a hashing problem. Are you returning unique values from messageHash ?

Oh, problem solved with return unique messageHash!

Thx!

next time, please read the docs first! :smile:
http://cocoadocs.org/docsets/JSQMessagesViewController/7.0.1/Protocols/JSQMessageData.html#//api/name/messageHash


fix: npm run dev

My machine crashed after I ran npm run dev 😆. Fix so that it does not run infinitely

oops


Fix some issues in French locale

Hello to the two developers who are contributing to this project.
I did a comparable project (much less advanced in functionality) on a private repository with luxon.js and .json before discovering yours halfway, I still looked at your project in order to see next to what liturgical rules I had been able to pass and that was very helpful to me (and especially the architectural design errors to avoid).
I am French, sorry for my very approximate English, I translate with google translate.
Here are some suggested fixes in French. Your translations in French are not really wrong, but not always good, or else it is not the custom (a bit like me in English, here). I am not talking about Canada, this is only about usage in France.
So :
romcal/src/locales/fr.js
"Temps de Pâques" -> "Temps Pascal"
"Saint Sacrement" -> " Le Saint Sacrement"
"Dimanche de Pâques" -> "Résurrection du Seigneur"
"Marie, Mère de Dieu" -> "Sainte Marie, Mère de Dieu"
"Dimanche des Rameaux et de la Passion" -> "Dimanche des Rameaux et de la Passion du Seigneur"
"Très Sainte Trinité" -> "Sainte Trinité"
"Premiers Saints martyrs de la Sainte Église romaine (✝ 64)" -> "Premiers martyrs de l'Église de Rome (✝ 64)"

There you go... Thanks for creating this great tool.

Thanks, @Scriptura!
Actually, there are much more issues with the French localisation, however, I don’t speak French (but I understand a bit) and currently I am busy with processing the text of the Martyrology Romanum (see #208). @emagnier (who speaks French) is busy at work / with other stuff, but he wishes to release the new dev version of romcal ASAP.
Anyway, the latest dev code is in the _F-TypeScript branch. I see you linked fr.js file, while in the dev code, we ported the code into TypeScript, therefore the new filename is fr.ts.
Just a note: I have checked most of 6our suggested corrections in Lectionnaire III (2016) and I found that they use Saint-Sacrement without the initial definite article and with a hyphen. From my point of view, in French (and in English) one might omit the initial definite article in headings/titles. We strive to localise the strings using the official publications, e.g. Roman Missal, Liturgy of the Hours, Lectionaries, Notitiæs (issued by the Holy See).

Would you like to create a PR for this? :smiley: It’d be awesome if you could offer some of your time to romcal and fix all the issues in fr.ts according to the official publications.

Thanks, @Scriptura!
Actually, there are much more issues with the French localisation, however, I don’t speak French (but I understand a bit) and currently I am busy with processing the text of the Martyrology Romanum (see #208). @emagnier (who speaks French) is busy at work / with other stuff, but he wishes to release the new dev version of romcal ASAP.
Anyway, the latest dev code is in the _F-TypeScript branch. I see you linked fr.js file, while in the dev code, we ported the code into TypeScript, therefore the new filename is fr.ts.
Just a note: I have checked most of 6our suggested corrections in Lectionnaire III (2016) and I found that they use Saint-Sacrement without the initial definite article and with a hyphen. From my point of view, in French (and in English) one might omit the initial definite article in headings/titles. We strive to localise the strings using the official publications, e.g. Roman Missal, Liturgy of the Hours, Lectionaries, Notitiæs (issued by the Holy See).

Would you like to create a PR for this? :smiley: It’d be awesome if you could offer some of your time to romcal and fix all the issues in fr.ts according to the official publications.

I went to see your .ts file and indeed you renamed the variables with underscores rather than a camel case (you also simplified the name of the variables, by removing the "saint" prefixes in particular, which I had done. also on my side with my code). But the French translations have remained the same.
For your PR proposal, I don't even know how to do a pull request (I only use github to save my code). So yes, why not, but I would have to see how it works.
In the meantime: yes, we can remove the hyphen for "Saint-Sacrement" -> "Saint Sacrement".
Cordially.
Olivier C

I went to see your .ts file and indeed you renamed the variables with underscores rather than a camel case (you also simplified the name of the variables, by removing the "saint" prefixes in particular, which I had done. also on my side with my code). But the French translations have remained the same.
For your PR proposal, I don't even know how to do a pull request (I only use github to save my code). So yes, why not, but I would have to see how it works.
In the meantime: yes, we can remove the hyphen for "Saint-Sacrement" -> "Saint Sacrement".
Cordially.
Olivier C

I went to see your .ts file and indeed you renamed the variables with underscores rather than a camel case (you also simplified the name of the variables, by removing the "saint" prefixes in particular, which I had done. also on my side with my code).

There are much more changes to the key names. The actual definition of the key name generation is defined in this comment of mine.

But the French translations have remained the same.

I’ve never said the contrary. :smiley:

In the meantime: yes, we can remove the hyphen for "Saint-Sacrement" -> "Saint Sacrement".

Well, I actually said that in the Lectionaire III (2016) they use the one with the hyphen (Saint-Sacrement). :smiley:

Otherwise: the official site for the French-speaking liturgy is the AELF (Association Episcopale Liturgique pour les pays Francophones). It has a calendar, hard-coded (sic), but you will find the names currently practiced in France.

I did not compare the celebration names between AELF.org and Lectionaire III yet, however, I think that @emagnier is better qualified to comment on this. I presume they should more or less the same. I also presume that AELF functions for French-speaking countries as ICEL (International Commission on English in the Liturgy) for English-speaking countries.

For your PR proposal, I don't even know how to do a pull request (I only use github to save my code). So yes, why not, but I would have to see how it works.

Well, in that case, you could use the GitHub web interface to make the changes, unless you know how to use Git in the command-line/terminal (actually, I create my PRs on the web, but I work from the terminal). Below I tell you how you can use the GitHub web interface. :smiley:

Fork the romcal repo (also called upstream repo).

Open romcal.
Click on the Fork button in the top right corner of the website.
You can see that the URL changes to https://github.com/Scriptura/romcal, which is your fork or downstream repo.

Create a new branch (also called a feature branch) from the _F-TypeScript branch. This new branch will be used to make your changes.

Check out the _F-TypeScript branch by clicking on master (which is the name of our main branch) located on the left side above the file list, and clicking on _F-TypeScript.
Then you can create a new branch by clicking on _F-TypeScript (located wyere master used to be, i.e. above the file list) and typing a new branch name (it can be anything / whatever you want; I prefer not to use spaces; e.g. french_l10n). Press Enter.

Edit the fr.ts file:

Open fr.ts in your web browser.
Edit the file using the pencil button on the right side just above the file contents.
Do the changes.
After editing the file, at the buttom, there are two text boxes:

first one is the short description of the changes and is required:

it should be max 80 characters long ideally;
it can be a single line only;

the second one is optional and can be used to add additional information:

it can have more lines, but note that it uses Markdown syntax and a blank line must be inserted between paragraphs.

Keep Commit directly to the <branch> branch. selected, where <branch> is your feature branch (e.g. french_l10n).
Then click on Commit changes.

Create a pull request.

On the other hand, I personally prefer creating a PR before I finish my work, because that way the potential reviewers can instruct me to make changes before it might be to late (read: harder to fix).

You can also mark a PR as WIP (work in progress).

There are many ways to create a new PR. GitHub usually notifies you that you can Compare & pull request the changes, which can be used (and I use it a lot), however the most general guide that I can write down is as follows:

Open this URL in order to compare the changes.
Click on compare across forks.
Keep the base repository to romcal/romcal.
Select _F-TypeScript branch as the base.
Select Scriptura/romcal as head repository.
Select your feature branch (e.g. french_l10n) as the compare.
Click on the Create pull request button.
If needed, modify the PR title and the description (the first message in a PR).
In order to create a non-WIP PR, simply click on Create pull request.
In order to create a WIP PR, click on arrow on the right of the Create pull request button and click on Create draft pull request.
Note that you can always toggle the WIP/draft state of a PR in the left sidebar under Reviewers by clicking on Convert to draft.

Wait for the PR review, discuss the changes and make the changes as requested / agreed upon.

I went to see your .ts file and indeed you renamed the variables with underscores rather than a camel case (you also simplified the name of the variables, by removing the "saint" prefixes in particular, which I had done. also on my side with my code).

There are much more changes to the key names. The actual definition of the key name generation is defined in this comment of mine.

But the French translations have remained the same.

I’ve never said the contrary. :smiley:

In the meantime: yes, we can remove the hyphen for "Saint-Sacrement" -> "Saint Sacrement".

Well, I actually said that in the Lectionaire III (2016) they use the one with the hyphen (Saint-Sacrement). :smiley:

Otherwise: the official site for the French-speaking liturgy is the AELF (Association Episcopale Liturgique pour les pays Francophones). It has a calendar, hard-coded (sic), but you will find the names currently practiced in France.

I did not compare the celebration names between AELF.org and Lectionaire III yet, however, I think that @emagnier is better qualified to comment on this. I presume they should more or less the same. I also presume that AELF functions for French-speaking countries as ICEL (International Commission on English in the Liturgy) for English-speaking countries.

For your PR proposal, I don't even know how to do a pull request (I only use github to save my code). So yes, why not, but I would have to see how it works.

Well, in that case, you could use the GitHub web interface to make the changes, unless you know how to use Git in the command-line/terminal (actually, I create my PRs on the web, but I work from the terminal). Below I tell you how you can use the GitHub web interface. :smiley:

Fork the romcal repo (also called upstream repo).

Open romcal.
Click on the Fork button in the top right corner of the website.
You can see that the URL changes to https://github.com/Scriptura/romcal, which is your fork or downstream repo.

Create a new branch (also called a feature branch) from the _F-TypeScript branch. This new branch will be used to make your changes.

Check out the _F-TypeScript branch by clicking on master (which is the name of our main branch) located on the left side above the file list, and clicking on _F-TypeScript.
Then you can create a new branch by clicking on _F-TypeScript (located wyere master used to be, i.e. above the file list) and typing a new branch name (it can be anything / whatever you want; I prefer not to use spaces; e.g. french_l10n). Press Enter.

Edit the fr.ts file:

Open fr.ts in your web browser.
Edit the file using the pencil button on the right side just above the file contents.
Do the changes.
After editing the file, at the buttom, there are two text boxes:

first one is the short description of the changes and is required:

it should be max 80 characters long ideally;
it can be a single line only;

the second one is optional and can be used to add additional information:

it can have more lines, but note that it uses Markdown syntax and a blank line must be inserted between paragraphs.

Keep Commit directly to the <branch> branch. selected, where <branch> is your feature branch (e.g. french_l10n).
Then click on Commit changes.

Create a pull request.

On the other hand, I personally prefer creating a PR before I finish my work, because that way the potential reviewers can instruct me to make changes before it might be to late (read: harder to fix).

You can also mark a PR as WIP (work in progress).

There are many ways to create a new PR. GitHub usually notifies you that you can Compare & pull request the changes, which can be used (and I use it a lot), however the most general guide that I can write down is as follows:

Open this URL in order to compare the changes.
Click on compare across forks.
Keep the base repository to romcal/romcal.
Select _F-TypeScript branch as the base.
Select Scriptura/romcal as head repository.
Select your feature branch (e.g. french_l10n) as the compare.
Click on the Create pull request button.
If needed, modify the PR title and the description (the first message in a PR).
In order to create a non-WIP PR, simply click on Create pull request.
In order to create a WIP PR, click on arrow on the right of the Create pull request button and click on Create draft pull request.
Note that you can always toggle the WIP/draft state of a PR in the left sidebar under Reviewers by clicking on Convert to draft.

Wait for the PR review, discuss the changes and make the changes as requested / agreed upon.

OKAY. I'll have to find the time for all of this. Thank you for the tutorial.
Otherwise, for later:
"Sainte Scolastique, Moniale, Sœur de Saint Benoît (✝ 543)" -> "Sainte Scholastique, Moniale, Sœur de Saint Benoît (✝ 543)"

OKAY. I'll have to find the time for all of this. Thank you for the tutorial.
Otherwise, for later:
"Sainte Scolastique, Moniale, Sœur de Saint Benoît (✝ 543)" -> "Sainte Scholastique, Moniale, Sœur de Saint Benoît (✝ 543)"

Bonjour Olivier, welcome to the romcal project, and thanks for your interest in this project!
Indeed, there are several things and translation to fix in French, and I still didn't find time to do it. If you are able to give a little help, it will be really very appreciated!
For the time being, and if you don't feel comfortable with git, I propose you to directly edit the French localisation here from this page: https://github.com/romcal/romcal/blob/_F-TypeScript/src/locales/fr.ts, using the web interface from GitHub (as @tukusejssirs recommended). GitHub will then assist you to open a Pull-Request.
The aelf.org website is a good source from the archbishops conference, and I'm already using their APIs for some projects, but indeed their calendar features are very limited, and the data provided by their API are not so clean & consistant (I already found some mistakes). Furthermore, all the optional memorials (mémoires facultatives) are missing.
If you can offer a bit of your time on improving the romcal translations (or if you are interested in having them for your project), I might share you privately the index table (in PDF) of the lectionaries: the official reading books used during the mass (and especially the Sanctoral, which was recently updated and published in 2016). These documents contains all the official names for memorials, feast, solemnities, and every liturgical day titles in general.
We just rewrote all the romcal codebase from JavaScript to TypeScript, and we are close to a new beta release, including a better API and additionnal useful metadata for any kind of needs (we also tried to improve the documentation, but it's still a work in progress: https://github.com/romcal/romcal/blob/_F-TypeScript/README.md). If you think something is missing that you plan or already use in your project, don't hesitate to share your ideas ;)
Thank you, and by the way, happy new year to you and @tukusejssirs!

Bonjour Olivier, welcome to the romcal project, and thanks for your interest in this project!
Indeed, there are several things and translation to fix in French, and I still didn't find time to do it. If you are able to give a little help, it will be really very appreciated!
For the time being, and if you don't feel comfortable with git, I propose you to directly edit the French localisation here from this page: https://github.com/romcal/romcal/blob/_F-TypeScript/src/locales/fr.ts, using the web interface from GitHub (as @tukusejssirs recommended). GitHub will then assist you to open a Pull-Request.
The aelf.org website is a good source from the archbishops conference, and I'm already using their APIs for some projects, but indeed their calendar features are very limited, and the data provided by their API are not so clean & consistant (I already found some mistakes). Furthermore, all the optional memorials (mémoires facultatives) are missing.
If you can offer a bit of your time on improving the romcal translations (or if you are interested in having them for your project), I might share you privately the index table (in PDF) of the lectionaries: the official reading books used during the mass (and especially the Sanctoral, which was recently updated and published in 2016). These documents contains all the official names for memorials, feast, solemnities, and every liturgical day titles in general.
We just rewrote all the romcal codebase from JavaScript to TypeScript, and we are close to a new beta release, including a better API and additionnal useful metadata for any kind of needs (we also tried to improve the documentation, but it's still a work in progress: https://github.com/romcal/romcal/blob/_F-TypeScript/README.md). If you think something is missing that you plan or already use in your project, don't hesitate to share your ideas ;)
Thank you, and by the way, happy new year to you and @tukusejssirs!

Good evening emagnier,
I'll try to take the time to see all of this in the coming days. My project is much less advanced than yours but it is still functional (one or two things are still missing), I have not (yet?) Transformed it into an npm module, I am not sure if I will ever do so (and not sure you have the skills to maintain it and everything). In my way of proceeding, I did not proceed at all like you, but the discovery of your code, along the way, was still a good basis for anticipating future developments and not too quickly "shutting down" my code (for example: avoid overwriting certain properties in the returned date object but keep them in hand as a sub-property, in case ...).
Happy New Year to you both.

Good evening emagnier,
I'll try to take the time to see all of this in the coming days. My project is much less advanced than yours but it is still functional (one or two things are still missing), I have not (yet?) Transformed it into an npm module, I am not sure if I will ever do so (and not sure you have the skills to maintain it and everything). In my way of proceeding, I did not proceed at all like you, but the discovery of your code, along the way, was still a good basis for anticipating future developments and not too quickly "shutting down" my code (for example: avoid overwriting certain properties in the returned date object but keep them in hand as a sub-property, in case ...).
Happy New Year to you both.

Here. I did a PR test as directed ... well I think so.

Here. I did a PR test as directed ... well I think so.

A big thank you!
I didn't find your PR, but I found the corrections you made. I've opened a PR for you: https://github.com/romcal/romcal/pull/257.

A big thank you!
I didn't find your PR, but I found the corrections you made. I've opened a PR for you: https://github.com/romcal/romcal/pull/257.

Also thank you for your last comment and your feedback. You are right, it's often thanks to others, and other ways of doing things, that this opens us to a better way of doing things 😄
And let me know if you are interested by the table index of the lectionary books (la table des matières de ces livres liturgique, qui contient les intitulés officiels des saints, mémoires, fêtes, etc... autant pour ton projet qu'éventuellement pour romcal).

Also thank you for your last comment and your feedback. You are right, it's often thanks to others, and other ways of doing things, that this opens us to a better way of doing things 😄
And let me know if you are interested by the table index of the lectionary books (la table des matières de ces livres liturgique, qui contient les intitulés officiels des saints, mémoires, fêtes, etc... autant pour ton projet qu'éventuellement pour romcal).

Thank you to you for making me discover new things.  Development is not my job at all, I practice it as a hobby.  Currently I am playing with Node.js, Express and PostgreSQL to code the prototype of a website.  My calendar was only an additional feature (almost a joke) which took on a bit in the end because I got caught up in the game. Indeed, I am a Catholic, and when I wanted to train with it  a luxon.js library coding a calendar seemed like a nice challenge.  There you go, by way of presentation ... if I see typos in the French translation, I will submit proposals for modifications to you by the means you indicated to me.  Best regards.

Thank you to you for making me discover new things.  Development is not my job at all, I practice it as a hobby.  Currently I am playing with Node.js, Express and PostgreSQL to code the prototype of a website.  My calendar was only an additional feature (almost a joke) which took on a bit in the end because I got caught up in the game. Indeed, I am a Catholic, and when I wanted to train with it  a luxon.js library coding a calendar seemed like a nice challenge.  There you go, by way of presentation ... if I see typos in the French translation, I will submit proposals for modifications to you by the means you indicated to me.  Best regards.

This is a todolist.
It's just for me, for later, because live versioning on Github is annoying when you're not used to it... I would update everything at once.
Can we use html in your translations? :
Saint Martin <abbr title=\"premier\">I<sup>er</sup></abbr>
// @todo:
Tout en chiffre romain (1er -> Ier, etc.)
Jean Paul II : Jean-Paul II
Calixte : Callixte

This is a todolist.
It's just for me, for later, because live versioning on Github is annoying when you're not used to it... I would update everything at once.
Can we use html in your translations? :
Saint Martin <abbr title=\"premier\">I<sup>er</sup></abbr>
// @todo:
Tout en chiffre romain (1er -> Ier, etc.)
Jean Paul II : Jean-Paul II
Calixte : Callixte

It's just for me, for later, because live versioning on Github is annoying when you're not used to it... I would update everything at once.

I agree with you. However, I don’t know if you can you Git in general. It is usually used as command-line utility, however, there are GUI front-ends too, e.g. GitHub Desktop or (which I’d prefer) Sublime Merge (but it is paid software).

Can we use html in translations? Or is it to be avoided? Case example:
Saint Martin <abbr title="premier">I<sup>er</sup></abbr>

I think that @emagnier could better answer this, however, I think that the answer should be no, no markup within localisation (at least for now), because the localised strings (e.g. those in fr.ts) are used as strings only. However, while I deal with #208, I came up with similar thoughts about different stuff. In the end, I think that the ordinal suffixes could be formatted automatically/programmically if we want to implement it. In the end, romcal is just a utility to get the data for the liturgical calendar; it should the be client application (which utilises romcal output) that should format that data.
@emagnier, what do you think?

It's just for me, for later, because live versioning on Github is annoying when you're not used to it... I would update everything at once.

I agree with you. However, I don’t know if you can you Git in general. It is usually used as command-line utility, however, there are GUI front-ends too, e.g. GitHub Desktop or (which I’d prefer) Sublime Merge (but it is paid software).

Can we use html in translations? Or is it to be avoided? Case example:
Saint Martin <abbr title="premier">I<sup>er</sup></abbr>

I think that @emagnier could better answer this, however, I think that the answer should be no, no markup within localisation (at least for now), because the localised strings (e.g. those in fr.ts) are used as strings only. However, while I deal with #208, I came up with similar thoughts about different stuff. In the end, I think that the ordinal suffixes could be formatted automatically/programmically if we want to implement it. In the end, romcal is just a utility to get the data for the liturgical calendar; it should the be client application (which utilises romcal output) that should format that data.
@emagnier, what do you think?

I agree with you. However, I don’t know if you can you Git in general. It is usually used as command-line utility, however, there are GUI front-ends too, e.g. GitHub Desktop...

This is what I usually use, but I am not at home on my personal computer. Online is convenient in these cases.

I agree with you. However, I don’t know if you can you Git in general. It is usually used as command-line utility, however, there are GUI front-ends too, e.g. GitHub Desktop...

This is what I usually use, but I am not at home on my personal computer. Online is convenient in these cases.

I presume you comment on GitHub Desktop, therefore I presume MS Windows OS (presumably Win10). I‘ve found an unofficial, WIP/dev, out of date (v2.1.0; latest version is v2.6.1), portable app GitHub Desktop, which could be used while you are away from your computer without installation. Note I have not tested it as I use Linux and prefer terminal-based/CLi programs to GUI applications. :smiley:

I presume you comment on GitHub Desktop, therefore I presume MS Windows OS (presumably Win10). I‘ve found an unofficial, WIP/dev, out of date (v2.1.0; latest version is v2.6.1), portable app GitHub Desktop, which could be used while you are away from your computer without installation. Note I have not tested it as I use Linux and prefer terminal-based/CLi programs to GUI applications. :smiley:

I'm on Ubuntu 19.04 but although I use the terminal a lot I don't use everything in CLI (dev 'is not my job, it's hard to always be on top when you're an amateur). I thought about doing it one of these days ... but it's not my priority for now.

I'm on Ubuntu 19.04 but although I use the terminal a lot I don't use everything in CLI (dev 'is not my job, it's hard to always be on top when you're an amateur). I thought about doing it one of these days ... but it's not my priority for now.

I'm on Ubuntu 19.04

Even better! (Althought Ubuntu 19.04 is EOL’ed).
Then you could look at many guides online or at our Contributor’s guide, which is a bit outdated (the branch names are not updated, but the commands are still valid).

I'm on Ubuntu 19.04

Even better! (Althought Ubuntu 19.04 is EOL’ed).
Then you could look at many guides online or at our Contributor’s guide, which is a bit outdated (the branch names are not updated, but the commands are still valid).

Is this issue needs to stay open? @Scriptura is there anything here that still requires a bit of work?

Is this issue needs to stay open? @Scriptura is there anything here that still requires a bit of work?

From my point of view, yes, there is still some work to be done. The question is when will @Scriptura find some time to work on it. :wink:

Ok, so we should list the remaining things to do. Maybe I can also help on the French contributions.

@emagnier, I have checked if the proposals/suggestions/TODO of @Scriptura (src) are still valid and created the list below of those stuff which was not yet (fully) tended. ATM I didn’t want to delve into the French l10n stuff.
That said, even you, @emagnier, once said you wanted to go through the latest edition of the French lectionary. You would definitely find some more issues if find some time to proof fr.ts that way. :wink:
Tout en chiffre romain (1er -> Ier, etc.)  // What does this mean? Is it about the superscripts?
Calixte : Callixte  // TODO: Check if this is correct
Colomban of Luxeuil ? != Colomba of Iona
Notre-Dame de Lorette (10/12) (Our Lady of Lorette) ?
Saint Thomas Beckett vs Saint Thomas Becket (deux orthographes possibles)
Notre-Dame de La Salette : Our Lady of La Salette (19/09)

Can we use html in translations? Or is it to be avoided? Case example:
Saint Martin <abbr title="premier">I<sup>er</sup></abbr>

I think that @emagnier could better answer this, however, I think that the answer should be no, no markup within localisation (at least for now), because the localised strings (e.g. those in fr.ts) are used as strings only. However, while I deal with #208, I came up with similar thoughts about different stuff. In the end, I think that the ordinal suffixes could be formatted automatically/programmically if we want to implement it. In the end, romcal is just a utility to get the data for the liturgical calendar; it should the be client application (which utilises romcal output) that should format that data.

We might also want to think about formatting the ordinal numbers (the superscripts). I don’t actually mean to output some substrings as superscripts, but we might want to come with a way to tell the client app that this substring should be formatted as superscript.

@emagnier, I have moved this from PR #350. While the following deals with the issues in French l10n string, it is related to locale config (#241) too. In the end, the following text contains some quite complex issues in French locale, potentially related to any locale.
I’d like to your thoughts on this.

Use Saints or Saint multiple times in a single key in fr.ts? (e.g. mederic_of_autun_and_droctoveus_of_autun_abbots).

[@emagnier] [Using Saint multiple times] is more common in French.

Okay, this is more of a style issue. I have no problem with using Saint (or Blessed) multiple times within a single key as long as it is done consistently.
I have some some time today to check if this is used consistently in fr.ts, only to find out that there are many issues in the 34 keys that contain Saints/Blesseds in en.ts (for more information, see this comment in #256). Therefore I decided I won’t solve this in this issue. I invite you to comment on this in that issue.
A related issue: we should add a romcal option to output (format) the celebration name either way after we split personal celebration names into separate metadata (#154). Also we should define a default style per locale. I moved this to #241.
As for the consistency, I have just listed all the keys that have Saints or Blesseds in en.ts, checked all their values in fr.ts and compared them with the celebration names used in Calendrier romain général et calendriers nationaux from Lectionnaire III (2013) you shared with me. I also modified celebration names of those celebrations that are not celebrated in French-speaking countries. I have found the following issues. I need you comfirmation and/or comment on all of them. Lectionnaire III (2013) does not use brackets around dates of death; though you agreed with me to add brackets around all dates of death, however, shouldn’t it be better to follow Lectionnaire III (2013) and remove them when they are used? Note that I added them in the following list.
If you’d like to rather move to a separate issue/PR, just tell me.

andrew_kim_tae_gon_priest_paul_chong_ha_sang_and_companions_martyrs:

[current] Saint André Kim Taegon, prêtre, et Paul Chong Ha-sang et ses compagnons, martyrs en Corée (XIXème s.);
[lectionary] S. André Kim Tae-gon, prêtre, S. Paul Chong Ha-sang, et leurs compagnons, martyrs en Corée, † 1839-1864;
[suggestion] Saint André Kim Tae-gon, prêtre, Saint Paul Chong Ha-sang, et leurs compagnons, martyrs en Corée, († 1839-1864);
questions and notes:

ses compagnons or leurs compagnons?
XIXème s. or † 1839-1864?

andrew_zorard_of_nitra_and_benedict_of_skalka_hermits:

[current] Saints André Svorad († 1009) et Benoît Stojislav († 1012), ermites;
[suggestion] Saint André Svorad († 1009) et Saint Benoît Stojislav († 1012), ermites;

basil_the_great_and_gregory_nazianzen_bishops:

[current] Saints Basile le Grand (✝ 379) et Grégoire de Naziance (✝ 390), évêques et docteurs de l’Église;
[lectionary] S. Basile le Grand, évêque de Césarée, docteur de l’Église, † 379 et S. Grégoire de Nazianze, évêque de Constantinople, docteur de l’Église, † v. 389;
[suggestion] Saint Basile le Grand, évêque de Césarée, docteur de l’Église, († 379) et Saint Grégoire de Nazianze, évêque de Constantinople, docteur de l’Église, († v. 389);
questions and notes:

it seems to me that in French, you not only use multiple canonisation levels in a celebration name, but only split common personal titles (like docteur de l’Église; moved to #241):

actually, you seem to split them only when using bishopric seat; however, why would you use docteur de l’Église twice? maybe when you split any one title, you split them all?

moreover, you seem to use places where the bishop served (e.g. évêque de Constantinople; moved to #241);
whatever style we choose, we should use it consistently;
make it possible for Bishop title to add diocese name of which a particular person was a bishop (possibly at a latter iteration);
just an OT question: does v. before 389 (year of death) mean approximately/circa?

charles_lwanga_and_companions_martyrs:

[current] Saints Charles Lwanga et ses douze compagnons, martyrs (✝ 618);
[lectionary] S. Charles Lwanga et ses compagnons, martyrs en Ouganda, † 1886;
[suggestion] Saint Charles Lwanga et ses compagnons, martyrs en Ouganda († 1886);
questions and notes:

it seems like in French, you add the place of martyrdom (moved to #241);

although in French you split common titles of multi-personal celebrations, you seem to not split them for celebrations with Companions (like here martyrs of Ouganda);

cornelius_i_pope_and_cyprian_of_carthage_bishop_martyrs:

[current] Saints martyrs Corneille, pape, et Cyprien, évêque (IIIème s.);
[lectionary] S. Corneille, pape, martyr à Civitavecchia, † 253, et S. Cyprien, évêque de Carthage et martyr, † 258;
[suggestion] Saint Corneille, pape, martyr à Civitavecchia († 253), et Saint Cyprien, évêque de Carthage et martyr († 258);

cosmas_of_cilicia_and_damian_of_cilicia_martyrs:

[current] Saints Côme et Damien, martyrs (IIIème s.);
[lectionary] S. Côme et S. Damien, martyrs, † 3<sup>e</sup> ou 4<sup>e</sup> siècle;
[suggestion] Saint Côme et Saint Damien, martyrs († 3<sup>e</sup> ou 4<sup>e</sup> siècle);
questions and notes:

martyrs title is not split for some reason; maybe you split only when at least one title needs to add additional information (like bishopric seat); if one title needs to be split, split all of them?

cyril_constantine_the_philosopher_monk_and_methodius_michael_of_thessaloniki_bishop*:

[current] Saints Cyrille, Moine, et Méthode, évêque, apôtres des Slaves au IXème siècle;
[lectionary] S. Cyrille, moine, † 869 à Rome, et son frère S. Méthode, évêque de Moravie, † 885;
[suggestion] Saint Cyrille, moine, († 869 à Rome) et son frère Saint Méthode, évêque de Moravie († 885);
questions and notes:

another addition: place of death of Saint Cyril:

why would in French be added a place of death to (let’s say) a single person, but not to others? it does not make sense from consitensy point of view;

when this celebration name is changes update all celebrations based on it;

dedication_of_the_basilicas_of_saints_peter_and_paul_apostles:

[current] Dédicace des basiliques de Saint Pierre et Saint Paul, apôtres, à Rome;
[lectionary] La dédicace des basiliques de S. Pierre et de S. Paul, apôtres (1626 et 1854);
[suggestion] ``;
questions and notes:

for dedications of churches, you add dates when the church was consecrated (moved to #241);

eugenia_of_alsace_and_attala_of_alsace_virgins:

[current] Sainte Eugénie et Sainte Attale, vierges (VIIIème s.);
[RM of Strasbourg] Sainte Eugénie et sainte Attale, vierges;
[suggestion] Sainte Eugénie et Sainte Attale, vierges (VIIIème s.);
questions and notes:

in the RM of Strasbourg, they write saint with lowercase s when it is not the first word of the celebration name; what should we use?
should we keep VIIIème s.?

joachim_and_anne_parents_of_mary:

[current] Saints Anne et Joachim, parents de la vierge Marie (Ier siècle);
[lectionary] S. Joachim et Ste Anne, parents de la Vierge Marie;
[suggestion] Saint Joachim et Sainte Anne, parents de la Vierge Marie;
questions and notes:

there is no date of death in the lectionary;
there is a typo in current value: vierge with lowercase v;

joachim_and_anne_patroness_of_the_province_of_quebec_parents_of_mary:

[current] Saints Anne, patronne de la province civile de Québec, et Joachim, parents de la vierge Marie (Ier siècle);
[lectionary] Ste Anne, patronne de la province civile de Québec, et S. Joachim, parents de la Vierge Marie;
[suggestion] Sainte Anne, patronne de la province civile de Québec, et Saint Joachim, parents de la Vierge Marie;
questions and notes:

there is no date of death in the lectionary;
there is a typo in current value: vierge with lowercase v;

john_de_brebeuf_isaac_jogues_priests_and_companions_martyrs:

[current] Saints Jean de Brébeuf, Isaac Jogues, prêtres Jésuites, et leurs compagnons, martyrs (XVIIème siècle);
[lectionary] S. Jean de Brébeuf, S. Isaac Jogues, prêtres, et leurs compagnons, jésuites, martyrs, † entre 1642 et 1649 au Canada et aux États-Unis;
[suggestion] Saint Jean de Brébeuf, Saint Isaac Jogues, prêtres, et leurs compagnons, jésuites, martyrs, († entre 1642 et 1649 au Canada et aux États-Unis);
questions and notes:

XVIIème siècle or † entre 1642 et 1649 au Canada et aux États-Unis or (as used in john_de_brebeuf_isaac_jogues_priests_and_companions_martyrs_copatrons_of_canada) † de 1642 à 1649?

whatever we choose, use one for both;

there is a comma before jésuites, however, no in john_de_brebeuf_isaac_jogues_priests_and_companions_martyrs_copatrons_of_canada;

john_de_brebeuf_isaac_jogues_priests_and_companions_martyrs_copatrons_of_canada:

[current] Saints Jean de Brébeuf, Isaac Jogues, prêtres Jésuites, et leurs compagnons, martyrs, co-patrons du Canada (XVIIème siècle);
[lectionary] S. Jean de Brébeuf, S. Isaac Jogues, prêtres, et leurs compagnons jésuites, martyrs, † de 1642 à 1649, patrons secondaires du Canada;
[suggestion] Saint Jean de Brébeuf, Saint Isaac Jogues, prêtres, et leurs compagnons jésuites, martyrs († de 1642 à 1649), patrons secondaires du Canada;
questions and notes:

XVIIème siècle or † de 1642 à 1649 or (as used in john_de_brebeuf_isaac_jogues_priests_and_companions_martyrs) † entre 1642 et 1649 au Canada et aux États-Unis?

whatever we choose, use one for both;

there is no comma before jésuites, however, there is one in john_de_brebeuf_isaac_jogues_priests_and_companions_martyrs;

john_fisher_bishop_and_thomas_more_martyrs:

[current] Saints Jean Fisher, évêque, et Thomas More, martyrs (✝ 1535);
[lectionary] S. Jean Fisher, évêque de Rochester, et S. Thomas More, chancelier d’Angleterre, martyrs à Londres, † 1535;
[suggestion] Saint Jean Fisher, évêque de Rochester, et Saint Thomas More, chancelier d’Angleterre, martyrs à Londres († 1535);
questions and notes:

add Chancellor (chancelier) title with an option (possibly at a latter iteration) to add of place of which a particular person was a chancellor;

marcellinus_of_rome_and_peter_the_exorcist_martyrs:

[current] Saints martyrs Marcellin, prêtre, et Pierre, Exorciste (✝ 304);
[lectionary] S. Marcellin et S. Pierre, martyrs, † 304 à Rome;
[suggestion] Saint Marcellin et Saint Pierre, martyrs († 304 à Rome);

martha_of_bethany_mary_of_bethany_and_lazarus_of_bethany:

[current] Saints Marthe, Marie et Lazare, disciples du Christ (Ier s.);
[lectionary] Ste Marthe, hôtesse du Seigneur;
[suggestion] Saint Marthe, Saint Marie et Saint Lazare (Ier s.);
questions and notes:

see also the inscription decree (Prot. N. 35/21);
as the lectionary was published before the decree, it does not contain Saints Mary and Lazarus;
I am not sure if disciples du Christ is actually used as title in the French;
I am not sure if Ier s. is actually used;

maternus_of_cologne_valerius_of_trier_and_eucharius_of_trier_bishops:

[current] Les premiers Apôtres de l’Église en Alsace : Saints Materne, Valère et Euchaire;
[RM of Strasbourg] Les premiers apôtres de l’Église en Alsace, saint Materne et ses compagnons;
[suggestion] Les premiers apôtres de l’Église en Alsace, saint Materne et ses compagnons;
questions and notes:

the RM of Strasbourg does not list Valère and Euchaire explicitly;

mederic_of_autun_and_droctoveus_of_autun_abbots:

[current] Saint Merry et Saint Droctovée, Abbés;
[RM of Paris] Saint Merry et S. Droctovée, abbés;
[suggestion] Saint Merry et Saint Droctovée, abbés;
questions and notes:

RM of Paris uses abbés with lowercase a;
inconsistency: RM of Paris uses first Saint in full, while the other in short;

michael_gabriel_and_raphael_archangels:

[current] Saints Michel, Gabriel and Raphaël, archanges;
[lectionary] S. Michel, S. Gabriel et S. Raphaël, archanges;
[suggestion] Saint Michel, Saint Gabriel et Saint Raphaël, archanges;

modestus_andlauer_and_andrew_bauer_martyrs:

[current] Saints Modeste Andlauer et André Bauer, martyrs (✝ 1900);
[lectionary] Saints Modeste Andlauer et André Bauer, martyrs;
[suggestion] Saints Modeste Andlauer et André Bauer, martyrs († 1900);
questions and notes:

should we keep † 1900?

nereus_of_terracina_and_achilleus_of_terracina_martyrs:

[current] Saints Nérée et Achillée, martyrs à Rome (✝ v. 304);
[lectionary] S. Nérée et S. Achille, martyrs, † 304-305 à Rome;
[suggestion] Saint Nérée et Saint Achille, martyrs († 304-305 à Rome);
questions and notes:

† v. 304 or † 304-305 à Rome?

nykyta_budka_and_vasyl_velychkovsky_bishops:

[current] Bienheureux Nicétas Budka (✝ 1949) et Vasyl Velychkowsky (✝ 1973), évêques et martyrs;
[I didn’t find a French source] n/a;
[suggestion] Bienheureux Nicétas Budka († 1949) et Bienheureux Vasyl Velychkowsky († 1973), évêques et martyrs;

perpetua_of_carthage_and_felicity_of_carthage_martyrs:

[current] Saintes Perpétue et Félicité, martyres à Carthage (✝ 203);
[lectionary] Ste Perpétue et Ste Félicité, martyres, † 203 à Carthage;
[suggestion] Sainte Perpétue et Sainte Félicité, martyres († 203 à Carthage);
questions and notes:

martyres à Carthage or martyres?

it seems like in French, you prefer adding the martyrdom place to the date of death; if there is no date of death specified, you specify it (sometimes?) with the martyr title;

† 203 or † 203 à Carthage?

philip_and_james_apostles:

[current] Saint Philippe et Saint Jacques le Mineur, apôtres;
[lectionary] S. Philippe et S. Jacques, apôtres;
[suggestion] Saint Philippe et Saint Jacques, apôtres;
questions and notes:

should we keep le Mineur?

pontian_i_pope_and_hippolytus_of_rome_priest:

[current] Saints Pontien, pape, et Hippolyte, prêtre de Rome, martyrs (✝ 235);
[lectionary] S. Pontien, pape, et S. Hippolyte, prêtre de Rome, martyrs en Sardaigne, † v. 235;
[suggestion] Saint Pontien, pape, et Saint Hippolyte, prêtre de Rome, martyrs en Sardaigne († v. 235);
questions and notes:

another inconsistency: now the date of death is specified, but the martyrdom place is specified with martyrs title;

pothinus_of_lyon_bishop_blandina_of_lyon_virgin_and_companions_martyrs:

[current] Saint Pothin, évêque, Sainte Blandine, vierge, et leurs 46 compagnons, martyrs à Lyon (✝ 177);
[lectionary] S. Pothin, évêque de Lyon, Ste Blandine, vierge, et leurs compagnons, martyrs, † 177;
[suggestion] Saint Pothin, évêque de Lyon, Sainte Blandine, vierge, et leurs compagnons, martyrs († 177);
questions and notes:

leurs 46 compagnons or leurs compagnons?
martyrs or martyrs à Lyon?

simon_and_jude_apostles:

[current] Saint Simon (le Zélote) et Saint Jude (Thaddée), apôtres;
[lectionary] S. Simon et S. Jude, apôtres;
[suggestion] Saint Simon et Saint Jude, apôtres;
questions and notes:

should we keep le Zélote and Thaddée?

timothy_of_ephesus_and_titus_of_crete_bishops:

[current] Saints Timothée et Tite, évêques, disciples et compagnons de Saint Paul (Ier s.);
[lectionary] S. Timothée et S. Tite, évêques, compagnons de S. Paul;
[suggestion] Saint Timothée et Saint Tite, évêques, compagnons de Saint Paul;
questions and notes:

disciples et compagnons de Saint Paul or compagnons de Saint Paul?
should we keep Ier s.?

Good idea to treat all of that separately.
I also agree about adding a romcal option to format the celebration name. In the meantime, let's find a consistent and a compromise path, per locale files.
And I also prefer to keep brackets around death dates.
I'll try to find time to review all the items you raised.


skan.csr: Clarify that a skeleton's distances list is initially empty

While working on a project using this library (which has been super helpful!), I noticed that the distances array for my skeleton seemed to contain very small values.  Looking at the code, it appears that distances is not initialized until the path_lengths method is called on a skeleton.  This is just a small change to indicate this fact in the docs to reduce confusion in the future.

Coverage remained the same at 99.453% when pulling ff8cff058b131d0f0781581d31abc1fd48206f5e on evan10s:master into ef6df1f0317f074f8e6fd1d506b2d80999d16718 on jni:master.

Whoa! Thanks for spotting this! Long term we probably want to fix this properly (e.g. distances could become a cached property), but this improves things for now.
Glad you're finding it useful!