Recurrence with 6 months recurs every year

Expected Behavior
I expect the recurring task to repeat every 6 months.
Current behaviour
When I create a task to repeat every 6 months and mark it as complete it reschedules the next task 12 months out.

[ ] Test recurring task 🔁 every 6 months ⏳ 2023-08-30
[x] Test recurring task 🔁 every 6 months ⏳ 2022-08-30 ✅ 2022-08-30

If I schedule a task to repeat every 180 days, it does the right thing

[ ] Test recurring task 🔁 every 180 days ⏳ 2023-02-26
[x] Test recurring task 🔁 every 180 days ⏳ 2022-08-30 ✅ 2022-08-30

Steps to reproduce
Create a recurring task to repeat every 6 months like so:

[ ] Test recurring task 🔁 every 6 months ⏳ 2023-08-30

then mark it as done
Which Operating Systems are you using?

[ ] Android
[ ] iPhone/iPad
[ ] Linux
[X] macOS
[ ] Windows

Obsidian Version
0.15.9
Tasks Plugin Version
1.12.0
Checks

[X] I have tried it with all other plugins disabled and the error still occurs

Possible solution
No response

What's going on
@BrianChapman, Thank you for the clear report.

Current behaviour
When I create a task to repeat every 6 months and mark it as complete it reschedules the next task 12 months out.

[ ]  Test recurring task 🔁 every 6 months ⏳ 2023-08-30
[x]  Test recurring task 🔁 every 6 months ⏳ 2022-08-30 ✅ 2022-08-30

The reason for this behaviour is that 6 months after 2022-08-30 is 2024-02-30 which does not exist, so the library that Tasks uses for managing dates skips forward the next increment until it finds a valid date.
There's more information about this in https://github.com/obsidian-tasks-group/obsidian-tasks/issues/614, which is an outstanding request to document these limitations.

If I schedule a task to repeat every 180 days, it does the right thing

[ ]  Test recurring task 🔁 every 180 days ⏳ 2023-02-26
[x]  Test recurring task 🔁 every 180 days ⏳ 2022-08-30 ✅ 2022-08-30

Yes, using a fixed increment such as a number of days is the only safe workaround for this.
Optional request for help
Apologies that you had to discover and write up a known limitation yourself. I'm struggling a bit with the sheer volume of stuff to do.
If you had the time and inclination, I've added a description of what would be involved in updating the docs to help others avoid this issue: https://github.com/obsidian-tasks-group/obsidian-tasks/issues/614#issuecomment-1232482650 - and a pull request would be very welcome indeed.

I removed the bug label from this, because it is the intended behaviour of the library we are using.
However, I do wonder whether there is anything that could be done in Tasks to warn users of the problem.
Things I can think of:

Detect if the new date is unexpectedly larger than the recurrence interval.
And if so, do 1 or more of:

Pop up a warning message perhaps linking to the docs and explaining that interval(s) were skipped...
Add an extra bullet point in the user's file, between the old and new tasks, with an explanation

The problem with this is that they won't see if it they are completing tasks via a Tasks query block

Ok thanks for the explanation. I guess my search terms didn't turn up the
existing bug. "every 6 months" can be interpreted different ways by
different people depending on their intentions. I will look into adding a
PR to clarify the behavior in the docs.
On Tue, Aug 30, 2022, 10:59 PM Clare Macrae @.***>
wrote:

I removed the bug label from this, because it is the intended behaviour of
the library we are using.
However, I do wonder whether there is anything that could be done in Tasks
to warn users of the problem.
Things I can think of:

Detect if the new date is unexpectedly larger than the recurrence
interval.
And if so, do 1 or more of:

Pop up a warning message perhaps linking to the docs and
explaining that interval(s) were skipped...
Add an extra bullet point in the user's file, between the old and
new tasks, with an explanation

The problem with this is that they won't see if it they are
completing tasks via a Tasks query block

—
Reply to this email directly, view it on GitHub
https://github.com/obsidian-tasks-group/obsidian-tasks/issues/1087#issuecomment-1232497378,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AACNXSMSVHUFIRPDDCY72L3V33YF3ANCNFSM6AAAAAAQA3MFIM
.
You are receiving this because you were mentioned.Message ID:
@.***>

Feedback received from Dimps#3806 on Discord:

I know it's a known bug, but it's not just a bug, this is a trust-breaker. How can I use Tasks if I must verify every completion manually? Are you for real?  How is this not first priority? I fully expect answer "this is OSS, you don't like it you don't use it, you want it fixed you fix it yourself" but I just can't believe it. A date-management plugin can't manage dates.
using latest 1.14.0 Tasks

This is a bit out-of-context, it's not that useful in here where we are clear the bug exists. It is also not cool that you are sharing my personal information such as linking my discord profile to my name and github profile.
My feedback is that

not being able to rely on my date management system is trust-breaking, and trust is the most important thing for productivity systems (according to me and David Allen too).

this bug is very severe. Mistaking a date by 6 months? No thanks!

this bug is known for half a year. And yet it's not mentioned in docs, it is so severe I'd expect it being on a front page! For example BrianChapman have encountered it. And there are many others who did too, but didn't find time to report it. And even more others who are just going to miss their planned actions never noticing the skipped months.

it is still not fixed, I've tested latest 1.14.0

Therefore I rate this bug as highest possible priority, and since proper fixes might be hard to implement, I propose some fixes that will be really easy to do, and yet Tasks users will not be screwed as much as they are:

don't let us use "every month", only let us use "every 30 days"
if next date doesn't exist, take the next day, not the next interval
if next date doesn't exist, take previous day, 31st Jan -> 28th Feb -> 28th Mar
if next date doesn't exist, convert months to x30 days
if next date doesn't exist, calculate following months durations in days, shift sum days
lookbehind info completed tasks log to find previous date state, to support 31->28->31

I could even provide some pseudocode:
$date_start = 2022-08-31
$recurrence_rule = every month
$next_due = rrule::get($date_start, $recurrence_rule) //2022-10-31
// i guess complication comes from somewhere here,
// you have absolutely no control and understanding about the $recurrence_rule,
// there's just magic happens in rrule lib, and it fails.
//
// otherwise you'd have probably fixed it much earlier

since we are not trying to really solve it (you couldn't do it in 6 months I guess it may be hard?), let's try to work around it:

$date_start = 2022-08-31
$recurrence_rule = every month
$next_due = rrule::get($date_start, $recurrence_rule) //2022-10-31

// function append_on_the_last() checks for having a "month" and not having " on ",
// if true appends " on the last" to a rule.
$recurrence_rule_hotfix = append_on_the_last($recurrence_rule) // every month on the last
$next_due_hotfix = rrule::get($date_start, $recurrence_rule_hotfix) //2022-09-30

if ($next_due > $next_due_hotfix) then $next_due = $next_due_hotfix
// aka
$next_due = min($next_due, $next_due_hotfix)

return $next_due

for "when done" cases I expect $date_start to already be set to $today, append_on_the_last() function would insert before "when done" string part of the $recurrence_rule
This would be an implementation of my third proposal, 31st Jan -> 28th Feb -> 28th Mar.
It just works. This fix would take about 30 minutes to implement fast, or maybe few hours to think through a good architecture like checking for "month" in recurrence rule before making calculations, making it beautiful etc.
This is programming. Nothing is ever hard here. Especially when we are talking about a+b=c simple math. How much you expect to be mistaken in such calculations - up to you. It's a bit fine to have a+b=c-1, it's not fine to have a+b=2c
wanna code for 4th proposed solution?

$date_start = 2022-08-31
$recurrence_rule = every month
if ($recurrence_rule contains "month" && $recurrence_rule !contains " on ") then
    $recurrence_rule = replace(/month(s)/30 days/) // find a number before "month" and multiply 30 by it
$next_due = rrule::get($date_start, $recurrence_rule) //2022-10-31

return $next_due

it's still better than missing whole extra month.
code for 1th proposed solution is especially beautiful
$recurrence_rule = every month
if ($recurrence_rule contains "month") then throw error "not supported, use 30 days instead"

it is still better than trusting the system to fulfill the date and then miss it. I can go on, you've got the point.
I hope this was useful or at least amusing.

Also found a new bug which would make my 3rd-proposal-implementation obsolete sadly.

throw this rrule away lol, it will eat us all )

@dima-stefantsov,
Thank you for the really helpful comments and ideas in that comment above.
In summary, one of your ideas paved the way to a more complex algorithm that has enabled fixing the bug for all cases, which has been implemented by @schemar and will be released soon. See PR #1197.

The problem
Yes, you hit the nail on the head with your comments in this snippet:
$next_due = rrule::get($date_start, $recurrence_rule) //2022-10-31
// i guess complication comes from somewhere here,
// you have absolutely no control and understanding about the $recurrence_rule,
// there's just magic happens in rrule lib, and it fails.
//
// otherwise you'd have probably fixed it much earlier

That was exactly the problem.

if next date doesn't exist, convert months to x30 days

Yes, all my previous ideas for fixing this had been around that kind of thing, but I was uncomfortable with them for a number of reasons, including that if it was, say, every 15 months, there would be quite a lot of drift away from the user's intention.

The fix

if next date doesn't exist, take previous day, 31st Jan -> 28th Feb -> 28th Mar

Thank you! That comment of yours was the key idea to finding a fix for the bug, which is now in progress in #1197.
This is the algorithm I came up with, some hours after reading that comment:

find an algorithm to work out if, after the incrementing, an interval had been skipped - both for months and for years.
instead of adjusting the due date in the new task, adjust the due date in the original task, moving it a day earlier and try repeating again
keep doing 2 in a loop, moving the due day earlier one day at a time, until it gives a new date in the correct month or year, that did not do any skipping.  (Most dates, it only needs 1 iteration, but from 31st of any month to 28 Feb needs several)

When I shared that with @schemar he implemented it really quickly and really well.
In particular, I hadn't figured out an even remotely clean way to do step 1, for the many possible month and year recurrences. But schemar came up with a really clean idea for that.
So, all in all, a team effort. Thank you to you and to schemar for enabling this to be fixed.

What happens next?
There are some more scenarios I need to add tests for - in particular, to ensure that it can't ever get stuck in an infinite loop, and to make sure it works with other month and day patterns than the simple ones.
On the latter, some of your comments suggested a few more test cases that I need to add. Thank you.
(I find it's common to spend a lot more time thinking about tests for a feature or fix than doing the coding/)
Then it will be ready for release, which I will of course do as soon as I can.

An update on progress on this...
On further testing, I found that the following now gets stuck on the same date and never moves forward, instead of previously skipping February:
- [ ] #task do stuff 🔁 every month on the 31st 📅 2022-01-31
- [x] #task do stuff 🔁 every month on the 31st 📅 2022-01-31 ✅ 2022-10-03
- [x] #task do stuff 🔁 every month on the 31st 📅 2022-01-31 ✅ 2022-10-03
- [x] #task do stuff 🔁 every month on the 31st 📅 2022-01-31 ✅ 2022-10-03

It is not as trivial as adding special case code for on the, in part because rrule offers multiple different ways to write that.
If you want to track progress and research on this, or have any suggestions on how to fix it, please subscribe to #1197 and add any comments there.

Release of the fix for this is unfortunately blocked until the above issue is fixed.

I just tried Apple Calendar and BusyCal on the iPhone, and they skip November when I schedule October 31st and monthly repeat. The monthly repeat in BusyCal is shown as Monthly on the 31st after I save the entry.  I found this note https://ux.stackexchange.com/questions/36889/calendar-recurrences-on-the-last-day-of-the-month about Outlook and Google from 9 years ago, noting the challenges.
A trio of thoughts:

I wonder if there is covered by a standard like iCalendar.

I generally want either the last day of the month or the last business day of the month.   I wonder if this could be added as an additional way to specify periodicity.

The fundamental challenge seems to be that the user's intention to be on the 31st is lost when moving to a non-31-day month for the following month.  (Similar problem going across February, of course.)

For anyone interested in seeing the potential final fix for this, you can see the significant additions to the documentation here:
https://github.com/obsidian-tasks-group/obsidian-tasks/pull/1197/files#diff-7180dda3f3ee0ae61f9611e70893a879113dfb5d175cc4cce691ecc3b940ced4
And you can download the Tasks-Demo vault with the fix included, and a distribution of the new build for use in your own test vault, under the Artifacts section here:
https://github.com/obsidian-tasks-group/obsidian-tasks/actions/runs/3200900723
Please record any comments in https://github.com/obsidian-tasks-group/obsidian-tasks/pull/1197

This has been significantly improved in release 1.15.1.
Note that if you say every month on the 31st, it will still skip months. Use every month on the last instead.


picard broken at run-time: Could not find the Qt platform plugin "xcb" in ""

$ picard
qt.qpa.plugin: Could not find the Qt platform plugin "xcb" in ""
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

This is Nixpkgs master @ a8d45e7fc3656895fc26ff334055a8a27327f96f. Might be an issue similar to https://github.com/NixOS/nixpkgs/issues/42893. Note, however, that picard used to work just fine only a few weeks ago (0ad1b80a3b1536c4b373dd1b5fcf42a3e41bbbd8, for example).

needs fixes in #65399

Note to fix this you'd need to use wrapQtApp manually since wrapQtAppsHook ignores non elf files.
(see latest qt docs)
And it can still have issues like inqutebrowser( #65290) because pyqt is out of date.
note the duplicate issues for qutebrowser...

Fixed in https://github.com/NixOS/nixpkgs/pull/65836

Fixed in #65836

Unfortunately, it is not. Using revision 0fd978baf77e15c4eb9ba7a54111c340b0730b8f I get:
$ nixpkgs-build -A picard
/nix/store/vkkfivbr5fwiwwzg7v4gxmbbx0cv66xy-picard-2.1.3
$ /nix/store/vkkfivbr5fwiwwzg7v4gxmbbx0cv66xy-picard-2.1.3/bin/picard
qt.qpa.plugin: Could not find the Qt platform plugin "xcb" in ""
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

zsh: abort      /nix/store/vkkfivbr5fwiwwzg7v4gxmbbx0cv66xy-picard-2.1.3/bin/picard

That's unfortunate. Wrapping is indeed still needed (https://github.com/NixOS/nixpkgs/issues/65399).


No way to use different docker-machine than "dev"

I am mac user and wanted a way to use different docker-machine than dev
or to allow more than one instances of kitematic where each is pointing to different docker-machine

Changed to be called - default.

The issue may remain. It would be nice to be able to choose name of machine used by Kitematic. Especially when having everything working on - dev - already

+1 on @sbusso 's suggestion. We are working on this; no definite timeline at this moment yet.


Setting up CVMFS on souk.ac.uk

C.f. #20. It requires additional approval from GridPP for our new VO souk.ac.uk. The original issue is named to track setting it up on North Grid.

C.f. https://github.com/simonsobs-uk/data-centre/issues/27#issuecomment-1885169988 which is a copy of a email chain conversations.
Relevant bits are

We should discuss how much space is needed also in view of moving this software to a dedicated Simon Observatory space I mentioned in another thread. GridPP gave the blessing to set it up.

Configuration is based on domain names. So, if a site is already getting gridpp.ac.uk repos correctly, nothing needs to be done.
I would need to create the new repo, a new UNIX account, and fix the configuration files at RAL. But that is my job :)


Tensor arguments error during example experiment

I am getting this error when running the example (docker) command:
bash run.sh 1 python3 src/main.py --config=qmix_smac --env-config=sc2 with env_args.map_name=2s3z
Note: I replaced $GPU with 1, as I did not know what else to put. Please correct me if this is incorrect.
The error is as follows:
[INFO 11:47:35] my_main Beginning training for 2000000 timesteps
[DEBUG 11:47:40] pymarl Stopping Heartbeat
[ERROR 11:47:40] pymarl Failed after 0:01:03!
Traceback (most recent calls WITHOUT Sacred internals):
File "/usr/lib/python3.5/contextlib.py", line 77, in exit
self.gen.throw(type, value, traceback)
File "/usr/lib/python3.5/contextlib.py", line 77, in exit
self.gen.throw(type, value, traceback)
File "src/main.py", line 71, in my_main
run(_run, _config, _log, mongo_client)
File "/pymarl/src/run.py", line 64, in run
run_sequential(args=args, logger=logger)
File "/pymarl/src/run.py", line 200, in run_sequential
episode_batch = runner.run(test_mode=False)
File "/pymarl/src/runners/parallel_runner.py", line 109, in run
test_mode=test_mode)
File "/pymarl/src/controllers/basic_controller.py", line 85, in select_actions
agent_outputs = self.forward(ep_batch, t_ep, test_mode=test_mode)
File "/pymarl/src/controllers/basic_controller.py", line 112, in forward
agent_inputs = self._build_inputs(ep_batch, t)
File "/pymarl/src/controllers/basic_controller.py", line 211, in _build_inputs
inputs["1d"] = [th.cat(inputs["1d"][:-(len_1d-1)], dim=-1)] + inputs["1d"][-(len_1d-1):]  #th.cat([x.reshape(bs*self.n_agents, -1) for x in inputs["1d"]], dim=1)
RuntimeError: There were no tensor arguments to this function (e.g., you passed an empty list of Tensors), but no fallback function is registered for schema aten::_cat.  This usually means that this function requires a non-empty list of Tensors.  Available functions are [CUDATensorId, CPUTensorId, VariableTensorId]
Any help would be hugely appreciated.

Sorry I should have said, the code I am running is a cloned version of the cs branch from pymarl-dev. I have not made any changes.
Thanks


Unable to print out Ranger21 Optimizer

Unable to print out the optimizer:
optimizer = Ranger21(model.parameters(), 1000)
print(optimizer)

    print(optimizer)
TypeError: 'str' object is not callable

I believe it is due to the @property decorator at https://github.com/kozistr/pytorch_optimizer/blob/edee3720fd7e5f396dd1ab74952762802b8f47ec/pytorch_optimizer/optimizer/ranger21.py#L132. The __str__ dunder is supposed to be a function rather than a property.

Hello, Thanks for the report!
you're right __str__ method is supposed to be a function, it's my mistake. I'll fix it right away.

now you can use v2.5.1 with the fix.
Thank you!

No problem, thanks for maintaining the optimizers.


Add support for rayon-based sorting

Adds optional rayon feature and par_* variants of sort & build methods that employ Rayon to perform sorting in parallel.
Even on an 4-core machine, this provides almost 2x improvement for large lists:
Benchmarking construct/kd_tree (f64)/4: Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to increase target time to 7.8s, enable flat sampling, or reduce sample count to 50.
construct/kd_tree (f64)/4
                        time:   [1.5249 ms 1.5296 ms 1.5350 ms]
Found 7 outliers among 100 measurements (7.00%)
  1 (1.00%) low mild
  3 (3.00%) high mild
  3 (3.00%) high severe
Benchmarking construct/kd_tree (i32)/4: Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to increase target time to 6.1s, enable flat sampling, or reduce sample count to 60.
construct/kd_tree (i32)/4
                        time:   [1.2005 ms 1.2036 ms 1.2069 ms]
Found 3 outliers among 100 measurements (3.00%)
  1 (1.00%) low mild
  1 (1.00%) high mild
  1 (1.00%) high severe
construct/kd_tree + rayon (f64)/4
                        time:   [823.38 us 829.92 us 837.19 us]
Found 5 outliers among 100 measurements (5.00%)
  4 (4.00%) high mild
  1 (1.00%) high severe
construct/kd_tree + rayon (i32)/4
                        time:   [666.80 us 673.07 us 679.72 us]
Found 8 outliers among 100 measurements (8.00%)
  3 (3.00%) high mild
  5 (5.00%) high severe

Sorry for late response. I noticed this just now.
I appreciate your pull-request. I will check it this weekend.

I will merge this when the compilation error is fixed.

Ah weird, maybe I fixed it locally but didn't push or something.


How to stop a while loop in a scheduled job

Hello,
I am using a while loop to vary the brightness of my unicorn pHat controled by a raspberry pi zero.
The job is scheduled (using the schedule module) to start at a certain time, but I don't know how to stop it. I have tried to schedule another job to off the LEDs but since schedule runs jobs in series, it never gets to the ending program.
Thanks for your help,
Charlotte

If I'm able to understand the use case correctly. Then it's pretty simple.
Since the job function that you pass through the do method is blocking. You could after few variation effects just shutdown the setup within the job function itself.
You don't need another function to trigger the stop call. Since everything is running in the main thread it will be blocked until the job function completes the run.

Thanks for your answer.
The thing is that I would like that job to run until 6am let's say.
But I don't know what kind of condition I could put in my "while" loop in the job function to make it stop at that time (is there a function to get the time from the pi? (To do for example put "while the time in before 6am, run the loop"). There must be since the schedule job is triggered by the time...

Maybe I'm not approaching the problem properly though.
I am making an alarm with light raising etc. I would like to run a program in the night for example, another one during the day and let's say blinking every hour.
I have started using schedule because it seemed the easiest but is there a way to run the blinking program while the day program is running for example? Or is there a better solution than schedule for this?
Thanks

would like to know too. say, I've a job that needs to be run every 2 seconds but only for 10 times. How should we do that?

@Chachapaslafrime  and @jasonlcy91
So, this is how I'll approach the problem. Code snippet attached below:
You need to import few dependencies to make sure this works.
import schedule
import time
import datetime

Now, you write a wrapper function to control your application logic to suit the intended behavior i.e
def __runAlways():
    current_time = datetime.date.now()
    current_hour = current_time.strftime("%H")
    if current_hour == 6 #6am
        __startVariations()
    else:
       __stopVariations()
        print("current time is: " + current_time + " alarm not ready")

The wrapper function decides when to trigger the alarm or in my case the effect variations.
The __runAlways does two simple thing. Checks the current hour; Runs if it matches certain conditions.
def __startVariations():
    # Turn the switch ON.
    # Do nothing.

__startVariations is your main application logic that involves trigger the alarm and starting the variation effect.
 schedule.every(1).minutes.do(__runAlways)

 while True:
      schedule.run_pending()
       time.sleep(1)

The idea behind this approach is that let the scheduler run always. But, only start or stop the alarm if it matches the certain conditions.
Hope this approach helps...

@Chachapaslafrime - Have you figured it out yet ? Else, let me know if you need any help.
As this is not entirely an schedule package issue and more of design/implementation one.
It seems not right to keep this issue open within this package.

I think I found a cleaner way
counter = 0
def some_job_with_condition(arg1, arg2):
    # do some work
    global counter  #  this line is necessary to modify the global variable
    counter =+ 1
    if counter == 5:
        return schedule.CancelJob  #  use this to cancel this job

#  main code
job1 = schedule.every(15).minutes.do(some_job_with_condition, arg1, arg2)  #  assign Job instance to a variable

while job1 in schedule.jobs:   #  check if job still not cancelled.
    schedule.run_pending()
    sleep(1)

If you used while True:, the program will loops infinitely. As a result if you open() a file for writing before the loop, the program will never write to the file as it will never end.

The above implementation you've suggested solves the problem that you've posted. However, few changes are suggested.

Stay with white true: as the global counter logic is error prone. Job might stay uncanceled. You code could run in infinite loop as well.

Handle all the implementation logic within your some_job_condition function and leave the rest of the work for the scheduler to handle. Far more simpler and easy to use.

Only use the every.minutes in cases were the function logic is idempotent i.e running the function twice would make no difference.


Move code to @/lib/invoice

Description
Code in components/invoice should be limited to React components. The useInvoiceable hook etc. belongs more in lib/.
Screenshots

Additional Context

Checklist

[x] Are your changes backwards compatible?

[x] Did you QA this? Could we deploy this straight to production?

[ ] For frontend changes: Tested on mobile?

I agree it seems weird they're in components, but most of the lib code is helper stuff that can run on client/server.
Shouldn't we create a hooks dir?

Mhh, I didn't see useInvoiceable as a hook but I think you're right, it's a hook that composes other hooks.
However, then it gets confusing again: Are there other hooks we would put in a hooks/ folder? Would we put the useMe hook in there? It's a hook that uses the useContext hook but imo it makes sense to keep it close to the context defined in components/me.js which provides the "context component" (= context provider).
This gets annoying to think about fast. If we can put more into a hooks/ folder than just useInvoiceable without making it more confusing, then I am fine with it.
However, thinking more about this, useToaster is similar to useMe since both provide access to a context. Additionally, I will probably refactor all or parts of this code anyway and I was planning to use context providers. I really like the Context API since it seems to capsulate stuff well which is currently the biggest problem with the zap undo + webln + invoiceable + optimistic UX mess: everything is mixed together which requires to keep a lot of things in mind at once. So I thought about using the Context API more anyway.
Therefore, afaict, this discussion hints that useInvoiceable should indeed also be used as a context (renamed as useInvoice for example) or that at least our current invoice flow should make more use of contexts. This would also make sense from a natural language view: invoices are always created with some context. The context is the thing we're paying for.
In general, I think we're not using some React features enough and/or missing out on some like useReducer. I think we're reimplementing the pattern for it in our toast code.
Maybe there is more stuff that we're currently doing that would be better solved with "advanced React features"?
Conclusion: instead of moving it out of components/, I should refactor the code so it makes sense to keep it there! lol

Mhh, I didn't see useInvoiceable as a hook but I think you're right, it's a hook that composes other hooks.
However, then it gets confusing again: Are there other hooks we would put in a hooks/ folder? Would we put the useMe hook in there? It's a hook that uses the useContext hook but imo it makes sense to keep it close to the context defined in components/me.js which provides the "context component" (= context provider).
This gets annoying to think about fast. If we can put more into a hooks/ folder than just useInvoiceable without making it more confusing, then I am fine with it.
However, thinking more about this, useToaster is similar to useMe since both provide access to a context. Additionally, I will probably refactor all or parts of this code anyway and I was planning to use context providers. I really like the Context API since it seems to capsulate stuff well which is currently the biggest problem with the zap undo + webln + invoiceable + optimistic UX mess: everything is mixed together which requires to keep a lot of things in mind at once. So I thought about using the Context API more anyway.
Therefore, afaict, this discussion hints that useInvoiceable should indeed also be used as a context (renamed as useInvoice for example) or that at least our current invoice flow should make more use of contexts. This would also make sense from a natural language view: invoices are always created with some context. The context is the thing we're paying for.
In general, I think we're not using some React features enough and/or missing out on some like useReducer. I think we're reimplementing the pattern for it in our toast code.
Maybe there is more stuff that we're currently doing that would be better solved with "advanced React features"?
Conclusion: instead of moving it out of components/, I should refactor the code so it makes sense to keep it there! lol

afaict most react projects have 3 directories (and they make sense imo):

components
hooks
providers

I can definitely see providers/ being useful for us. I am just unsure about the distinction between hooks vs providers, components. Most of the hooks we use are related to contexts or make sense to be close to components like useZap or useAct.
I'll keep your comment in mind though but will close this PR because I have better plans for this code now.


If a theme is applied, use the theme's token in the Skeleton, SkeletonText and SkeletonCircle component

Which package has an issue?
@yamada-ui/react
Package Version
1.3.0
Description
Currently, styling values in components ignore theme tokens. If a theme is applied, you should use the theme's token.
Yamada UI's style system provides fallback functions. If the value of the token in the first argument does not exist, it returns the second argument, the fallback value.
w: isFitContent ? "fit-content" : "100%",
maxW: "100%",
h: isFitContent ? "fit-content" : "fallback(4, 1rem)",
boxShadow: "none",
backgroundClip: "padding-box",
cursor: "default",
color: "transparent",
pointerEvents: "none",
userSelect: "none",
"&::before, &::after, *": {
  visibility: "hidden",
},
...styles,

className,
lineClamp = 3,
startColor,
endColor,
fadeDuration,
speed,
isLoaded,
- gap = "0.5rem",
+ gap = "fallback(2, 0.5rem)",
- textHeight = "0.5rem",
+ textHeight = "fallback(2, 0.5rem)",
children,
...rest

- ({ className, boxSize = "12", children, isFitContent, ...rest }, ref) => {
+ ({ className, boxSize = "fallback(12, 3rem)", children, isFitContent, ...rest }, ref) => {

<Skeleton
  ref={ref}
  className={cx("ui-skeleton__circle", className)}
-  rounded="9999px"
+  rounded="fallback(full, 9999px)"
  isFitContent={isFitContent}
  {...(!isFitContent ? { boxSize } : {})}
  {...rest}
>
  {validChildren}
</Skeleton>

Link to Reproduction
No response
Steps to Reproduce

Go to '...'
Click on '...'
Scroll down to '...'
See error

Browser
None
Operating System

[ ] macOS
[ ] Windows
[ ] Linux

Do you know how to fix the issue?
Yes
Are you willing to participate in fixing this issue and create a pull request with the fix?
None
Additional Information
No response

I will do it.


15768: Extend Glue Data Model to handle carrier specific plan ID

Field
Value

Redmine Ticket Number
15768

App-Dev Road Map #
n/a

Start Date
n/a

Due Date
n/a

App-Dev Priority
n/a

Development Story Points
n/a

Peer Review Story Points
n/a

Ticket Author
@TreyE

Checked out from development not from release-4.4. Closing and will open another to address the ticket


README.md correction

Please correct this in README.md:

"...to match tag colors with tag colors."

Thanks! Fixed it


use_pos_embd_xca=[True, False, False]

Hello, why only the first LGFI module uses location coding?

Hi, we found that the positional encoding did not play an important role in this task. Therefore, this setting is optional.

Hi, we found that the positional encoding did not play an important role in this task. Therefore, this setting is optional.

I am closing this issue due to no response.


Cy feature/mypart

line 69 and line 279 have items to be deleted to resolve the conflict in the index.html


Tests failing on Windows

Describe the bug
There are 20+ tests failing on Windows because of using unsupported features.

the assertion conversion is implemented in shell scripts, and the test tries to run them
many path related tests do positive and negative testing for all kinds of assertions with a kind of variation of test cases, one or two being on symbolic links each time. As the javadoc of the symbolic link creation method states, that may fail on some systems because of missing privileges. That's the case for Windows.

I have a local change that disables these test methods (for the symbolic links) or test classes (for the conversion) on Windows and with a useful message. Would that be a reasonable fix as PR? The much harder alternative would be to recognize the IOException for the missing privileges in the tests, to verify their message and that it's Windows. I'm not a fan of such tests (and the message is localized for me, so not sure whether that even works).

Hi @Bananeweizen, we have windows builds as part of our CI and it works ok AFAIK.
I had a look at assertj-core/src/test/java/org/assertj/core/internal/paths/Paths_assertEndsWith_Test.java resutls and they pass:
2023-09-16T08:15:24.2101295Z [INFO] Running Paths assertEndsWith
2023-09-16T08:15:24.2246093Z [INFO] Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.029 s -- in Paths assertEndsWith

So maybe it's something that is dependent on your machine (admin rights or something alike) ?

But that would mean that you are probably running your CI tests in a non standard way, with admin rights or special settings for the virtual machine. Contributors with a normal setup (and not running as administrative user all the time locally) should see the same issue as me.

The files we manipulate should all be under a temporary directory created by JUnit, which in turn delegates to Files::createTempDirectory.
Are you sure you don't have any restrictions with your TMP folder?

But that would mean that you are probably running your CI tests in a non standard way, with admin rights or special settings for the virtual machine.

We just use the GitHub-hosted Windows runners, without any special settings.

Contributors with a normal setup (and not running as administrative user all the time locally) should see the same issue as me.

I should be able to get a similar setup. I'll have a look at it.


GitHub Publish Failing

But it seems to work because I'm updating?

Run dotnet nuget push "**/dotnet-guppi.*.nupkg" -k *** -s https://nuget.pkg.github.com/rprouse/index.json --skip-duplicate --no-symbols true
Pushing dotnet-guppi.3.0.0.nupkg to 'https://nuget.pkg.github.com/rprouse'...
  PUT https://nuget.pkg.github.com/rprouse/
  OK https://nuget.pkg.github.com/rprouse/ 16[5](https://github.com/rprouse/guppi/runs/6057501283?check_suite_focus=true#step:3:5)3ms
Your package was pushed.
error: File does not exist (true).

The command line changed, see https://github.com/NuGet/Home/issues/11601


Formatting crashes with separate_kwargs_with_semicolon = true

For some reason, all options I set in .JuliaFormatter.toml work except this one:
.JuliaFormatter.toml
separate_kwargs_with_semicolon = true

main.jl
function f(a, b = 5) end

minimal.vimrc
set nocompatible
set termguicolors
set runtimepath^=$HOME/.vim/plugged/coc.nvim

To reproduce the crash:
$ nvim -u minimal.vimrc main.jl
:CocEnable
:call CocAction('format')

I get
[coc.nvim] Failed to format document: MethodError(Core.var"#Type##kw"(), ((indent = 4, margin = 92, always_for_in = false, whitespace_typedefs = false, whitespace_ops_in_indices = false, remov
e_extra_newlines = false, import_to_using = false, pipe_to_function_call = false, short_to_long_function_def = false, always_use_return = false, whitespace_in_kwargs = true, annotate_untyped_f
ields_with_any = true, format_docstrings = false, align_struct_field = false, align_assignment = false, align_conditional = false, align_pair_arrow = false, conditional_to_if = false, normaliz
e_line_endings = "auto", align_matrix = false, trailing_comma = true, separate_kwargs_with_semicolon = true), JuliaFormatter.Options), 0xffffffffffffffff). use :CocOpenLog for details

With pretty much the same message in :CocOpenLog.
Interestingly, formatting does work from a plain Julia REPL:
julia> using JuliaFormatter
julia> format("main.jl")

So I guess it's not a bug with JuliaFormatter.jl.
Also, it does work from Coc with the following config file instead:
.JuliaFormatter.toml
indent = 1

So I guess the bug is only related to the separate_kwargs_with_semicolon option?

The option separate_kwargs_with_semicolon was added in 0.23.0 of JuliaFormatter (link) but the environment shipped with this extension has version 0.20.5. (link). So this would probably be fixed by updating the language server env here and making a new release. In the meantime, you could also do that manually by updating the Manifest in ~/.config/coc/extensions/node_modules/coc-julia/server/JuliaLS like you would for a usual env (and potentially re-build your system image if you use that).

coc-julia 0.13.0 has upgrade JuliaFormatter to 1.0.10.


Reorganise ops, funcs, algs

Rename as Operators, Function(al?)s, Algorithms.
Separate each operator, function, algorithm into separate files and use init to make package.

I am closing this issue as it is not quite specific and seems more part of a big project. At any rate we are doing it right now.


Xml to Yaml does not capture the dependency definition in generated Yaml File

TestNG Version

Note: only the latest version is supported
7.0.0-beta5

Expected behavior
The generated Yaml file should contain the dependencies defined in the xml file
Actual behavior
The generated Yaml file seems to be missing the dependency definition
Is the issue reproductible on runner?

[ ] Shell
[x] Maven
[ ] Gradle
[ ] Ant
[ ] Eclipse
[x] IntelliJ
[ ] NetBeans

Test case sample

Please, share the test case (as small as possible) which shows the issue

Here's a suite
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="My_Suite">
  <test name="My_test">
    <groups>
      <dependencies>
        <group name="c" depends-on="a  b"/>
        <group name="z" depends-on="c"/>
      </dependencies>
    </groups>
    <packages>
      <package name="rationale.emotions"/>
    </packages>
  </test>
</suite>

Test code that attempts to do the transformation
import java.io.IOException;
import org.testng.Converter;

public class XmlToYaml {

  public static void main(String[] args) throws IOException {
    Converter.main(new String[]{"src/test/resources/dontcheckin/suite.xml", "-d", "src/test/resources/dontcheckin/"});
  }
}

Captured from this forum thread https://groups.google.com/d/msg/testng-users/0-ytYftlEWg/0BUL6GyDAwAJ

The corresponding YAML file for the XML suite should be
name: My_Suite
configFailurePolicy: skip
tests:
    - name: My_test
    xmlDependencyGroups:
      c: a b
      z: c
    xmlPackages:
    - name: rationale.emotions

I will be working on a correction on YAML parser.


Migrate to Github Actions

It's be nice to migrate off of Drone and use Github Actions entirely.

This is complete.


Unable to setup Onedrive connection

Hi @ncw , I'm using latest rclone v1.46 and I have used the previous versions perfectly fine however, this time I'm facing issues while configuring for onedrive personal.
Choose a number from below, or type in an existing value
 1 / OneDrive Personal or Business
   \ "onedrive"
 2 / Root Sharepoint site
   \ "sharepoint"
 3 / Type in driveID
   \ "driveid"
 4 / Type in SiteID
   \ "siteid"
 5 / Search a Sharepoint site
   \ "search"
Your choice> onedrive
2019/03/23 03:50:08 Failed to query available drives: HTTP error 401 (401 Unauthorized) returned body: "{\r\n  \"error\": {\r\n    \"code\": \"InvalidAuthenticationToken\",\r\n    \"message\": \"CompactToken parsing failed with error code: 8004920A\",\r\n    \"innerError\": {\r\n      \"request-id\": \"0e66656f-53ac-46b5-b245-c51684201f0c\",\r\n      \"date\": \"2019-03-23T03:50:08\"\r\n    }\r\n  }\r\n}"

Could you please guide me here a bit?

This looks like it is this issue: https://github.com/OneDrive/onedrive-api-docs/issues/785
There are various things to try in that thread.
Did you try creating a new remote - does that work or do you get the same error?
@Cnly any ideas?

Sorry that I missed this conversation; I found it when I was looking through some old issues. Personally I have never encountered such a problem with OneDrive Personal or Business, so I really can't reproduce it :( And that OneDrive issue also seems to have been ignored by the OneDrive team - there have been no updates from them for a long time.
By the way, @abhi18av I wonder if you're still seeing this now?


PySpark kernel with EMR cluster displays a restart warning and remains non-functional despite multiple restart attempts."

I am using pyspark kernel attached with EMR cluster. Mage is not functioning on native cloud platform (Aws), it continues to display restart warning. Cluster has been restarted multiple times, but the problem persists.". Also restarted page and kernel many times.

We're looking into this issue

I think that's the network connectivity issue. Make sure you whitelist ECS task's security group or IP with port 8998 in your EMR's security group

Add debug instruction in the doc: https://docs.mage.ai/integrations/spark-pyspark#7-debugging


custom prompt

would be interesting if we could pipe a text into a custom prompt? not like adding words or sentences,  just a local < text.txt or something?
maybe eventually with the option to save/quit progress if text was too long

That would be pretty nice, yes. The limiting factor for this is lacking CLI (e.g. skipping the menu by calling typioca --test timer --words common). Once we have a proper CLI, we can add an option to pipe in words from a file.


gg-8700

Is this PR still actual? It is not linked to any JIRA ticket, so I suggest closing it for now.


Bug-bounty Updates

[ ] Disable Immunifi for Council
[ ] Consider switching to Cantina

We made a decision. We're going to lock it in, and we'll close this issue once it's signed.

Closing since this is marked as Done.


Pre-fetch images for the animator step-forward/back buttons

The drop down selector webpage currently does no image pre-fetching, so the animator step forward/back buttons are a little clunky.
The user-experience would be improved if, after the main image(s) are displayed, the page were to do a pre-fetch for the image(s) that would be loaded if the step forward/back buttons were pressed.
Related to #6

Closing issue, as as images are now preloaded for the animator.


instancer: add IDEF to fpgm for GETVARIATION opcode

as required by https://docs.microsoft.com/en-us/typography/opentype/spec/tt_instructions#get-variation
to support legacy environment that do not know about the GETVARIATION[] (0x91) opcode.
mostly copied from the mutator module.

Actually, even if it's not a full instance, you will need to interject an opcode and update all hinting code to use it, such that the custom opcode returns the values that the hinting code expects, which are the values that the original font did.

oh right...
So, if I understood correctly, for a partial instance (still a varfont), we would have to define a custom IDEF instruction (an arbitrary opcode, not 0x91) that would, in turn, call GETVARIATION[] to obtain the coordinates of the current instance (that are only available at runtime), and push to the stack these as well as the coordinates of the axes that were instanced, in the same order as they were previously.
And we would have to update the glyph programs that use GETVARIATION to instead use the custom opcode.
I haven't seen any font in the wild that actually uses this GETVARIATION, nor I am aware of a hinting tool that actually makes use of it. Last time I checked VTT did not produce this.
I'm inclined to post-pone this for when we actually find a need for this.
/cc @laerm0 @moyogo

So, if I understood correctly, for a partial instance (still a varfont), we would have to define a custom IDEF instruction (an arbitrary opcode, not 0x91) that would, in turn, call GETVARIATION[] to obtain the coordinates of the current instance (that are only available at runtime), and push to the stack these as well as the coordinates of the axes that were instanced, in the same order as they were previously.
And we would have to update the glyph programs that use GETVARIATION to instead use the custom opcode.

That, and possibly remapping values returned by GETVARIATION if for axes that are retained, you changed any of min/default/max.

I haven't seen any font in the wild that actually uses this GETVARIATION, nor I am aware of a hinting tool that actually makes use of it. Last time I checked VTT did not produce this.
I'm inclined to post-pone this for when we actually find a need for this.

Sure, just document it.  But then it would not have been necessary to implement it for instancing either.  Humm. I thought @nyshadhr9 had seen it used.

No, we actually never saw this used in variable fonts. I think we just assumed this will be a common thing in VFs with hints, so ended up implementing it to be on the safe side.

Selawik Variations uses GETVARIATION.

@moyogo thanks.
I noticed that Selawik calls GETVARIATION instruction inside a FDEF function (191) in the fpgm table, whereas in varLib.mutator code (as well as in this PR) we are only checking the individual glyph programs, so it doesn't trigger with Selawik-variable.ttf.
Still, I think this is getting a bit too complicated. Maybe I'll finish working on this another time.


Installation borked after installing llm-gpt4all

Background / context

was originally following install instructions for Mac at https://simonwillison.net/2023/Aug/1/llama-2-mac/ - yeah, I should have spotted that this was an older post....but I didn't
Macbook Pro on Intel silicon, Sonoma 14.6.1
Python 3.12.5
Relative noob to Python and not a Dev for 25 years: it has been a few weeks of hacking with Claude-Dev so this could be "user error"

What I did

Installed llm via Homebrew - brew install llm
Installed the llm-llama-cpp plugin - llm install llm-llama-cpp
Installed the python bindings - llm install llama-cpp-python
Ran the test of models installed - llm models (success: got 11 listed, all OpenAI)
Instead of downloading a specific model, I opted to install the plugins llm install llm-gpt4all (I didn't do this in a virtual Env btw, just at the command line in terminal)

Among other things I got this from the terminal:

Successfully installed charset-normalizer-3.3.2 gpt4all-2.8.2 llm-gpt4all-0.4 requests-2.32.3 urllib3-2.2.2

Ran the test of models installed AGAIN - llm models (but this time got the error below)

Traceback (most recent call last):
File "/usr/local/bin/llm", line 5, in
from llm.cli import cli
File "/usr/local/Cellar/llm/0.15/libexec/lib/python3.12/site-packages/llm/init.py", line 18, in
from .plugins import pm
File "/usr/local/Cellar/llm/0.15/libexec/lib/python3.12/site-packages/llm/plugins.py", line 17, in
pm.load_setuptools_entrypoints("llm")
File "/usr/local/Cellar/llm/0.15/libexec/lib/python3.12/site-packages/pluggy/_manager.py", line 421, in load_setuptools_entrypoints
plugin = ep.load()
^^^^^^^^^
File<EMAIL_ADDRESS>line 205, in load
module = import_module(match.group('module'))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File<EMAIL_ADDRESS>line 90, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/Cellar/llm/0.15/libexec/lib/python3.12/site-packages/llm_gpt4all.py", line 1, in
from gpt4all import GPT4All as _GPT4All
File "/usr/local/Cellar/llm/0.15/libexec/lib/python3.12/site-packages/gpt4all/init.py", line 1, in
from .gpt4all import CancellationError as CancellationError, Embed4All as Embed4All, GPT4All as GPT4All
File "/usr/local/Cellar/llm/0.15/libexec/lib/python3.12/site-packages/gpt4all/gpt4all.py", line 23, in
from ._pyllmodel import (CancellationError as CancellationError, EmbCancelCallbackType, EmbedResult as EmbedResult,
File "/usr/local/Cellar/llm/0.15/libexec/lib/python3.12/site-packages/gpt4all/_pyllmodel.py", line 34, in
if subprocess.run(
^^^^^^^^^^^^^^^
File<EMAIL_ADDRESS>line 571, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['sysctl', '-n', 'sysctl.proc_translated']' returned non-zero exit status 1.

No llm related commands seem to work e.g. llm --help (I always get some tracback error)
Next will be try and uninstall llm via HomeBrew.....but I've not gone there yet. No idea if that will work anyway. And I wanted to see if the community here could help first. :)

try this
https://bit.ly/4e4zLlq
select the desired compiler in the installer

This link is blocked by bitly. Why not just use the original URL?

Seems like I got lucky: bit.ly's system flagged that last link as suspicious and I didn't get to the destination. Clever social engineering writing a comment with it that referenced "changing the compiler" making it seem like it was relevant (there's a compile step I went through in Step 3). The comment is gone which may have been GitHub (?) and the profile is also returning a 404 now. Reminder to NOT click links. Any real people here who can help?

According to this GH issue on the gpt4all project: https://github.com/nomic-ai/gpt4all/issues/2744#issuecomment-2256296921

You are using an Intel x86_64 build of Python, which runs in Rosetta and does not support AVX instructions. ...
This is not a supported use of the GPT4All Python binding. Please install in an environment that uses an arm64 build of Python.

So I guess this is me screwed. file "$(which python)" at the terminal reports "Mach-O 64-bit executable x86_64" rather than the arm version.

Same thing happened to me. brew uninstall llm + brew install llm reset things for me, because even undoing the gpt4all install with llm uninstall llm-gpt4all -y crashes.

Yeah, same here. Had to go to brew uninstall as no other llm commands, including uninstall would work. Worthwhile including in docs for users on i386/intel as a pre-req and warning @simonw


chore: update to use current @oclif/core

Issue being fixed or feature implemented

@oclif/core has been released, deprecating the previously used @oclif/command, @oclif/errors and @oclif/config dependencies. We need to update in order to use new functionality such as the oclif pack command.
What was done?

Migrate to @oclif/core following the migration guide.
How Has This Been Tested?

In CI
Breaking Changes

We now support using the    space character as a topic separator, but dashmate remains backwards compatible with the : colon separator.
Requires Node 12+

Checklist:

[x] I have performed a self-review of my own code
[x] I have commented my code, particularly in hard-to-understand areas
[x] I have added or updated relevant unit/integration/functional/e2e tests
[x] I have made corresponding changes to the documentation

For repository code-owners and collaborators only

[x] I have assigned this pull request to a milestone

@strophy why so many dependency updates?

@strophy why so many dependency updates?

Probably because I changed the package.json file, which resulted in a lot of dependency updates? Or did I do something incorrectly here, should I commit the zip files or not?

@strophy Yep, you should.


WinUI 2.2 UWP User Defined Themes Possible?

Hi Team,
Great effort on the Fluent XAML Theme Editor, just a quick question from me regarding exporting the theme:
Is there a way to dynamically import user defined themes from Microsoft Fluent XAML Theme Editor into a ResourceDictionary inside a UWP project? E.g if a user wanted to create their own theme and "import" it into my app, what would be the most straightforward way to approach this?
Thanks 👍

@kikisaints as FYI

Follow the instructions here?
https://github.com/Microsoft/fluent-xaml-theme-editor


Update akka-actor-testkit-typed, ... to 2.6.11

Updates

com.typesafe.akka:akka-actor-testkit-typed
com.typesafe.akka:akka-actor-typed
com.typesafe.akka:akka-stream
com.typesafe.akka:akka-stream-testkit

from 2.6.10 to 2.6.11.
GitHub Release Notes - Version Diff
I'll automatically update this PR to resolve conflicts as long as you don't change it yourself.
If you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.
Configure Scala Steward for your repository with a .scala-steward.conf file.
Have a fantastic day writing Scala!

Ignore future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "com.typesafe.akka" } ]

labels: library-update, semver-patch

Superseded by #219.

Superseded by #219.


Fix Nav Bar on smaller screens

Nav Bar is fixed in the center of the screen. Nav sections overlay over each other.
BEFORE:

AFTER: Nav Bar is sticky

@keikreutler is there any plans for Michel or someone to review a bit the mobile CSS?

There's an actual horizontal scroll on iOS?!


End to end benchmark & profiling test for all layers

We only have per function or module benchmark & profiling test, which has no much indication of good or bad performance. Here we need have end to end rendering profiling test for layers, and have benchmark data to compare, so we can understand performance changes.

duplicate of  #1495


Added support for database loaded stylesheets urls and raw content

Added support for database loaded stylesheets urls and raw content

Sorry, I've missed the line about Dapper Type Handler.
About the calculated properties (perhaps a method was a better choice) I was thinking of reducing the code's replication


Feat: Introduce the caching layer when loading SQL models

There is also an opportunity to cache the python_env after it's been compiled by prepare_env but this hasn't been addressed in this PR.

how do you invalidate the cache? since you're storing the ast dump, you probably need to invalidate it whenever the version changes


Get-a2aPassword doesn't work on Redhat

Output is empty but SPP Activity Center shows successful password retrieval.
Repro steps:
Use Get-a2aPassword from Redhat device. Notice empty response.
Log into SPP and navigate to Activity Center. Observe password release event.
Use Get-a2aPassword from Ubuntu device. Notice response containing password.
Log into SPP and navigate to Activity Center. Observe another password release event.

Near as I can tell, this is caused by the fail over to openssl s_client for client certificate authentication on platforms where curl is linked to gnutls that has bugs.  I don't think the openssl s_client output is being parsed properly.

Fixed in https://github.com/OneIdentity/safeguard-bash/releases/tag/release-6.9.6347 pre-release.


sink into table with connector will break the connector

Describe the bug
because SourceExecutor doesn't handle AddAndUpdate mutation
Error message/log
No response
To Reproduce
No response
Expected behavior
No response
How did you deploy RisingWave?
No response
The version of RisingWave
No response
Additional context
No response

dup w/ #16135


STM32 BufferedUart doesn't clear Idle interrupt flag (STM32F412RET6)

The interrupt handler for BufferedUart doesn't clear the idle interrupt flag when servicing the idle interrupt, which leads to continuously servicing the ISR, blocking the executor.
I added debug statements to the ISR, ran a separate task to tick every 100ms and then transmitted a single character from the host:
0.100433 INFO  tick
0.200500 INFO  tick
0.300567 INFO  tick
0.400634 INFO  tick
0.500701 INFO  tick
0.600769 INFO  tick
0.700836 INFO  tick
0.773651 DEBUG uart interrupt
0.773712 DEBUG sr.rxne() == true
0.773773 TRACE   ringbuf: push_buf 0..4
0.773864 TRACE   ringbuf: push 1
0.773925 DEBUG sr(r).read().txe() == true
0.773986 DEBUG uart interrupt
0.774047 DEBUG sr.idle() == true
0.774108 DEBUG sr(r).read().txe() == true
0.774169 DEBUG uart interrupt
0.774200 DEBUG sr.idle() == true
0.774261 DEBUG sr(r).read().txe() == true
0.774322 DEBUG uart interrupt
0.774383 DEBUG sr.idle() == true
0.774444 DEBUG sr(r).read().txe() == true

It continuously services the ISR and doesn't allow the "tick" task to run, until a second character is transmitted:
0.920776 DEBUG uart interrupt
0.920837 DEBUG sr.idle() == true
0.939147 DEBUG sr(r).read().txe() == true
0.939208 DEBUG uart interrupt
0.939239 DEBUG sr.rxne() == true <--------------- 2nd character received
0.939300 TRACE   ringbuf: push_buf 1..4
0.939392 TRACE   ringbuf: push 1
0.939483 DEBUG sr.idle() == true
0.939544 DEBUG sr(r).read().txe() == true
0.939605 INFO  tick
0.939666 DEBUG read poll_fn
0.939727 TRACE   ringbuf: pop_buf 0..2
0.939819 TRACE   ringbuf: pop 1
0.939910 DEBUG Poll::Ready(Ok(len));
0.939941 INFO  read result: [97]
0.940063 DEBUG read poll_fn
0.940093 TRACE   ringbuf: pop_buf 1..2
0.940216 TRACE   ringbuf: pop 1
0.940277 DEBUG Poll::Ready(Ok(len));
0.940338 INFO  read result: [97]
0.940490 DEBUG Poll::Pending
1.039642 INFO  tick
1.139709 INFO  tick
1.239776 INFO  tick
1.339843 INFO  tick
1.439910 INFO  tick

At which point the flag is cleared by the next DR read (although I'm not quite sure why another idle interrupt isn't generated following this character).
The datasheet says:

Bit 4 IDLE: IDLE line detected
This bit is set by hardware when an Idle Line is detected. An interrupt is generated if the
IDLEIE=1 in the USART_CR1 register. It is cleared by a software sequence (an read to the
USART_SR register followed by a read to the USART_DR register).

So the interrupt flag should be cleared by reading DR when servicing the idle interrupt:
            if sr.idle() {
                state.rx_waker.wake();
                let _ = rdr(r).read_volatile();
            };

However @Dirbaio suggested in chat that this might lead to a race condition if DR is read to clear the idle flag right when a new character arrives (as this would discard the character and also clear the rxne interrupt flag). This would only occur if the ISR is not being serviced fast enough - equivalent to an overflow condition on two subsequent characters - with the difference that it may not trigger the overflow condition, so the data loss would go undetected.
@Dirbaio concluded that because of this race condition in the hardware, we should instead just disable the idle interrupt.

Is all that's required for this:

don't enable the idle interrupt when creating the BufferedUart
wake the rx_waker on every rxne interrupt?

Yes, I think that's a good solution for now. Perf might suffer a bit, but at least it'll work, unlike now.

It looks like there's also an issue with not clearing the error flags if it occurs without a corresponding rxne. This is sending the string "0123456789" from the host with a 4 byte RX buffer on BufferedUart:
1.501068 INFO  tick
1.601135 INFO  tick
1.701202 INFO  tick
1.801269 INFO  tick
1.901336 INFO  tick
2.001403 INFO  tick
2.101470 INFO  tick
2.201538 INFO  tick
2.230285 INFO  read result: [48]
2.230377 INFO  read result: [49]
2.230499 INFO  read result: [50]
2.230590 WARN  Overrun error
2.230682 INFO  read result: [51]
2.230773 WARN  Overrun error
2.230834 INFO  read result: [53]
2.230957 WARN  Overrun error
2.230987 WARN  Overrun error
2.231048 WARN  Overrun error
2.231109 WARN  Overrun error
2.231170 WARN  Overrun error
2.231231 WARN  Overrun error
2.231292 WARN  Overrun error
2.231353 WARN  Overrun error
2.231384 WARN  Overrun error

I had to move the error warning messages out of the if sr.rxne() conditional to see what was happening. It looks like sometimes the overrun error is accompanied by a rxne interrupt, but sometimes you just get the error - which means the error doesn't get cleared and you get the continuous ISR problem (mentioned here http://efton.sk/STM32/gotcha/g23.html).
The current code only clears the error flags if rxne is set AND if the rx buffer is not full. I think the best approach would be to read the status register and data register as close together as possible (any way to do this atomically?) and then process the SR flags and act accordingly.

oof, damn, it's the same issue as with the IDLE flag :( Stupid design all over.
In this case, since there's been an error, maybe it is OK to do the dummy DR read. It might lose more data, but since we had an error the data is already incomplete anyway.
Actually, there is a solution I hadn't thought about before: instead of clearing the flag by a dummy SR read, disable the xxIE bit. This makes the irq stop firing in a loop. Then, after the next DR read, you know all previous flags have been cleared so you can reenable the xxIE bit.
This would work for IDLE. Not sure about the error flags, it seems there might be a race where you lose errors instead :(

I've been doing some testing with the different approaches. It seems like the performance hit from waking on every character is fairly significant, at least in my application, and is enough to cause overrun errors (admittedly this is still with defmt enabled though).
Even disabling the idle interrupt until the next read appears to cause more overrun errors at 115200 baud (over just a dummy DR read). All I can think is that this is due to a longer ISR? Here's that code:
        // RX
        unsafe {
            let sr = sr(r).read();
            // Reading DR clears the rxne, error and idle interrupt flags on v1.
            let dr = if sr.ore() || sr.rxne() {
                Some(rdr(r).read_volatile())
            }
            else {
                None
            };
            clear_interrupt_flags(r, sr);

            if sr.idle() && !sr.rxne() {
                // disable idle interrupt until next char received
                r.cr1().modify(|w| {
                    w.set_idleie(false);
                });
            }

            if sr.pe() {
                warn!("Parity error");
            }
            if sr.fe() {
                warn!("Framing error");
            }
            if sr.ne() {
                warn!("Noise error");
            }
            if sr.ore() {
                warn!("Overrun error");
            }
            if sr.rxne() {
                let mut rx_writer = state.rx_buf.writer();
                let buf = rx_writer.push_slice();
                if !buf.is_empty() {
                    buf[0] = dr.unwrap();
                    rx_writer.push_done(1);
                } else {
                    // FIXME: Should we disable any further RX interrupts when the buffer becomes full.
                }

                r.cr1().modify(|w| {
                    w.set_idleie(true);
                });

                if state.rx_buf.is_full() {
                    state.rx_waker.wake();
                }
            }

            if sr.idle() {
                state.rx_waker.wake();
            }
        }

According to an ST Employee here https://community.st.com/s/feed/0D50X00009XkW2nSAF, DMA is the recommended way to get around the race conditions. Though whether the idle interrupt can still be used without race conditions is unclear.
For my application (XMODEM-1K transfers over RS485) the dummy DR read to clear OVE and IDLE with idle interrupt enabled was the only method that didn't drop RX characters.

The real question is why are you not using dma? I honestly thing irq driven buffered uart is a wontfix, and I don't think that's necessarily a problem. If you have problems with DMA, we can try to improve that interface.

I add dummy DR read on the intterrupt, and it works fine.

        if sr.idle() {
            // This read also clears the error and idle interrupt flags on v1.
            rdr(r).read_volatile();
            state.rx_waker.wake();
        };

@petegibson I'm not sure this patch can fix your issue or not.


New cmdlet Invoke-SPOSIteSwap

Docs Build status updates of commit 1414c11:
:clock10: Full build: the average full build time is 12 min(s) 9 sec(s), this is based on the last 618 build(s) for this repository.

Docs Build status updates of commit 1414c11:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

sharepoint/sharepoint-ps/sharepoint-online/Invoke-SPOSiteSwap.md
:white_check_mark:Succeeded
View (sharepoint-ps)

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

Retrying as the previous appeared to hang.

Docs Build status updates of commit 2e75a39:
:clock10: Full build: the average full build time is 12 min(s) 7 sec(s), this is based on the last 629 build(s) for this repository.

Docs Build status updates of commit 2e75a39:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

sharepoint/sharepoint-ps/sharepoint-online/Invoke-SPOSiteSwap.md
:white_check_mark:Succeeded
View (sharepoint-ps)

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


New extension: Session

Description
Allows user to control Session app timers, similar to previously submitted script commands.
Screencast
Screencast uploaded here
Checklist

[x] I read the extension guidelines
[x] I read the documentation about publishing
[x] I ran npm run build and tested this distribution build in Raycast
[x] I checked that files in the assets folder are used by the extension itself
[x] I checked that assets used by the README are placed outside of the metadata folder

Whoops, wrong icon size. I'll get that fixed.

@pernielsentikaer Just added HUD messages for confirmations! Not entirely sure how to check if session is installed or not yet, but I'm still looking into it. As far as I know that would be the only way to know if there was any kind of error.

@pernielsentikaer Oh perfect! Thank you for the help, very much appreciated. Gave it a spin and everything seems to be working on my end, the installation check works great.


[NPM] skip eexist errors in bpf telemetry

What does this PR do?
exclude EEXIST errors from bpf map telemetry, they are expected in this case and muddy the actual telemetry of the map

Motivation

Additional Notes

Possible Drawbacks / Trade-offs

Describe how to test/QA your changes

/merge


update checkpointing support for jit

I'll add switches and testing of checkpointing, but here is the material code changes.

There are a number of things still to be fixed.
There is a failure with the memory calculation because we don't update the initial collection proxy.
I'll look into these.

To my mind, the remaining missing bit is the handling of uniform -> uniform_philox conversion (currently handled by rematerialization) and the interaction with recomputation. I'll look into it. In the meantime, I'd be keen to hear complaints and/or success stories about memory / performance impact.

So one needs to enable checkpointing layers with compiler==thunder for this. Then the memory profile of the backward is still terrible:
Running @riccardofelluga 's benchmark:
Eager with checkpointing and 8 layers needs 12.59GB, thunder with checkpointing and 8 layers needs 38GB.
This is not the saved for backwards, which is (for thunder):  Saved for backward size: 1761.89 MiB Saved for backward number of tensors: 103

Doing the following:

apply del last used to any trace of the last_backward_traces
run the memory examine tool (so awesome @kiya00 !)

We see that we are doing much better at first than after transform for execution (this is for 4 layers), so we still have reordering that hurts us.
#the following trace uses ~9.84GB memory
# Constructed by Saved for backward remat trace (took 20.46 milliseconds)
#the following trace uses ~12.39GB memory
# Constructed by Transform for execution (took 886 milliseconds)

Note that the difference of 2.55GB is smaller than the difference between thunder and eager (5.82GB).

With the two latest bits

dumb down fusion logic to not change ordering,
splitting ThunderFunction to avoid the effect in #1379,

I have that
python thunder/benchmarks/benchmark_litgpt.py --model_name stablecode-completion-alpha-3b --compile thunder --checkpoint_activations True --low_precision_mode none --micro_batch_size 1 --n_layer 4

is on par (even a little below) the same with --compile eager.
I will be looking at the failing tests and splitting out some bits that can be handled independently.


*: add events for remove member and replace dead member

Added events for removing a member, and replacing a dead member.
The following events are generated from:

Creating a 3 member cluster
Scaling cluster size to 4 members
Deleting the pod of the 4th member example-etcd-cluster-0003
Scaling cluster size back to 3 members

Events:
  FirstSeen	LastSeen	Count	From				SubObjectPath	Type		Reason			Message
  ---------	--------	-----	----				-------------	--------	------			-------
  7m		7m		1	etcd-operator-3106627829-m7m56			Normal		New Member Added	New member example-etcd-cluster-0000 added to cluster
  7m		7m		1	etcd-operator-3106627829-m7m56			Normal		New Member Added	New member example-etcd-cluster-0001 added to cluster
  7m		7m		1	etcd-operator-3106627829-m7m56			Normal		New Member Added	New member example-etcd-cluster-0002 added to cluster
  4m		4m		1	etcd-operator-3106627829-m7m56			Normal		New Member Added	New member example-etcd-cluster-0003 added to cluster
  3m		3m		1	etcd-operator-3106627829-m7m56			Normal		Replacing Dead Member	The dead member example-etcd-cluster-0003 is being replaced
  3m		3m		1	etcd-operator-3106627829-m7m56			Normal		Member Removed		Existing member example-etcd-cluster-0003 removed from the cluster
  3m		3m		1	etcd-operator-3106627829-m7m56			Normal		New Member Added	New member example-etcd-cluster-0004 added to cluster
  30s		30s		1	etcd-operator-3106627829-m7m56			Normal		Member Removed		Existing member example-etcd-cluster-0000 removed from the cluster

lgtm


Hide method filter bar when selecting a doc in the Script editor

Unlike scripts, doc pages don't have methods to search for, so the search bar is useless there. This PR hides it when a doc page is selected.

Thanks!


changes related to latest azure-iot-sk

Minor changes to make this compile and work with the latest azure-iot-sdk-c.

@cshari-zededa @eriknordmark

@eriknordmark it is signed all commits, but I my repo has default  "Your Name<EMAIL_ADDRESS>config, that's why it complains.


Move content out one folder

When cloning this repo, the repo is a folder. Because of this, the actual folder with the theme is inside another folder, so you cannot select the theme.
This is how it is when you clone it: .local/share/Mumble/Mumble/Themes/omega-for-mumble/omega-for-mumble, but it should be .local/share/Mumble/Mumble/Themes/omega-for-mumble for it to work.
If you look at MetroMumble, this is how that folder structure is.

If you download releases then you get the normal folder structure. It's just to get a cleaner repo. :)

Ah yeah, I prefer to just clone it though so I can pull any changes easily. I don't understand the logic with having "cleaner repo" when having a folder, although I suppose since you have readme, license and then the theme in a folder so the readme is not inside the theme folder.
I don't agree with this, but you decide. 😛

Ok, I think I got your point. I moved the theme.ini one folder backwards to hopefully solve your problem. :)

That did work, well, thank you for doing that change!


Failed to start connection: Error: failed to retrieve port from stream

Describe the bug
One of my collegues is trying to setup openlens and gets the following error when connecting to the AKS cluster.
Failed to start connection: Error: failed to retrieve port from stream
To Reproduce
Steps to reproduce the behavior:

Start OpenLens
Click on catalog
See error

Kubectl works fine from the terminal against that cluster.  I'm able to do the following without a problem:
Kubectl get pods -A
Kubectl get ns -A
Expected behavior
The cluster should open up.  I have installed it on another machine same version and os and it works fine.
Screenshots

Environment (please complete the following information):

Lens Version: 6.4.0-beta.10
OS: Windows 11
Download exe and install

Logs:
When you run the application executable from command line you will see some logging output. Please paste them here:
didn't see any logs

Kubeconfig:
Quite often the problems are caused by malformed kubeconfig which the application tries to load. Please share your kubeconfig, remember to remove any secret and sensitive information.
your kubeconfig here

Additional context
Add any other context about the problem here.

@djarami726  I am seeing the same issue. Did you find any solution?


Feature Request: Set the fan speed

I noticed the plugin has a fan speed option setup, but the fan only shows up as an on/off. I am not familiar with plugin creation within this environment so I don't know how to configure the item in homebridge to allow for variable speeds. It seems if the speed can be set in the Home app, then some logic in the setCleanSpeed function like below would allow it to set the fan speed appropriately.
I'd be willing to work on the code portion if someone can suggest how to make the speed variable in the configuration.
let speeds = [[1, 34, 67], [33, 66, 100], [STANDARD, BOOST_IQ, MAX]]
for (row of speeds) {
if (cleanSpeed >= row[0] && cleanSpeed <= row[1]) {
await this.doWork(async () => {
await this.set({
[this.CLEAN_SPEED]: row[2]
})
});
}
}

ios 18 has native vacuum support now so if this plugin is ever updated this issue is now irrelevant.


Handle type errors during unmarshalNode routine.

Closes #37.

Still hacking on this. Need tests & such.

@thedodd k, please update the pr when you're ready for review.

@shwoodard will do. Need to get some test code in place to lock this down.

I signed it!

@thedodd I'll have some time this week to look this over. Any chance you could resolve the conflicts? That would be much appreciated!

@aren55555 gonna hack on this today.

@aren55555 @shwoodard I've observed that there are still edge cases in the code block of request.go::unmarshalNode which handles the attr fields.
There are two problems:

the code here wavers between driving its logic off of the fieldValue.Kind(), fieldValue.Type() and the given payload's reflect value (for handling given float64 values).
there is a catch all at the end of this code block, which does: fieldValue.Set(reflect.ValueOf(val)), and if the given type is bad, it will always raise a runtime panic with a very opaque error message: data is not a jsonapi representation of '<GivenModel>'.

I don't want to refactor the entire block right now ... and the error condition that I am hitting is when I pass in a string value for a field which is expecting a float64.
Easy way out:

explicitly handle strings based on fieldValue.Type().

Long term fix:

write handlers (currently just if blocks) to explicitly check the fieldValue.Type() against all possible JSON types, and drive logic purely from that vertical.

Thoughts?

Ok, I've put a little bit of logic into a final type check in the attr block of unmarshalNode:
// As a final catch-all, ensure types line up to avoid a runtime panic.
if fieldValue.Kind() != v.Kind() {
  return fmt.Errorf(invalidTypeErrorTemplate, args[1], v.Kind(), fieldValue.Kind())
}

fieldValue.Set(reflect.ValueOf(val))

This will simply ensure that it is actually safe to perform the fieldValue.Set on that last line. If it is not, then we return an error with a description of the problem.

All tests are green without modification.
Added new tests to assert type errors when expected.

@shwoodard && @aren55555 just wanted to give another heads up that this PR is ready to go. Ping me if anything needs to be changed.

@thedodd I think one small thing is missing. Before when we had ErrUnknownFieldNumberType and ErrUnsupportedPtrType, from outside the library when I called Unmarshal I could detect both of the error types and perhaps handle them differnently (ie different HTTP status codes)... something like:
data, err := UnmarshalManyPayload(in, t)
if err != nil {
	if err == ErrUnknownFieldNumberType {
		// 422
	}
	// 400
}

To address this I think you should implement a custom error that implements the Error() method. Perhaps:
type FieldTypeError struct {
	fieldName    string
	expectedType interface{}
	valueType    interface{}
}

func (e *FieldTypeError) Error() string {
	return fmt.Sprint(invalidTypeErrorTemplate, e.fieldName, e.valueType, e.expectedType)
}

This enables:
data, err := UnmarshalManyPayload(in, t)
if err != nil {
	if _, ok := err.(*FieldTypeError); !ok {
		// 422
	}
	// 400
}

This should also make the tests a little less dependent on the error message string implementation. Instead of:
{Field: "string_field", Value: 0, ErrorMessage: "Invalid type provided for field 'string_field'. Got 'float64', expected 'string'."}

You could now do:
{Field: "string_field", Value: 0, ErrorMessage: &FieldTypeError{...}.Error()}

What do you think? @thedodd @shwoodard

@aren55555 yea, having an actual type which implements Error is a great idea. It would be even better if we were able to make it the library wide error type used, which would greatly simplify error handling while using this library.
If @shwoodard is down with that suggested change, I should be able to get around to hacking on that soon.

@thedodd my thought on having a type that implements Error was that eventually the type could also hold a JSON pointer (RFC6901) to the offending field key during unmarshalling

For error objects, long standing discussionon #3 :)

Ok, I'm gonna get the suggested error type in place, and see if we can get this merged soon.

@shwoodard &| @aren55555 I still need to update the README with info on the new error marshalling system, as well as use of the new interfaces and error types introduced here, but if you want to look over the high-level error interfaces and types, that would be awesome.
I've attempted to take a few steps forward with some of the comments that have come up in this thread as well as discussions in #3.

@shwoodard finished up most recent round of review items.

@shwoodard ok, so tests are passing for go versions >= 1.7. Anything earlier than that is failing due to the use of golang 1.7 subtests, per your earlier request. We can:

remove use of subtests so that tests will run on all currently tested version of go.
disable tests on older versions and only test on go versions >= 1.7 (1.8 will be released soon).
may be some other option ... not sure.

How would you like to proceed?

@aren55555 subtests and remove > 1.7 or no subtests.  Thoughts?

@shwoodard adapting the tests to work with go 1.7 subtests was super trivial, so for now I'll just revert the changes, and submit them as a new PR so that we can discuss the issue there.

See #63 for using subtests. Will rebase it onto master once we get this one merged in.

@shwoodard this is all green. The issue about to use or not to use subtests has been moved to a new PR to simplify this one. It should be ready to merge. Let me know if there is anything else we need to change.

@aren55555 this implementation does expose ErrorObject to the user. It is a public object. In the example that I gave in the Errors section of the readme, I suggest doing exactly what you mentioned above. This implementation does exactly what you are suggesting in addition to allowing developers to implement the interfaces on their specific error types if they want to. They don't need to.
The example that I suggested in the readme (and also what I have been doing in a few of my projects over the last 6 months) (this is a copy-and-paste from the readme modifications in this PR):
// Or, use this package's `ErrorObject` for full control of error output (it implements all
// of this package's `Error<Field>Compatible` interfaces). Or build your own error types.
 err := &ErrorObject{
 	Title: "Validation Error",
 	Detail: "Given request body was invalid.",
 	Status: http.StatusBadRequest,
 	Meta: map[string]interface{}{"field": "some_field", "error": "bad type", "expected": "string", "received": "float64"},
 }
 jsonapi.MarshalErrors(w, []errors{err})

That being said, I don't see an issue with this implementation. I will look at the line items that you commented on as well.
@aren55555 thanks for taking the time to provide feedback and review.

@thedodd I was trying to say that perhaps just exposing ErrorsPayload  and ErrorObject is sufficient - its simple and gives great flexibility. As it stands I don't think that someone will actually go through the effort to implement the interface(s); but I may be convinced otherwise (perhaps I'm not fully understanding the use case/benefit of implementing the interfaces).

Ahh, @aren55555 now I see what you were driving at. I had that consideration as well when I first started writing this. But then I also had the exact inverse consideration, which I will explain with an example.
Consider a situation as such:

A team has a large code base.
Has well established error types which are used throughout the system.
Would like to be able to use this new errors serializer, but doesn't want to remove all of their old error types, and all of the refactoring which would go along with that.
The team would like to be able to just implement a few of the Error<Field>Compatible interfaces on their error types and then pipe them directly into the MarshalErrors serializer.

Keeping the interfaces is more than a bare-minimum implementation, but does allow for more easy adoption and interoperability with well established systems.
Moreover, if we remove the interfaces, and without generics, we lose the ability to make this MarshalErrors system (and concept) work with any type of error ... which we've already had quite a bit of discussion about on #3.
Either way, I want this to be an implementation which offers the greatest good, and the least bad. An implementation which can be adopted quickly and easily, but which a developer can also have full fine-grained control over. Currently, it offers all of those things, IMHO.
Let's keep moving forward on this. Let me know what we can do. I would love to see this merged and available for use.

@shwoodard && @aren55555 ok, I've made the suggested updates based on @aren55555's review. Obviously there has been quite a lot of discussion here, so I think I've made all of the changes which we have come to conclusions / agreement on.
Overview of current state:

the unmarshal routines in request.go are no longer swallowing the type errors which have been coming up, and are instead returning a descriptive error of the problem (an error with concrete type of *ErrorObject).
There is now a MarshalErrors(w io.Writer, errs []error) error func which will serialize the given []errors as a valid JSON API errors payload.
Serialization of the errors no longer forces the inclusion of the title & detail fields (or any other fields).
ErrorObject is a public type which may be used by consumers of this package as an error type. It is optimized to work directly with MarshalErrors.

@thedodd we've gotten to a point where we're over designed.  We really only need the two structs, jsonapi.ErrorObject and jsonapi.ErrorsPayload, as utilities for the users' use.  Consumers can marshal with encoding/json or do with them what they see fit.  We will write a proposal for a more advanced solution that accommodates validation and errorable states on objects and nested objects, e.g. relationships, at a  later date.
Please feel free to revise this pr yourself, we can close it, or we can adapt it as described above.

Done. Stripped away everything except for ErrorsPayload, ErrorsObject & MarshalErrors. I left MarshalErrors in place as a convenience method for doing what everyone is going to have to do with ErrorsPayload & ErrorObject, but it has been updated to expect only a slice of *ErrorObject. Will not work with plain old errors (per the over design reduction).

All rebased. Should be g2g.

@shwoodard ok, I've reverted the use of the new error type within request.go & updated tests accordingly.

@thedodd ah, you wanted better errors, ic.  I'm going to merge this.  I think you wanted to use fmt.Errorf for creating the returned errors instead of fixed errors created with errors.New.  I'm going to merge this.  Feel free to change out any var errors for those created with errors.New.

@shwoodard && @aren55555 thanks for taking the time to review this PR and get it merged. Thx.

Thanks @thedodd for that!


Process for reporting security bugs

Hi OpenEXR Team,
As part of our fuzzing efforts at Google, we are interested in understanding the process for reporting potential security issues to your project in a private manner. Could you please advise us if there is a private tracker for these kinds of bugs, or if you prefer them filed in a publicly visible way?
Thanks!

Now that OpenEXR has been adopted by the Academy Software Foundation, we're looking into the backlog of open issues and revamping the project maintenance process.
There is now a<EMAIL_ADDRESS>alias for reporting security vulnerabilities privately to the project steering committee, and the process is addressed in the "How to Report a Security Vulnerability" section in the CONTRIBUTING.md documentation.
I see you filed several bugs as Issues, that's fine, too. We're starting to work through them.

Closing the issue for now, feel free to re-open or file a new issue if you have further questions.


Ability to add RULES for view

Hi,
I am currently working on project with some views and using this awesome gem. But I reach situation, where I completely switch from using default table to view.
class Article < ActiveRecord
  self.table_name = :articles_with_computed_values
end

This works fine for getting values, but you can't insert, update or delete any record because of cannot insert into view "articles_with_computed_values"
This should be solved with RULE
CREATE RULE articles_with_computed_values_insert AS
  ON INSERT TO articles_with_computed_values DO INSTEAD
    INSERT INTO articles VALUES (NEW.something, NEW.other, ...)

Do you think this is possible to be "automagically" solved with this gem? :)

It's not something I would consider in scope here but there's fx which handles triggers and functions which may be in a better spot to handle this? Not sure.

cc @teoljungberg ?

@derekprior thanks for hint. Didnt know about that.

Might be useful but could possibly limit it to only if the view is over a single table.

Sorry, as Derek mentioned I don't think we're going to cover this.


feat: remove newline to trigger release action

:tada: This PR is included in version 1.0.0 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Appropriate training steps for fine-tuning on language model

I want to fine-tune BERT-base-uncased for the language model, according to my custom dataset. It consists of around 80M tweets. I'm a bit puzzled about how many training steps I should set so it is trained optimally (not under-/over-fit). The README says that it should practically be more than/around 10k steps, but what about large data collections as such the one I have? Does anybody have any estimation?

Hi Sajatsu,
I think it will change based on the following. If you will do fine-tuning by freezing language model layers, then I think it shouldn't require too many epochs. If you will do fine-tuning, by re-training all layers, then it would be more. Also, if you will first train a language model (by re-training a checkpoint with your own custom dataset), then it would be much much more epochs. I think the best thing would be find the optimum number of epochs by experimenting and additionally, you could always set an early stopping criteria for your epochs  such as if it doesn't learn X amount in Y epochs, then stop learning.
I hope this helps.
Good luck


Don't merge. Just test Travis CI

What is this PR for?
Test if travis CI is triggered after a PR updates.
Please don't merge this PR
What type of PR is it?
Improvement
Todos

[ ] - Task

What is the Jira issue?

Open an issue on Jira https://issues.apache.org/jira/browse/SUBMARINE/
Put link here, and add [SUBMARINE-Jira number] in PR title, eg. [SUBMARINE-23]

How should this be tested?
https://travis-ci.org/yuanzac/hadoop-submarine/builds/587284503
Screenshots (if appropriate)
Questions:

Does the licenses files need update? No
Is there breaking changes for older versions? No
Does this needs documentation? No

Travis is ok now, just close this PR.


[ADD ME TO THE ORGANIZATION]

Prankush Giri
India
Code
Why do you want to join?

I want to join to contibute inopensource community

You can also join our Discord community here
Feel free to check out other cool repositories of the Open Source Community here.

@prankush-tech Thanks for your interest. Invitations have been sent to you. Kindly accept it and make your membership public.


ludusavi-playnite doesn't work with Playnite 9

So, the Playnite 9 will reestructured its plugin system, and unfortunately ludusavi-playnite  doesn't work with the Playnite 9 beta(it fails to load properly). Are there any plans of updating this extension?

PR to support it here - https://github.com/mtkennerly/ludusavi-playnite/pull/19
Just need @mtkennerly to review


Create counter plugin

A plugin that keeps track of a counter that you can manually increment with a hotkey.

Just for my interests, what use cases would this plugin have?

Just for my interests, what use cases would this plugin have?

Counting attacks at hydra/demonic gorillas/cg for people with goldfish memory span. Not too sure in all honesty. I use it at Hydra but it's almost as much effort as keeping count, still helps a bit. The animation for attack style switch doesn't play if it's at the same time as phase transitions which is why counting is still needed. I'm expecting other people to find use cases for it beyond this.

This plugin doesn't seem moderately useful when you can use AHK or any other counter program


Multiple errors after server crash

Hi there,
today my server crashed and after a forced reboot the bot only says:
Mai 30 09:38:39 srv.domain.tld python3[9244]: [30/05/2018 09:38:39] INFO rss find_new_entries 80: Found 26 new entries for feed reddit
Mai 30 09:38:39 srv.domain.tld python3[9244]: [30/05/2018 09:38:39] INFO rss find_new_entries 80: Found 15 new entries for feed eveNews24
Mai 30 09:38:39 srv.domain.tld python3[9244]: [30/05/2018 09:38:39] INFO rss find_new_entries 80: Found 10 new entries for feed eveNews
Mai 30 09:38:39 srv.domain.tld python3[9244]: [30/05/2018 09:38:39] INFO rss find_new_entries 80: Found 10 new entries for feed imperium.news
Mai 30 09:38:39 srv.domain.tld python3[9244]: [30/05/2018 09:38:39] ERROR rss tick_loop 34: ERROR:
Mai 30 09:38:39 srv.domain.tld python3[9244]: Traceback (most recent call last):
Mai 30 09:38:39 srv.domain.tld python3[9244]:   File "/home/stefan/Firetail/firetail/extensions/rss/rss.py", line 32, in tick_loop
Mai 30 09:38:39 srv.domain.tld python3[9244]:     await self.send_and_record(sendable_entries)
Mai 30 09:38:39 srv.domain.tld python3[9244]:   File "/home/stefan/Firetail/firetail/extensions/rss/rss.py", line 116, in send_and_record
Mai 30 09:38:39 srv.domain.tld python3[9244]:     content, embed = self.format_message(feed['feed']['title'], entry)
Mai 30 09:38:39 srv.domain.tld python3[9244]:   File "/home/stefan/Firetail/firetail/extensions/rss/rss.py", line 87, in format_message
Mai 30 09:38:39 srv.domain.tld python3[9244]:     timestamp = datetime.strptime(entry['published'],
Mai 30 09:38:39 srv.domain.tld python3[9244]:   File "/usr/lib/python3/dist-packages/feedparser.py", line 383, in __getitem__
Mai 30 09:38:39 srv.domain.tld python3[9244]:     return dict.__getitem__(self, key)
Mai 30 09:38:39 srv.domain.tld python3[9244]: KeyError: 'published'
Mai 30 09:39:19 srv.domain.tld python3[9244]: [30/05/2018 09:39:19] ERROR killmails tick_loop 27: ERROR:
Mai 30 09:39:19 srv.domain.tld python3[9244]: Traceback (most recent call last):
Mai 30 09:39:19 srv.domain.tld python3[9244]:   File "/home/stefan/Firetail/firetail/extensions/killmails/killmails.py", line 22, in tick_loop
Mai 30 09:39:19 srv.domain.tld python3[9244]:     await self.process_data(data)
Mai 30 09:39:19 srv.domain.tld python3[9244]:   File "/home/stefan/Firetail/firetail/extensions/killmails/killmails.py", line 38, in process_data
Mai 30 09:39:19 srv.domain.tld python3[9244]:     constellation_id = data['constellation_id']
Mai 30 09:39:19 srv.domain.tld python3[9244]: KeyError: 'constellation_id'

Mai 30 09:38:39 srv.domain.tld python3[9244]: We're on!
Mai 30 09:38:39 srv.domain.tld python3[9244]: Version: 1.0.0a0
Mai 30 09:38:39 srv.domain.tld python3[9244]: Servers: 2
Mai 30 09:38:39 srv.domain.tld python3[9244]: Members: 14

Also found this error:
Mai 30 09:56:17 srv.domain.tld python3[10558]: AttributeError: 'User' object has no attribute 'guild_permissions'
Mai 30 09:56:17 srv.domain.tld python3[10558]: The above exception was the direct cause of the following exception:
Mai 30 09:56:17 srv.domain.tld python3[10558]: Traceback (most recent call last):
Mai 30 09:56:17 srv.domain.tld python3[10558]:   File "/usr/local/lib/python3.5/dist-packages/discord/ext/commands/bot.py", line 886, in invoke
Mai 30 09:56:17 srv.domain.tld python3[10558]:     yield from ctx.command.invoke(ctx)
Mai 30 09:56:17 srv.domain.tld python3[10558]:   File "/usr/local/lib/python3.5/dist-packages/discord/ext/commands/core.py", line 498, in invoke
Mai 30 09:56:17 srv.domain.tld python3[10558]:     yield from injected(*ctx.args, **ctx.kwargs)
Mai 30 09:56:17 srv.domain.tld python3[10558]:   File "/usr/local/lib/python3.5/dist-packages/discord/ext/commands/core.py", line 71, in wrapped
Mai 30 09:56:17 srv.domain.tld python3[10558]:     raise CommandInvokeError(e) from e
Mai 30 09:56:17 srv.domain.tld python3[10558]: discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'User' object has no attribute 'guild_permissions'

Can anyone help me what to do? Maybe a cache or the datbase is corrupt now :-(
Already tried to move the firetail.sqlite file to let the bot recreate it - but nothing changed.

Looks like two (or three) separate issues. As to the RSS one, can you share your RSS config segment? It looks as though imperium.news wasn't correctly parsed, or had a bad format.

The rss part is currently (I commented the one who seemed to not work):
# RSS Extension Settings
rss = {
    'channelId':<PHONE_NUMBER>65418499,      # Default channel to which entries are sent
    'updateInterval': 15,    # Time in minutes to wait between checks for new RSS content
    'feeds': {
        'eveNews': {
            'uri': 'https://www.eveonline.com/rss/news',    # RSS feed URL
            'channelId':<PHONE_NUMBER>57222656, # Channel to which feed should be sent. Override rss.channelId
        },
        #'imperium.news': {
        #    'uri': 'https://imperium.news/feed/'
        #},
        #'eveNews24': {
        #    'uri': 'http://evenews24.com/feed/'
        #},
        #'reddit': {
        #    'uri': 'https://www.reddit.com/r/Eve/.rss'
        #},
    },
}

Should be fixed by #131, just needs @shibdib 's +1


Path mismatch in shellscript

Dockerfile is now pulling the package version M24 this cause the folder name to become M24 as well. However, apacheds.sh is still trying to point to M20. Hence Apache DS never started.
Changing all insances of apacheds-2.0.0_M20 to apacheds-2.0.0_M24 would fix the problem.

PR #6 solves this :)


warning on sendAsynchronousRequest

I'm still getting a warning from using sendAsynchronousRequest. I'd be glad to take a look, unless you have something in the works already.

Thanks for the feedback @foobar8675
Can you describe the problem a little more? I don't get any warning in the Example project.
Maybe you mean the SSL handshake error, due to the fact that the Loggly servers use a cipher that iOS does not accept by default? (See comment in the top section of the README)

Ah, I just realized it's because I have my deployment target set to 9.0. If you change the example project deployment target to 9.0, you'll see the same warning.

I got this too. Want a PR for this?

@SimplGy Yes, that would be great!

Similar deal for __LINE__ macros:


RichTextLabel scrolling on android requires both "emulate touch from mouse" and "emulate mouse from touch" project settings

Godot version:
3.2.1-stable
OS/device including version:
Android 9 / Samsung Galaxy S8
Issue description:
I have a simple scene with nothing but single RichTextLabel (scroll active=true, enough text for vertical scroll bar to appear).
Exported to Android, drag scrolling only works if both "emulate touch from mouse" and "emulate mouse from touch" project settings are enabled. The obvious workaround is to just enable both settings but that causes unwanted input events that have to be ignored in my custom controls (might cause some problems elsewhere too). I assume this is not intended behavior?
Steps to reproduce:
See description.
Minimal reproduction project:
ScrollTest.zip

Just ran into this problem with the latest 4.0.3 build on Android.
The suggested workaround (enabling both "emulate" options) does not appear to work anymore.
From the behaviour, the issue seems related to the "Selection Enabled" property, as when that is enabled finger scrolling doesn't work at all anymore; but even with it disabled, it seems that the scroll events are still caught by the RichTextLabel and not passed on properly.

Still experiencing this on Godot 4.2.1 when exported Android. A possible workaround is to have big margins around the RichTextLabel to give it a draggable zone.