How to get the status of subscription and avoid subscribe screen?

Hi
This issue doesn't seem to describe a bug or a feature request. Please see https://flutter.dev/community for resources and places where you can ask questions like this.
You may also get some help if you post it on Stack Overflow and if you need help with your code, please see https://www.reddit.com/r/flutterhelp/
Closing, as this isn't an issue with Flutter itself. If you disagree, please write in the comments and I will reopen it.
Thank you


[DC-2051] removing slack messaging for exceptions

GCP monitoring is configured to monitor for warnings or higher in the application
should remove redundant messaging from the application now.
update the unit tests to expect alert removal

closing this PR since integration tests cannot run with warning in the branch name.


Fix code gen for table model deserializer

Fixes #67
Changes proposed in this pull request:

Code was not getting generated for table based model's. continue was in the wrong place.
Added tests for test serialisation and deserialisation of !table based models.

@anz-bank/sysl-developers

Great work with the coverage increase! Thanks a lot!

Great job on the coverage increase 👍
With coverage 70% you get to close #44 😉


[ 🪲 ] Navbar not optimized for smaller and medium screens

Navbar not optimized for smaller and medium screens
Description:
On the UMatter project's navbar, there is an issue when viewing the website on smaller screens. Currently, when the navbar is opened and an option is clicked, it does not automatically close. The user has to manually click the navbar button again to close it. Additionally, when the "home" button is clicked, the navbar still overlays the hero section, causing a visual overlap.
This issue affects the usability and user experience of the website on smaller and medium screens. To provide a better user experience, it would be ideal for the navbar to automatically close after selecting an option. Furthermore, the navbar should not overlay the hero section when the "home" button is clicked.
Labels: bug, enhancement

I am available to fix this issue as part of my contribution to the GirlScript Summer of Code 2023 program. Kindly assign this issue to me so that I can start working on it.
Please let me know if there are any other specific considerations or requirements for this issue.

Navbar for the smaller screens is currently being handled by someone else! what u can do is..if u see the navbar in blog page...it seems disapperaed in the dark mode..You can fix it!

You can try fixing the color..
let me know if u are willing to work on this?

@MonalikaPatnaik Yes, I would love to work on it.

Thanks..you are assigned!
Pls submit your PR soon so that we can merge it without conflicts!


Spark 2.0.2 with hadoop 2.7 support

Deploy Spark 2.0.2 package built with hadoop 2.7 support
Breaking: Due to the package layout changes we will no longer be able to deploy Spark 1.x

Waiting patiently for this feature, thanks for working on it!

Built from scratch and tested

Added environment variables to help SPARK find HADOOP_HOME and HADOOP_CONF
In addition LD_LIBRARY_PATH to support short-circuit hdfs

I created a merge conflict by merging your /home/$(whoami) --> ${HOME} fix, so if you can rebase on current master, we can merge this.

Rebased


doc update sql convertor tool to 1.0.1

Proposed changes
Issue Number: close #xxx

Further comments
If this is a relatively large or complex change, kick off the discussion at<EMAIL_ADDRESS>by explaining why you chose the solution you did and what alternatives you considered, etc...

run buildall


Spring Framework 6 / Spring Boot 3 Support?

Is Spring Framework 6 / Spring Boot 3 Supported?
I'm trying to use logbook with Spring Boot 3 - M4 (Spring MVC) and I am not getting any log output.
I know Spring Framework 6 is bringing in a lot of updates, like Tomcat 10. Does Logbook support this yet?

Hello. I'm waiting for this feature. When can be done?

done with #1467


Weights in HCUP

In the CDM_HCUP the weights need to be brought over in some fashion. OBSERVATION table.

Has been implemented


changed Preset field to slice in GetPresetsResponse

fixes: https://github.com/use-go/onvif/issues/30

For whom it may concern, I started a fork with many similar fixes.

thks for your code.


Add service log(structured request/response log) logging support with integration to Kafka

Motivation:
Typically, when we built RPC based application, the access log doesn't tell many things.
We've found it is very useful to introduce service log(strucutred fully detailed log of each request and response) with expect to various ways to utilize it:

Send RPC logs to stats environment and analize by various ways such as batch processing or stream processing to get insights of the actual usage of the service.
Trouble shotting through inspecting collected logs. It's much easy to do as everything of the "actual request and response" are contained in each entry.
Build a "shadow" environment of production cluster and replay the actual production traffic for performance testing, trouble shooting or etc.

Modifications:

Add ServiceLogLoggingService which decorates a service with enabling fully detailed request/response logging in structured format.
Add some classes as a framework to let users implement service log logging in the unified way.
Add a new module armeria-kafka which implements a backend of service log logging with integration to Kafka.

Design:
There are few points that are considred to be customizable by users in order to support various different environment and contexts.
Logging backend
There are number of middlwares which are invented to collect a logs from application instances that are located in different servers. Apache Kafka, Logstash, Fluentd are some.
As the first step this PR will add a support for Apache Kafka integration.
However, the interface which represents logging backend stay underlying middleware agnostic so users can write their own output by their own if necessary, and hopefully they might be contribute it as a module of Armeria.
Log message format
Different organization uses differnet serialization formats. Since the purpose of this PR is to introduce structured content logging, we're focusing on serialization format of structured data, but even with that, we can list many of them. JSON, Protocol buffers and Thrift are some.
JSON is an easy choice but some organizations(including us) may want to use much schema oriented serialization format such as Protocol Buffers/Thrift in order to achieve uniformed wire format across the organization, and/or much higher SerDe level capability such as constraints and schema evolution.
We may support JSON as the default in order to let users try this feature with ease, but the interface should stay open for any serializer plugin.
In fact, at this moment, I decided to let each backends to supply their own specification for serializer interface. As different backend wants different result types(byte[]? String?), I think the desired result type of serializeation should stick with each backends.
Contents of a log entry
We can predefine a information preset of each protocol-oriented request and response.
For instance, in case of Thrift RPC based application, we may wanna log the following information in general:

Thrift service name
Thrift method name
Thrift arguments
Thrift response or exception
The timestamp of when the request received
The duration taken to process the request

Those information are able to extract and construct from RequestContext and ResponseLog which are given to the decorating service, but maybe they aren't all that users want to log.
Therefore we should provide a way to customize the content of a log entry. The expected type of entry also differs among different protocols, so the log entry builder should also be a parameter of service log logging.
Working example:
Here's an example of a log output when I called ArmeriaService.hello:
./kafka-console-consumer.sh ... --topic armeria-service-log-test
{"timestampMs":1478243846990,"responseTimeMs":35,"thriftServiceName":"com.linecorp.armeria.service.core.thrift.v1.ArmeriaService","thriftMethodName":"hello","thriftCall":{"header":{"name":"hello","type":1,"seqid":0},"args":{
  "name" : "kawamuray"
}},"thriftReply":{"header":{"name":"hello","type":2,"seqid":0},"result":{
  "success" : "Hello kawamuray"
},"exception":null}}

I think this PR can be improved little bit more for following points, but let's make this a starting point and proceed discussion.

Much easier construction of a ServiceLogLoggingService with providing defaults
More docs

Current coverage is 64.74% (diff: 76.87%)

Merging #324 into master will increase coverage by 0.20%

@@             master       #324   diff @@
==========================================
  Files           318        324     +6
  Lines         12835      12982   +147
  Methods           0          0
  Messages          0          0
  Branches       1916       1924     +8
==========================================
+ Hits           8283       8405   +122
- Misses         3666       3687    +21
- Partials        886        890     +4

Powered by Codecov. Last update 73e1bb0...dcc4c9f

@imasahiro  Thanks for the review. Addressed most of your comments.

addressed or replied for second round comments but let me follow up one more commit to add more docs as I think we've agreed on base design.

@trustin  done. please have another round.

@trustin followed up by adding some defaults to users convenience. another round please :p

rebased on the latest master to resolve conflicts.

@trustin Thanks for your insightful review!

@kawamuray Thanks for your patience :-)


Release Google.Cloud.ServiceControl.V1 version 1.0.0

Changes in this release:
No API changes since 1.0.0-beta01.

Created release for Google.Cloud.ServiceControl.V1-1.0.0

Created release for Google.Cloud.ServiceControl.V1-1.0.0


feat: revision of direct trust cache

This PR removes an unnecessary obstraction layer in the direct trust default implementation.
Moreover, the implementation of the cachehas been reviewed.
For some reason, the cache tests were failing in the CI pipeline but were succesfull in a local environment. @PascalDR if you have time please check that this test
https://github.com/italia/eudi-wallet-it-python/blob/92d09884fda9596f2cd541e2941e7d1d661833ea/pyeudiw/tests/trust/default/test_direct_trust.py#L121-L144
and this test
https://github.com/italia/eudi-wallet-it-python/blob/92d09884fda9596f2cd541e2941e7d1d661833ea/pyeudiw/tests/tools/test_utils.py#L82-L119
work on your local setting.

For some reason, the cache tests were failing in the CI pipeline but were succesfull in a local environment.

We were able to reproduce the issue locally.
The tetst when run from inner folder $pyeudiw/tests/trust/default pytest, but fails when executed from project root folder $ pytest pyeudiw.
This is honeslty very unexpected. Will try to fix asap.


Remove material design and move to self-sufficient styling

I believe that self-styling and maintaining components will be better idea for long term support

This will be done together with #18


AudioDeviceChangeListener being invoked even after the AudioSwitch instance being nulled or stopped.

Describe the bug
Once the AudioSwitch listener is initialized, the method audioSwitch.start { audioDevices, selectedAudioDevice -> } keeps listening for new changes even after the audioSwitch instance is nulled or audioSwitch.stop() is called.
To Reproduce
Steps to reproduce the behavior:

Initiate the audioSwitch  instance via code and then manually reassign it to null or call audioSwitch.stop().
Run the app.
Plug a wired headset or connect a bluetooth headset to the phone.
Disconnect/unplug.
Add debug breakpoint.
See error.

Expected behavior
The audioSwitch.start { audioDevices, selectedAudioDevice -> }listener should stop listening for new changes.
Actual behavior
The audioSwitch.start { audioDevices, selectedAudioDevice -> } listener keeps listening for new changes even with audioSwitch instance is null.
AudioSwitch Version

Version: 1.1.4

Android Device (please complete the following information):

Device: Xiaomi Redmi Note 9 Pro
API Version: 30

Hi @AnonymousUserAndroid I've looked into scenario where AudioSwitch is started then stopped and I do not see any listener callbacks with Wired or Bluetooth devices after stop() has been called. Can you provide code snippet or logs with AudioSwitch.loggingEnabled = true if you are still experiencing this issue. Regarding null scenario, reassigning to null by itself after AudioSwitch is started it is not advisable and AudioSwitch.stop() should be called to close listeners/receivers and avoid memory leaks. Link


WIP: add warning for importing JSONio lib for matlab/octave

Regarding the issue #119
This a PR equivalent to the closed PR 46 but without the line ending problems
I am tempted to keep the original call to the function jsonwrite and simply add a warning if it fails with a link to the library.
Other possibility: call the bids.util.jsonencode function from the matlab-bids library which would also make sense because this is a bids related issue.
Any thought? @gllmflndn
Once we have decided I will change all the example scripts accordingly.

Thanks!!!
Are the jsonwrite/jsonread the same for the two repositories that you suggest?

Well JSONio should be enough and should cover matlab and octave and does use a function called jsonwrite
BIDS-matlab checks which library is available (spm, JSONio, built-in: in that order) and uses the relevant function with the appropriate syntax. So in practice having BIDS-matlab only as a library would only cover matlab users with a version > 2016 if I am correct.
So in that respect option JSONio only would be simpler but less "BIDSy", though I suspect we don't want users to HAVE to use more tools than they need.

I did some auto indent on matlab (ctrl + I) and it removed a bunch of trailing spaces: sorry for the confusion.
Also added some ; to suppres output to the console.
Just realized that there are some weird character encoding happening in the comments in the eeg script. Should I modify them?

This is great, thanks! @Remi-Gau is it ready to merge?

Now it is! :-)

While I am at it do you want me to take care of issue #112 ?

The last comment is 2 months old. Could this please be merged into the master?

@all-contributors please add @gllmflndn  for review, ideas


Can I change table write_mode  from "Append" to "Overwrite" dynamically ?

Which part is this question about

write_mode
Describe your question

Can I change table write_mode  from "Append" to "Overwrite" dynamically ?
Additional context

UpdateMode is an immutable option that can only be set when CREATEing table: https://github.com/CeresDB/ceresdb/blob/df18e26343da1b29bf4ab8b4f8b8570cd50515a7/analytic_engine/src/table_options.rs#L504-L511
So you cannot change this option dynamically.

tracked by #156


tags for create invitation and list connections

Signed-off-by: Luis Gomez<EMAIL_ADDRESS>

This looks good! We need a few tests. I have wanted to query the wallet with metadata in a tag. Currently, you need to query the wallet for tags like did or connection id, then call get_metadata on each connection at which point you then can filter the connections on the new metadata. Having metadata in tags will leverage the storage DB's ability to do complex queries removing the need to combine records and filter in ACA-Py. A test for this scenario would be nice.


Advice how to solve dependency errors

Thanks for contributing to fastlane! Before you submit your pull request, please make sure to check the following boxes:

[NA] Run bundle exec rspec from the subdirectory of each tool you modified. Alternatively, run rake test_all from the root directory.
[NA] Run bundle exec rubocop -a to ensure the code style is valid
[X] Read the Contribution Guidelines
[X] We currently don't accept new actions, please publish a plugin instead, more information in Plugins.md

Before submitting a pull request, we appreciate if you create an issue first to discuss the change :+1:
Advice how to solve dependency errors, i.e. bundle update

This is a great change, thanks for your contribution @GoodMirek 👍


Make encoder configurable for the compaction

This PR has some refactoring that makes the encoder configurable on the global compaction level. This is the groundwork for us to support parquet (and others) as future sink encoders. Going forward, we should also consider making encoder configurable per sink, which would allow us to encode to different formats on different sinks.

LGTM in general on first pass, big commit, need some time to look again

LGTM


Adding support for deploying to specific namespace

There two related issues that will be resolved if this is implemented:

https://github.com/Quansight/qhub-cloud/issues/100
https://github.com/Quansight/qhub-cloud/issues/115

Idea is to add a namespace key to qhub-config.yaml
project_name: asdfasdfasdf
namespace: dev
...

This will take advantage of the fact that we already have support for deploying resources in specific namespaces.
I think the controversial question is what to call the option: suggested names:

namespace my favorite
environment
prefix

+1 for namespace.


fixturn runtime filter off in invalid_stats case

What problem does this PR solve?
set "runtime_filter_mode=off" to avoid interference of runtime filter in the case "invalid_stats.groovy"
Issue Number: close #xxx
Related PR: #xxx
Problem Summary:
Release note
None
Check List (For Author)

Test

[ ] Regression test
[ ] Unit Test
[ ] Manual test (add detailed scripts or steps below)
[ ] No need to test or manual test. Explain why:

[ ] This is a refactor/code format and no logic has been changed.
[ ] Previous test can cover this change.
[ ] No code files have been changed.
[ ] Other reason

Behavior changed:

[ ] No.
[ ] Yes.

Does this need documentation?

[ ] No.
[ ] Yes.

Check List (For Reviewer who merge this PR)

[ ] Confirm the release note
[ ] Confirm test cases
[ ] Confirm document
[ ] Add branch pick label

run buildall


Prevent empty post-import script paths throwing errors.

Fixes error being thrown when the post-import script path is empty. This was caused by an oversight in #96079 since is_relative_path doesn't appear to check if a path is actually empty, and will consider an empty path relative, pointing the post import script to its containing directory.

Thanks!


Support attributes in let declaration

Is your feature request related to a problem? Please describe.
Attributes are currently not allowed in let declaration. The following snippet
let Version = *"0.0.0" | string @tag(version)
version: "\(Version)"

fails with
failed to load: missing ',' in struct literal (and 1 more errors)

Describe the solution you'd like
Supporting attributes in let declaration could be useful.
Describe alternatives you've considered
In case the request involves changes that are too substantial for little benefit,  a better error message could be a plus.
Additional context
As previously discussed,

This issue has been migrated to https://github.com/cue-lang/cue/issues/949.
For more details about CUE's migration to a new home, please see https://github.com/cue-lang/cue/issues/1078.


Invalid connection, please update your connection to load complete details

Describe the Bug with repro steps
When using the new Logic App Generally Available Designer, I get the following error message on the custom ApiConnection:
"Invalid connection, please update your connection to load complete details"
The Change Connection link is available, but when I click on it, an empty pop-up appears, even though there are other connections to select from.
The Logic App works OK if I trigger it as is. However, I cannot make any changes and save them, because of the connection error message.
The error message is not there if I switch to the Legacy Designer. That is a very temporary workaround though, because the Legacy Designer won't be available from September 2024 onwards.
What type of Logic App Is this happening in?
Consumption (Portal)
Are you using new designer or old designer
New Designer
Did you refer to the TSG before filing this issue? https://aka.ms/lauxtsg
Yes
Workflow JSON
No response
Screenshots or Videos
No response
Browser
Chrome, Edge
Additional context
No response

Can you give us anymore information about your workflow? What actions this happening on? Which connections? Do you have RBAC access to everything?
We're going to need more information to investigate what's going on here.

The Logic App is very simple with only a very few steps.  One of the action items is to send an HTTP request to an on-prem web API endpoint.  For that step we use a Logic App Custom Connector that we have created which sends the request via on-premises data gateway.
The connection error is evident on that particular action.
I have contributor access to the logic app, the connection and to the data gateway, but I am not an admin.
This error is present even when the azure admins go to the new Logic App designer for this app.

Also, I wanted to mention that if I make a change and try to save it, I am getting this error:
Workflow Serialization Error

Getting the same issue - Invalid connection, please update your connection to load complete details, then error is Workflow Serialization Error.  This is real, folks.  Microsoft broke something again, and does not give their customers a good way to fix it.

@jmancevska @pgferrero - We have identified and fixed this issue, it should be in production by 09/09

@preetriti1 - We still experience the connection issue today on Sep 10-th.

Still getting this error on Service Bus connection, blob is working fine

@pgferrero, @simenums, @sajid08,
My team had a working session with the Microsoft technical team, where we shared logs and more details around this error.  The Microsoft team found out what the issue was and provided a workaround for our particular case.
They will be publishing the fix to production hopefully in near future.
I will do another post here, and you will be able to check if your issues got resolved with that fix.

Thanks @pgferrero , yes if you can please let me know that work around in the mean time, that'd be great!

@sajid08, the workaround is not something that we did.  It was done on the Microsoft side.


Not a supported wheel on this platform

I'm trying to install the pip package for Fold according to the instructions, but I'm getting an error saying that it's not supported. I'm running this in Virtualenv on OSX El Capitan version 10.11.3.
(python3_env) dhcp-wifi-8021x-155-41-72-88:~ ch3njust1n$ sudo -H pip install https://storage.googleapis.com/tensorflow_fold/tensorflow_fold-0.0.1-py3-none-linux_x86_64.whl
tensorflow_fold-0.0.1-py3-none-linux_x86_64.whl is not a supported wheel on this platform.

 We can only provide pre-built binaries for linux (as we say in the first line of the instructions), unfortunately, and cannot provide support for any other OSes. If you can get Fold to build from sources under OSX we'd love a pull request :).


Setup scripts

Removed install.sh (switching to up.sh)
Added usage and parse functions in utils.sh
Fixed Docker issues with environment
Fixed Github CI to match latest changes to installation

Signed-off-by: Dimitris Karnikis<EMAIL_ADDRESS>

Merging to main


Event to command?

Hello, I'm playing with this framework and I was wondering if there is anything like an "event to command" behavior builtin, or any other mechanism devised to let me handle a WPF control's event in the viewmodel (e.g. a Navigating event in a WebBrowser control).

Thanks, I like the lightweight approach of this framework, hope to see it grow (have you considered integrating it in https://github.com/Microsoft/WindowsTemplateStudio?).
I'd have some more questions, arising from a toy app I'm developing to put Codon at work with a realistic example. I try to list a couple of them here, maybe these are useful hints for newcomers:

a typical "debounce" scenario in a bound TextBox. Outside of a RX-based solution, I can use helpers like this: https://weblog.west-wind.com/posts/2017/jul/02/debouncing-and-throttling-dispatcher-events. Yet, how could I insert this in a data binding between view and viewmodel? A trivial workaround would be just handling the KeyUp event of the TextBox in the view, debounce, and set the corresponding VM property, like this:

private void Search_KeyUp(object sender, KeyEventArgs e)
{
    _debounceTimer.Debounce(500, _ =>
    {
        ViewModel.Browser.SearchText = ((TextBox)sender).Text;
    });
}

Yet, this would effectively make the data flow 1-way, from the control to the VM, but not vice-versa, as there is no effective data binding but just an event, which after debouncing triggers a change in the VM. Which approach would you recommend here?

composing views like in more complex framework. This is probably asking too much from a lite framework. Anyway, say I have a typical list-and-details UI, where a VM represents a list, and another one the details of a selected item. Each has its logic incapsulated in its own VM and the VMs communicate via messaging (e.g. the list VM publishes a "selected" message and the details VM handles it). Now, I must compose these VMs into a unit: I can just add a third, "shell" VM including an instance of both, and a corresponding view bound to this shell VM. This is OK, but of course forces me to design a single UI for two different VMs. Or is there any better approach?

You could use the Delay property of the Binding in WPF, as @RickStrahl demonstrated in his article.
As you mention though, with a two-way binding your source may update the target when there is a pending update from the target.

The way I usually do that is to define a Codon.UIModel.ICompositeViewModel. That way you can get some support for navigation events (child view-models can cancel navigation) and state. Though I don't much use the state support these days. The way that I've used the composite support for navigation is within tabbed interfaces; when navigating away from the view, the view-model for each tab has the opportunity to cancel the navigation.

Thanks, your answers were extraordinarily quick, and very useful!

You're welcome.


sample to generate linux binary using .travis.yml

it will be nice to have automation inside the repo to generate binary automatically like using  .travis-ci.yaml, therefore it can also be a binary release.
Or someone had clear instruction on how to build binary from base ubuntu 18.04
As an end-user, I want to have a linux binary to analyse my hand card.

I try to use it in python env, but always get memory issues
$ docker run -it -v $PWD:/dds -w dds ubuntu:bionic
# apt-get update
# apt-get install -y g++ make git libboost-all-dev libomp-dev
# cd src
# make -f Makefiles/Makefile_linux_shared
# python3 -c 'from ctypes import *;import os; dll = CDLL(os.path.abspath("libdds.so"));'
Memory::GetPtr: 0 vs. 0
Memory::GetPtr: 0 vs. 0

By using the patch of my pull request (with help from anntzer/redeal), it works now.


perf: use function pointers

Codecov Report

Merging #100 (3561b5e) into main (d0e5be1) will decrease coverage by 0.02%.
The diff coverage is 0.00%.

@@            Coverage Diff             @@
##             main     #100      +/-   ##
==========================================
- Coverage   67.00%   66.98%   -0.03%
==========================================
  Files         115      115
  Lines        4671     4673       +2
==========================================
  Hits         3130     3130
- Misses       1541     1543       +2

Impacted Files
Coverage Δ

sources/libs/brutal/gfx/buf.h
0.00% <0.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update d0e5be1...3561b5e. Read the comment docs.


feat: Calculate view jump based on high_qc updated_at time

This PR should wait for https://github.com/Zilliqa/zq2/pull/1825 to be merged.

closed in favour of https://github.com/Zilliqa/zq2/pull/1835


[Metadata] Document our Metadata Format

Currently this is the only information in the docs wrt our metadata format: https://paritytech.github.io/ink-docs/getting-started/building-your-contract/.
We should have a dedicated section which explains the format and its intention in more depth. Ideally we would have a typical foo.contract and just explain every key-value pair.

Just noticed that the metadata example code in the page linked above is outdated as well, this example JSON should be updated as part of this ticket as well.

already documented https://use.ink/basics/metadata


remove more tailing spaces

last one :)

Like the other one - a change that was pending at the time you pushed this conflicted :)

Hello @nyeholt ,
I did this one again, it was just quicker than rebasing. Please have a look and let me know if you are happy with this.
Cheers


[TEVA-2493] Change validation of format of TRN field

Jira ticket URL
https://dfedigital.atlassian.net/browse/TEVA-2493
Screenshots of UI changes:

Review app deployed to https://teaching-vacancies-review-pr-3345.london.cloudapps.digital


Conditional and multivalued key block

Describe the problem
I'm currently working on a table that updates based on a customer supplied refresh rate. Some of the values always change, some rarely change, and every so often they change at the same time. There also seems to be about a 50/50 split on who thinks the animations are nice. It'd be nice to supply the {#key} with a boolean value that would determine whether or not the block could be ignored. It'd also be nice to only use the {#key} block if multiple variables were changed.
Describe the proposed solution
For a conditional it seems like {#key var1 if true/boolean statement} would be the easiest route.
For multiple variables something like {#key (var1 && var2)} and {#key (var1 || var2)} or {#key (var1 and var2)} and {#key (var1 or var2)}
Alternatives considered
Currently, to do multiple variables, you have to nest {#key} blocks which even after one gets annoying. Somehow {#key [var1 || var2]} seems to get the job done for updating when either/or variable is updated, but that's definitely not an ideal way to go about it.
The only other way I can think of how to do this with the current setup is this:
{#if [statement]}
  {#key var}

...

  {/key}
{:else}

...

{/if}

Importance
would make my life easier
Additional Information
No response

Wrote this in the wrong tab and needs to be in the svelte repo issues.


Add Coursera courses into lab docs

Several of you have been taking Coursera courses. If you've found good courses for others to consider taking (either Coursera or elsewhere), comment here or add them directly to lab-docs (probably in the programming or data science sections). I'm not sure who has been actively using Coursera, but I'm tagging: @javiergcas @ryesaam & @IsabelF98

Machine Learning Foundations: A Case Study Approach by University of Washington (recommended to me by Javier)

explains basic machine learning concepts using GraphLab (must install Turicreate instead*)

https://www.coursera.org/programs/data-science-machine-learning-yskdy?currentTab=CATALOG


[crashlytics]: Building iOS not possible

  firebase_core: ^1.0.1
  firebase_crashlytics: ^1.0.0

Same configuration works for android without problems

And no this: https://github.com/FirebaseExtended/flutterfire/issues/3272 didn't help because I use the very latest versions...

Hi @Ahmadre
Please take a look at https://github.com/FirebaseExtended/flutterfire/issues/5284 https://github.com/FirebaseExtended/flutterfire/issues/5059
The issue seems to be caused by something in Xcode cache that previously people have been able to solve by just replacing the ios directory with a new one created with swift.
You can still try to run these commands first in your ios console
rm -rf Pods
rm -rf Podfile.lock
rm -rf ~/.pub-cache/hosted/pub.dartlang.org/
pod cache clean --all
flutter clean
flutter pub get
pod repo update
pod install

If they do not fix it try to see if the dependencies work on a new flutter create project and if they do just do the same thing and replace the ios directory.
As you have provided none of the information in the template I'm going to close this issue. If the mentioned steps do not work please open a new issue and provide all of the details in the template and refrain from using screenshots, as they make referencing the error message impossible (just provide your build logs).
Thank you

Hi @Ahmadre
Please take a look at https://github.com/FirebaseExtended/flutterfire/issues/5284 https://github.com/FirebaseExtended/flutterfire/issues/5059
The issue seems to be caused by something in Xcode cache that previously people have been able to solve by just replacing the ios directory with a new one created with swift.
You can still try to run these commands first in your ios console

rm -rf Pods

rm -rf Podfile.lock

rm -rf ~/.pub-cache/hosted/pub.dartlang.org/

pod cache clean --all

flutter clean

flutter pub get

pod repo update

pod install

If they do not fix it try to see if the dependencies work on a new flutter create project and if they do just do the same thing and replace the ios directory.
As you have provided none of the information in the template I'm going to close this issue. If the mentioned steps do not work please open a new issue and provide all of the details in the template and refrain from using screenshots, as they make referencing the error message impossible (just provide your build logs).
Thank you

Already saw and tried these steps. Guess what the issue was?
You had to put your iOS Pods inside the:
target Runner do
  Pod 'Firebase/Core'
...

That solved my errors

Here: https://pub.dev/packages/firebase_crashlytics
and here: https://pub.dev/packages/firebase_core
and here: https://pub.dev/packages/firebase_auth
and here: https://pub.dev/packages/firebase_storage
and here: https://pub.dev/packages/firebase_messaging

Sorry if it came off as judging, that was not my intention. We simply close issues that do not provide the information indicated in the template as they are lacking critical information (such as flutter version, a complete list of packages, etc).
As for the documentation. There is a dedicated website with detailed steps for general setup and for setup for all of the specific packages at https://firebase.flutter.dev/docs/overview If you think the documentation is lacking then please open a documentation issue and recommend the changes you wish to see.
As this issue seems to be exceedingly rare (I've never been able to reproduce this) and for most users the packages work without such a workaround there has not been a request yet to add anything regarding this to the documentation.

Sorry if it came off as judging, that was not my intention. We simply close issues that do not provide the information indicated in the template as they are lacking critical information (such as flutter version, a complete list of packages, etc).
As for the documentation. There is a dedicated website with detailed steps for general setup and for setup for all of the specific packages at https://firebase.flutter.dev/docs/overview If you think existing lack of documentation is a serious issue and makes developing a mess then please open a documentation issue and recommend the changes you wish to see.
As this issue seems to be exceedingly rare (I've never been able to reproduce this) and for most users, the packages work without such a workaround there has not been a request yet to add anything regarding this to the documentation.

 I never saw that page before, so sorry If I was too harsh, I was just upset because I really fought with Firebase configuration since Flutter was released in Dec. 2019. But you're right, I had to look deeper into the official page rather then searching on github and stackoverflow.


smack-userspace: bump to version 1.2.x

This new version includes some minor evolutions:

chsmack:

print error message if obtaining access label fails
add recursive option

libsmack:

add function for configuring relabel-self interface
Support filesystems that don't fill in d_type

smackcipso:

improved help

Change-Id: I77e16c68182b60d51ddcabdc72fd3105e260bffc
Signed-off-by: José Bollo<EMAIL_ADDRESS>

Can one of the admins verify this patch?


Add LICENSE file to emotion package

https://github.com/rebassjs/rebass/issues/588

Thanks! Any idea if a symlinked file works for publishing? This isn't too much duplication, but just curious how best to handle this in projects that don't use Lerna

sounds like a good idea, but I don't have experience with that, so can't say.

No worries! I'll go ahead and merge this and try it out locally. Thanks!


Rename *README.md to README.md

Removed asterisk because it may be causing issues on some systems

Thank your for jumping on this.


Set the views/reposts/loves count appropriately

In grid view, the following changes:

iphone5 / 4" is too small for any more numbers, so no change
iphone6 / iphone6+ is large enough for more numbers, but large numbers are more truncated

@caseydoran, did you see @colinta's notes above?

@caseydoran I can post screenshots if that makes it clearer, too.

Code looks good. I'll let @caseydoran give it a 👍 as far as hiding/showing the numbers.

@colinta can we get some screenshots? Thanks!

@caseydoran
iPhone 5

iPhone 6

@BergerFohr You wanna check this out, too?


Forecasting the Unknown

Hello, let me preface this by saying thanks to you and your team for the great work, congratulations.
I am a student experimenting with time series forecasting using deep learning methods. Following experimentation, I have noticed that forecasts are not future/ unknown timestamps rather of timestamps that are already in the data. As can be seen in the image, the actual values are set to 0 and the prediction is able to quite accurately predict those timestamps.

The timeseries_data.csv used for this is synthetic, following a  predictable path. Observations have a 1 hour interval  with the first observation occurring at 01/01/2012 00:00 and last observation in the data occurring 04/14/2012 03:00, with a total of 2500 observations.
My code (seen bellow) is based off of an IBM tutorial. In the IBM tutorial it is also visible that the forecast is not predicting future timestamps rather the actual values are being set to 0.
import os
import math
import tempfile
import torch
from torch.optim import AdamW
from torch.optim.lr_scheduler import OneCycleLR
from transformers import EarlyStoppingCallback, Trainer, TrainingArguments, set_seed
import numpy as np
import pandas as pd

# TSFM libraries
from tsfm_public.models.tinytimemixer import TinyTimeMixerForPrediction

timestamp_column = "date"
target_columns = ["y"]
observable_columns = ["x"]

pollution_data = pd.read_csv(
    os.path.join("data","timeseries_data.csv"),
    parse_dates=[timestamp_column],
)

### ### ## ## # #
# Prepare the Data
### ### ## ## # #
SEED = 42
set_seed(SEED)

# Results dir
OUT_DIR = "ttm_finetuned_models/"

# Forecasting parameters
context_length = 512 # TTM can use 512 time points into the past
forecast_length = 96 # TTM can predict 96 time points into the future

from tsfm_public import (
    TimeSeriesPreprocessor,
    TinyTimeMixerForPrediction,
    TrackingCallback,
    count_parameters,
    get_datasets,
)

data_length = len(pollution_data)

train_start_index = 0
train_end_index = round(data_length * 0.8)

# we shift the start of the evaluation period back by context length so that
# the first evaluation timestamp is immediately following the training data
eval_start_index = round(data_length * 0.8) - context_length
eval_end_index = round(data_length * 0.9)

test_start_index = round(data_length * 0.9) - context_length
test_end_index = data_length

split_config = {
                "train": [0, train_end_index],
                "valid": [eval_start_index, eval_end_index],
                "test": [test_start_index,test_end_index],
            }

# configure a TimeSeriesPreprocessor instance to scale our values to a normalized scale
column_specifiers = {
    "timestamp_column": timestamp_column,
    "target_columns": target_columns
    # "observable_columns": observable_columns
}

tsp = TimeSeriesPreprocessor(
    **column_specifiers,
    context_length=context_length,
    prediction_length=forecast_length,
    scaling=True,
    encode_categorical=True,
    scaler_type="standard",
)

# this gets torch vectors for training. For test eval we need a Pandas DF
train_dataset, valid_dataset, test_dataset = get_datasets(
    tsp, pollution_data, split_config
)

### ### ## ## # #
# Load and Evaluate
### ### ## ## # #
zeroshot_model = TinyTimeMixerForPrediction.from_pretrained("ibm/TTM", revision="main", prediction_filter_length=50)  #Actual length in the prediction output to use for loss calculations.

# zeroshot_trainer
zeroshot_trainer = Trainer(
    model=zeroshot_model,
)

zeroshot_trainer.evaluate(test_dataset)  #note that this is the Torch dataset created by get_datasets(), not a Pandas DataFrame

### ### ## ## # #
# Forecasting
### ### ## ## # #

from tsfm_public.toolkit.util import select_by_index
from tsfm_public.toolkit.time_series_forecasting_pipeline import TimeSeriesForecastingPipeline
from tsfm_public.toolkit.visualization import plot_ts_forecasting

zs_forecast_pipeline = TimeSeriesForecastingPipeline(
    model=zeroshot_model,
    device="cpu",
    timestamp_column=timestamp_column,
    id_columns=[],
    target_columns=target_columns,
    freq="1h"
)

zs_forecast = zs_forecast_pipeline(tsp.preprocess(pollution_data[test_start_index:test_end_index]))

fcast_df = pd.DataFrame({"pred":zs_forecast.loc[50]['y_prediction'], "actual":zs_forecast.loc[50]['y'][:50]})
# The use of 50 here has to do with the prediction_filter_length=50 set above.
# Seen in the PredictionResults.csv there is an array of 50 predictions. Actual values are stored in an array of forecast_length
# Hence the reason it is necessary to truncate the "actual" to 50
# The shape of the csv file is 1743 entries long. I believe this is directly related to the Test Split of 10%

# fcast_df = pd.DataFrame({"pred":zs_forecast['y_prediction'], "actual":zs_forecast['y']})
export_df = pd.DataFrame({"pred":zs_forecast['y_prediction'], "actual":zs_forecast['y']})
export_df.to_csv("Prediction Results.csv")
# fcast_df.plot()

# print(zs_forecast['y_prediction'])

print(zs_forecast.head)
print(zs_forecast['y_prediction'].shape)
print(zs_forecast['y'].shape)

### ### ## ## #
# Compare
### ### ## ## #
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt

def compare_forecast(forecast, date_col, prediction_col, actual_col, hours_out):
  comparisons = pd.DataFrame()
  comparisons[date_col] = forecast[date_col]
  actual = []
  pred = []

  for i in range(len(forecast)):
    pred.append(forecast[prediction_col].values[i][hours_out - 1]) # prediction for next day
    actual.append(forecast[actual_col].values[i][hours_out - 1])

  comparisons['actual'] = actual
  comparisons['pred'] = pred

  return comparisons

one_day_out_predictions = compare_forecast(zs_forecast, "date", "y_prediction", "y", 24)
# value has to be less than either forecast_length or prediction_filter_length

out = one_day_out_predictions[[not np.isnan(x).any() for x in one_day_out_predictions['actual']]]

rms = '{:.10f}'.format(mean_squared_error(one_day_out_predictions['actual'], one_day_out_predictions['pred'], squared=False))

ax = one_day_out_predictions.plot(x="date", y=["pred", "actual"], figsize=(20, 5), title=str(rms))
plt.savefig('one_day_forecast_comparison.png', bbox_inches="tight")
plt.close()

Hence, my question is whether it is possible to forecast timestamps that aren't in the data set and if so how.  I have gone through the notebooks in this repo alongside other resources but haven't been able to figure it out.
Please advise.
Thanks, Jack.

Hi @Jackwannsee, I am not a maintainer of this library, but I did write a couple of notebooks for making forward predictions using it. Please let me know if you find them useful.
Energy Demand Forecasting - Basic Inference
Preprocessing and Performance Evaluation

@Jackwannsee Indeed -- many of the notebooks are focussed on prediction of timestamps in the test dataset. This is done so that we can view and evaluate the performance of the model (i.e. make some comparison to ground truth data).
The two notebooks @fayvor pointed out show how to use the forecasting pipeline to produce forecasts for the future timestamps.

Thank you for your responses.
@fayvor I have run your notebooks locally using my synthetic dataset and was able to get the results I desired as outlined in my initial comment.
Following further exploration I have a few more questions:

The versions installed in both notebooks differ v0.2.10 & v0.2.9. Additionally, originally I used v0.2.8.  Is it advisable to stick to the newest version that currently being v0.2.10?
In this tutorial notebook fine tuning is used, is it possible to use the notebooks @fayvor sent to perform similar forecasting on unknown timestamps. I have attempted to do so but am encountering problems.
Not so much a question rather an issue I encountered. Running the above fine tuning notebook locally on my windows machine using PowerShell I get the following error message. Important to note is that I have run it on a UNIX system without any problems.

(.venv) PS C:\Users\z0050j3w\Documents\Code\TTM\V0.2.10> python .\fine-tuning.py
Data lengths: train = 1, validate = 667, test = 667
Number of params before freezing backbone 805280
Number of params after freezing the backbone 289696
Using learning rate = 0.001
  0%|                                                                                | 0/50 ata lengths: train = 1, validate = 667, test = 667
Number of params before freezing backbone 805280
Number of params after freezing the backbone 289696
Using learning rate = 0.001
  0%|                                                                                | 0/50 raceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\z0050j3w\.pyenv\pyenv-win\versions\3.10.11\lib\multiprocessing\spawn.py", line 116, in spawn_main
    exitcode = _main(fd, parent_sentinel)
  File "C:\Users\z0050j3w\.pyenv\pyenv-win\versions\3.10.11\lib\multiprocessing\spawn.py", line 125, in _main
    prepare(preparation_data)
  File "C:\Users\z0050j3w\.pyenv\pyenv-win\versions\3.10.11\lib\multiprocessing\spawn.py", line 236, in prepare
    _fixup_main_from_path(data['init_main_from_path'])
  File "C:\Users\z0050j3w\.pyenv\pyenv-win\versions\3.10.11\lib\multiprocessing\spawn.py", line 287, in _fixup_main_from_path
    main_content = runpy.run_path(main_path,
  File "C:\Users\z0050j3w\.pyenv\pyenv-win\versions\3.10.11\lib\runpy.py", line 289, in run_path
    return _run_module_code(code, init_globals, run_name,
  File "C:\Users\z0050j3w\.pyenv\pyenv-win\versions\3.10.11\lib\runpy.py", line 96, in _run_module_code
    _run_code(code, mod_globals, init_globals,
  File "C:\Users\z0050j3w\.pyenv\pyenv-win\versions\3.10.11\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "C:\Users\z0050j3w\Documents\Code\TTM\V0.2.10\fine-tuning.py", line 176, in <module>
    finetune_forecast_trainer.train()
  File "C:\Users\z0050j3w\Documents\Code\TTM\V0.2.10\.venv\lib\site-packages\transformers\trainer.py", line 2052, in train
    return inner_training_loop(
  File "C:\Users\z0050j3w\Documents\Code\TTM\V0.2.10\.venv\lib\site-packages\transformers\trainer.py", line 2345, in _inner_training_loop
    for step, inputs in enumerate(epoch_iterator):
  File "C:\Users\z0050j3w\Documents\Code\TTM\V0.2.10\.venv\lib\site-packages\accelerate\data_loader.py", line 547, in __iter__
    dataloader_iter = self.base_dataloader.__iter__()
  File "C:\Users\z0050j3w\Documents\Code\TTM\V0.2.10\.venv\lib\site-packages\torch\utils\data\dataloader.py", line 440, in __iter__
    return self._get_iterator()
  File "C:\Users\z0050j3w\Documents\Code\TTM\V0.2.10\.venv\lib\site-packages\torch\utils\data\dataloader.py", line 388, in _get_iterator
    return _MultiProcessingDataLoaderIter(self)
  File "C:\Users\z0050j3w\Documents\Code\TTM\V0.2.10\.venv\lib\site-packages\torch\utils\data\dataloader.py", line 1038, in __init__
    w.start()
  File "C:\Users\z0050j3w\.pyenv\pyenv-win\versions\3.10.11\lib\multiprocessing\process.py", line 121, in start
    self._popen = self._Popen(self)
  File "C:\Users\z0050j3w\.pyenv\pyenv-win\versions\3.10.11\lib\multiprocessing\context.py", line 224, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
  File "C:\Users\z0050j3w\.pyenv\pyenv-win\versions\3.10.11\lib\multiprocessing\context.py", line 336, in _Popen
    return Popen(process_obj)
  File "C:\Users\z0050j3w\.pyenv\pyenv-win\versions\3.10.11\lib\multiprocessing\popen_spawn_win32.py", line 45, in __init__
    prep_data = spawn.get_preparation_data(process_obj._name)
  File "C:\Users\z0050j3w\.pyenv\pyenv-win\versions\3.10.11\lib\multiprocessing\spawn.py", line 154, in get_preparation_data
    _check_not_importing_main()
  File "C:\Users\z0050j3w\.pyenv\pyenv-win\versions\3.10.11\lib\multiprocessing\spawn.py", line 134, in _check_not_importing_main
        An attempt has been made to start a new process before the
        current process has finished its bootstrapping phase.

        This probably means that you are not using fork to start your
        child processes and you have forgotten to use the proper idiom
        in the main module:

            if __name__ == '__main__':
                freeze_support()
                ...

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce an executable.
  0%|                                                                                | 0/50
[00:00<?, ?it/s]

Please note that my script that resulted in this error message is not 1:1 with the original notebook, if necessary (which I don't believe is the case) I can provide this code.
All the best,
Jack

Hi @Jackwannsee,
I'll do my best to answer your questions, but @wgifford will probably have additional insight.

I just tested the Getting Started recipe with v0.2.10 and it fails on running the forecasting pipeline. But for new development you should definitely use v0.2.10, as that is the version we are currently writing recipes for.
We are working on a Fine-tuning recipe that shows forward-prediction. It's currently in a branch, so take it with the caveat that it is under development, but you may find it useful. It is being developed on v0.2.10.
I see that the error suggests that the code is not using fork to start the child process. My guess here is that the Windows process management is different enough to require some extra hand-holding in the code. I would leave that to the maintainers to decide whether they want to support Windows. Until then, it would be best to keep to Unix/MacOS.

I hope this helps!

@fayvor Thank you for your answer!
Following your response I will focus on using v0.2.10 and Unix.
Im excited to see what the future holds with regard to fine tuning as I am planning to write my thesis on the topic of Time Series Forecasting.
All the best,
Jack

Until then, it would be best to keep to Unix/MacOS.
My recommendation for a Windows user would be to use Microsoft's really excellent WSL subsystem for for Linux. It integrates extremely well with vscode too. It gives you a near native Linux experience on Windows (with nvidia driver support too if you want it).

See
https://learn.microsoft.com/en-us/windows/wsl/install
https://code.visualstudio.com/docs/remote/wsl

@Jackwannsee Just checking in -- were you able to resolve the error? You may need to add a section in your script like:
if __name__ == "__main__":
    # ... call main code

@wgifford Thanks for checking in! I have a working script running on a windows OS using a python virtual environment using v0.2.10. My script is only producing zero-shot results, I haven't experimented with fine-tuning of covariates.  For anyone interested the following code tests several different forecast lengths with the two available models (R1&R2) and their context lengths(512,1024,1536).  The purpose of this is to produce a forecast that can be compared to the actual values from the data to then produce metrics to determine which model may be better for your dataset.
NOTE: The code is messy but I hope it could potentially help someone to get started...
from tsfm_public import (
    TinyTimeMixerForPrediction,
    TimeSeriesForecastingPipeline,
    TimeSeriesPreprocessor,
)
import os
import pandas as pd
from datetime import timedelta

DATA_PATH = None # Replace None with path to the dataset you are working with
OUTPUT_PATH = None # Replace None with the path where results are to be stored

timestamp_column = "Timestamp"  # String of time feature from pandas df
target_columns = ["ChgSG43-PwrActv"]  # List containing string containing target feature from pandas df
target_column = 'ChgSG43-PwrActv' # string of target feature from pandas df
frequency = '15min'

context_lengths = [512,1024,1536]  # Check hugging face documentation
prediction_length = 96

models = [
    ("ibm-granite/granite-timeseries-ttm-r1", "main", "TTM R1 cl=512"),
    ("ibm-granite/granite-timeseries-ttm-r1", "1024_96_v1", "TTM R1 cl=1024"),
    ("ibm-granite/granite-timeseries-ttm-r2", "main", "TTM R2 cl=512"),
    ("ibm-granite/granite-timeseries-ttm-r2", "1024-96-r2", "TTM R2 cl=1024"),
    ("ibm-granite/granite-timeseries-ttm-r2", "1536-96-r2", "TTM R2 cl=1536"),

    ("ibm-granite/granite-timeseries-ttm-r2", "1024-192-r2", "TTM R2 cl=1536"),
]

column_specifiers = {
    "timestamp_column": timestamp_column,
    "id_columns": [],
    "target_columns": target_columns,
    "control_columns": [],
}

input_df = pd.read_csv(
    DATA_PATH,
    parse_dates=[timestamp_column]
)

# Drop the last 96 timestamps, so that you can test how well the model performs using metrics such as RMSE or MSE
df_actual_values = input_df[[target_column]].tail(prediction_length)
input_df.drop(input_df.tail(prediction_length).index, inplace=True)

# Looping the model with different parameters
for model in models:
    # Logic to select context length
    context_length = None
    if model == models[0] or model == models[2]:
        context_length = 512
    elif model == models[1] or model == models[3]:
        context_length = 1024
    elif model == models[4]:
        context_length = 1536

    tsp = TimeSeriesPreprocessor(
        **column_specifiers,
        context_length=context_length,
        prediction_length=prediction_length,
        scaling=False,
        scaler_type="standard",
    )

    zeroshot_model = TinyTimeMixerForPrediction.from_pretrained(
        model[0],
        revision= model[1],
        num_input_channels=len(target_columns) # Number of input columns.
    )

    pipeline = TimeSeriesForecastingPipeline(
        zeroshot_model,
        device="cpu", # Specify your local GPU or CPU.
        feature_extractor=tsp,
        inverse_scale_outputs=False
    )

    historical = input_df.iloc[-context_length:].copy()
    zeroshot_forecast = pipeline(historical) # Make a forecast on the target column given the input data.

    # The following code isn't pretty but it works \_O_/
    # Because output format is a dictionary the following code is used to transform into a pandas df
    initial_date = pd.to_datetime(zeroshot_forecast[timestamp_column][0]) # Extract the initial date
    y_prediction_list = str(zeroshot_forecast[f'{target_column}_prediction'][0]).replace('[', '').replace(']', '').split() # Extract y_prediction and clean up the formatting
    y_prediction_list = [x.rstrip(',') for x in y_prediction_list]
    y_prediction = list(map(float, y_prediction_list))
    new_timestamps = [initial_date + pd.to_timedelta(frequency) * (i + 1) for i in range(len(y_prediction))]

    forecasting_results = pd.DataFrame({
        'date': new_timestamps,
        'forecast': y_prediction
    })

    df_actual_values.reset_index(drop=True, inplace=True)
    forecasting_results["actual"] = df_actual_values[target_column]
    forecasting_results = forecasting_results.rename(columns={'date': timestamp_column})
    # change this path to suit your working environment. ALSO import os
    forecasting_results.to_csv(os.path.join(OUTPUT_PATH, " f"forecasting_results_{model[0][-2:]}_{context_length}.csv"))
    historical[timestamp_column] = pd.to_datetime(historical[timestamp_column])

    print("\nData Set:", DATA_PATH)
    print("Context Length", context_length)
    print("Forecast Horizon", prediction_length)
    print("Mean Squared Error: ", mse(forecasting_results["actual"], forecasting_results["forecast"]))
    # For MSE calculations you can import "from sklearn.metrics import mean_squared_error" OR write your own function


upgrade polymer

to 0.8
maybe wait until it's a little more mature

May 6, 2015 ... We've just tagged the 0.9.0-rc of the Polymer library, and will be releasing it as a proper 0.9 in about a week. Make sure to get ready for the change!
https://blog.polymer-project.org/

Wow 0.9 already, thanks!

useful tutorial
https://github.com/johnthad/Polymer-N-10

And now 1.0 is the latest release ;-)

@akuckartz thanks, good post here on the state of web components:
https://hacks.mozilla.org/2015/06/the-state-of-web-components/


python setup.py py2app failing with AssertionError in build_app.py create_binaries() on KIVY app

import sys
import ez_setup
from setuptools import setup
ez_setup.use_setuptools()

APP = ['my_app.py']
APP_NAME = 'MyApp'
PACKAGE = 'windows'  # Root Folder of required python files
DATA_FILES = []
OPTIONS = {
    'argv_emulation': True,
    'plist': {
        'CFBundleName': APP_NAME,
        'CFBundleDisplayName': APP_NAME,
        'CFBundleGetInfoString': "TBD",
        'CFBundleVersion': "0.1.0",
        'CFBundleShortVersionString': "0.1.0"
    }
}

if sys.platform == 'darwin':
    extra_options = dict(
        options={'py2app': OPTIONS},
        setup_requires=['py2app', 'kivy'],
    )
elif sys.platform == 'win32':
    extra_options = dict(
        options={'py2exe': OPTIONS},
        setup_requires=['py2exe', 'kivy'],
    )

setup(
    name=APP_NAME,
    app=APP,
    data_files=DATA_FILES,
    package=PACKAGE,
    **extra_options
)

And I get the Errors:
File "/usr/local/Cellar/python/2.7.12_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/usr/local/lib/python2.7/site-packages/py2app/build_app.py", line 659, in run
    self._run()
  File "/usr/local/lib/python2.7/site-packages/py2app/build_app.py", line 865, in _run
    self.run_normal()
  File "/usr/local/lib/python2.7/site-packages/py2app/build_app.py", line 959, in run_normal
    self.create_binaries(py_files, pkgdirs, extensions, loader_files)
  File "/usr/local/lib/python2.7/site-packages/py2app/build_app.py", line 1214, in create_binaries
    platfiles = mm.run()
  File "/usr/local/lib/python2.7/site-packages/macholib/MachOStandalone.py", line 138, in run
    if node.rewriteLoadCommands(changefunc):
  File "/usr/local/lib/python2.7/site-packages/macholib/MachO.py", line 109, in rewriteLoadCommands
    if header.rewriteLoadCommands(*args, **kw):
  File "/usr/local/lib/python2.7/site-packages/macholib/MachO.py", line 312, in rewriteLoadCommands
    data = changefunc(filename)
  File "/usr/local/lib/python2.7/site-packages/macholib/MachOStandalone.py", line 129, in changefunc
    rv = changemap.get(mm.locate(mm.trans_table.get((node.filename, path))))
  File "/usr/local/lib/python2.7/site-packages/macholib/MachOStandalone.py", line 23, in locate
    newname = super(FilteredMachOGraph, self).locate(filename, loader)
  File "/usr/local/lib/python2.7/site-packages/macholib/MachOGraph.py", line 42, in locate
    assert isinstance(filename, (str, unicode))
AssertionError

You know I believe this is the nature of what is required for a Kivy app to work. I'll attempt with something more basic and investigate further. I may be able to close this issue.

Ciao. I'm getting the very same error with py2app and macholib and am at a bit of a loss. Have you made any progress with this?

Hi, how Can I uninstall it? Thanks
Also I would install official version, what do you think about?


Add localisation support

Summary
We'd like the app to work in different languages, eventually, so that SHIFT will be accessible to multiple audiences.
To set this up, we need to stop hardcoding copy strings in the components themselves, but refer to keys. We should use react-i18next for this: https://react.i18next.com/.
Approach

[ ] Install i18n support
[ ] Initialise i18n in main, before React app is rendered
[ ] Move strings to English resource JSON file

Their site also links to this: https://github.com/i18next/next-i18next
Using Next.js?
Here you'll find a blog post on how to best use next-i18next with client side translation download and SEO optimization.
Thoughts? @Harjot1Singh


Add "get_project_by_user_id" to ingest-client API object

Are you aware of the projects/search/findByUser endpoint?

Yep! but our IngestApi object wraps around the API endpoints and shows user-friendly functions (e.g. IngestApi.get_project_by_id())
I would like to add a function that wraps around that endpoint as well, because I can see how a programmatic user would like to not have to remember by heart/in a document the UUID of all their projects!

PR has been created, reviewed by @MightyAx and @amnonkhen and merged to master: https://github.com/ebi-ait/ingest-client/pull/56
I have just tested the library's new function in pipy test environment:
pip install -i https://test.pypi.org/simple/ hca-ingest==2.2.0

from hca_ingest.api.ingestapi import IngestApi
api = IngestApi('https://api.ingest.staging.archive.data.humancellatlas.org')
token = "Bearer {staging_token}"
api.set_token(token)
proj = api.get_user_projects()
projects = []
for p in proj:
    projects.append(p)

And works as expected! returns an iterator (from function get_all) and retrieves all my projects

going to deploy to master, v2.2.0


Change permit api to check current person, add supporting tables for …

…permits

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


[BUG] Stats are not aligned properly on about page

Describe the bug
The github stats images are not properly, they should be aligned in a centered manner. Also there should be a small gap between all these images to make them look refined.
I would like to work on this issue.
Steps To Reproduce

Go to about page.
Update the css property for the images to make them centered vertically.

Expected Behavior
No response
Operating System
Windows
Browser
Google Chrome
Screenshots
Before changes:

After updates the page should look like this:

Additional information
No response

Thank you @accodes21 for the bug report!
Would you like to work on this issue?

@SaptarshiSarkar12 Yes I would like to work on it

Ok @accodes21. I am assigning the task to you.


Automated Package Upgrade

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

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


More stable version.

You can not speak twice.
Wait until speak is ended

thanks!

I used your project on my website. Currently I'm available. Do you have a job for me? Please read about me or download my CV


testing: transpiled abapGit running on web via express js

this PR makes the transpiled abapGit run on express js
note that the only changed file in src is src/ui/zcl_abapgit_frontend_services.clas.abap, all other changes are outside of what users install
next step/PR: add a playwright test that runs against gitea while recording video

so close,

Where is the persistence for the express app?

sqlite, for testing purposes it starts with initial/empty state. But there is nothing stopping it from persisting to a sqlite file, on backend or in browser


fix: introduce regression on alias generation introduced by column selection

depends on #190

@PrettyWood woops just noted this bug was introduced by the column selection implem :grimacing:  Once this and #190 are merged, I'll be able to provide new benchmarks on the eager loading PR  :slightly_smiling_face:


Support for rate limiter and brute force protection

Currently, logins are vulnerable to brute force, since there are no rate limits to the login event in websocket.
I tried implementing rate limits using an advaced library, rate-limiter-flexible, so, in the future, we can implement rate limits to the entire application using a custom Express middleware (for example https://github.com/animir/node-rate-limiter-flexible/wiki/Express-Middleware) and/or Websocket connections (https://github.com/animir/node-rate-limiter-flexible/wiki/Overall-example#websocket-single-connection-prevent-flooding).
P.S: I added "-1" in login_response to maintain compatibility with "old login_response versions"

I could break into this much faster without brute force.
Since the entire thing is running with a non https socket you could easily sniff out the password during the username and password exchange.
But I do like the rate limiting.

@hrueger sorry for the late response

Cool.

P.S: I added "-1" in login_response to maintain compatibility with "old login_response versions"

Just wondering: compatibility with what?

I meant compatibility with older versions of the UI.
If we change "login_response" response from boolean to an object (for example,
{ "status":"success", "message":"" }
{ "status":"error", "message":"Wrong username or password!" }
{ "status":"error", "message":"Too many attemps! Please retry later." }
) the old version of auth.service.ts stops working.

I personally would like to see the error message generated on the server side. That way we could implement more errors (like from a user access control with specific rights for specific users).

So do I.

What do you think?

Using server-side generated error messages, we could also transmit to the client the number of attempts left and how long it has to wait before a new attemp.
I think we can use a new websocket event, for example login_response, so the server can emit both login_result with the old "boolean" response and the new login_response with an object.

sorry for the late response
No problem.

meant compatibility with older versions of the UI.
I might be wrong, but why would we need that? The only clients having that UI are the browser clients and when you refresh them, the latest UI is being fetched, or is it not?

Or do you mean caching from the service worker? That could indeed be a problem. However, I'm not a fan of legacy code ;-) My suggestion would be to display a changelog message on every first start of a new version. We could save the current version in the config file and once it does not match anymore (because TA was updated), we show the changelog.
In there we could inform the user to refresh the browser to get the latest UI.

I might be wrong, but why would we need that? The only clients having that UI are the browser clients and when you refresh them, the latest UI is being fetched, or is it not?

I meant that probably some people who are using Tally Arbiter from source don't always remember to re-compile the UI when they pull from Git

However, I'm not a fan of legacy code ;-)

I think we can "deprecate" login_result with boolean in the next "big release"

Ok, I agree

I meant that probably some people who are using Tally Arbiter from source don't always remember to re-compile the UI when they pull from Git.
We could add a proxy for localhost:4200 so that when TallyArbiter is started in dev mode (NODE_ENV=production) not the bundled UI is served but instead localhost:4200.

I think that now login rate limits are working as requested


Documented howto BM agent/none

What this PR does / why we need it:
There is no documentation currently in the official docs on how to install hypershift on baremetal and how to add workers to the hosted clusters.
Which issue(s) this PR fixes (optional, use fixes #<issue_number>(, fixes #<issue_number>, ...) format, where issue_number might be a GitHub issue, or a Jira story:
None
Checklist

[x] Subject and description added to both, commit and PR.
[ ] Relevant issues have been referenced.
[x] This change includes docs.
[ ] This change includes unit tests.

@e-minguez this is great, thanks a lot! added a few nits, then we can ship it.

@e-minguez this is great, thanks a lot! added a few nits, then we can ship it.

I think I've sorted them out. Thanks.

/test e2e-aws-nested

/retest

Is this test really needed for a documentation PR? 😅 I can keep trying but not sure if that would make a difference

No, that presubmit is optional and should not be running on docs PRs

Is there anything else that I need to do/can do to move this PR forward? Thanks!

@enxebre any other inputs? Thanks!

/test e2e-kubevirt-gcp

/test e2e-kubevirt-gcp

/test e2e-kubevirt-gcp

Thanks a lot @e-minguez! Names still seems a bit confusing to me Bare Metal workers using 'none' provider / Agent platform on baremetal OCP. I'd expect them to have same format than kubevirt so just None platform / Agent platform or as Azure Creating a None platform cluster / Creating an Agent platform cluster`.
There's also other things that need to be addressed aside from this PR so I'll follow up to refactor the docs how-to section a bit and make sure we are consistent with titles as well. Thanks!
/approve
PTAL @hardys to lgtm since you share some feedback.

Names still seems a bit confusing to me Bare Metal workers using 'none' provider / Agent platform on baremetal OCP

Yeah I think it's a bit confusing because each how-to doc combines several things:

Hypershift Operator requirements (these aren't specific to a platform in most cases, so can perhaps be documented outside of per-platform how-to docs?)

Names still seems a bit confusing to me Bare Metal workers using 'none' provider / Agent platform on baremetal OCP

Yeah I think it's confusing because we're combining instructions on how to deploy a hostedcluster for a specific platform, then adding details of how to add baremetal nodes (but folks using None/Agent could be using something other than baremetal)
We're also including/duplicating some sections which aren't specific to the platform (because the docs are written as an end-to-end howto):

Hypershift Operator requirements (these aren't platform specific)
Versions used (these shouldn't be in the howto IMHO, but perhaps recorded in the commit message)
Building the Hypershift Operator (this isn't platform specific and is repeated in each doc)
Create a custom HyperShift image (this also isn't platform specific and is repeated, perhaps both should be in a separate developer-orientated doc?)

Overall I think there is some great info here and I'm happy to see it merge, but I agree perhaps it could be refactored - I don't have a strong opinion re if we do that now, or as a follow-up though :)

/lgtm
I'll follow up to refactor docs.

/test e2e-kubevirt-gcp


Bump carbon identity framework version

Purpose

$subject

PR builder started
Link: https://github.com/wso2/product-is/actions/runs/8278451930

PR builder completed
Link: https://github.com/wso2/product-is/actions/runs/8278451930
Status: success


[FLINK-30196][tests] Replace usage of deprecated Mockito methods and update Mockito to 4.11.0

What is the purpose of the change
The PR replaces deprecated with suggested by Mockito's javadoc and release notes e.g.
https://github.com/mockito/mockito/releases/tag/v4.0.0
org.mockito.Matchers (removed in 4.x) replaced with org.mockito.ArgumentMatchers
org.mockito.Mockito#verifyZeroInteractions (removed in 4.x) replaced with org.mockito.Mockito#verifyNoMoreInteractions
org.mockito.ArgumentMatchers#isNull(Class) (removed in 4.x) replaced with org.mockito.ArgumentMatchers#isNull()
Also upgrades Mockito to 4.11.0
Verifying this change
This change is a trivial rework / code cleanup without any test coverage.
Does this pull request potentially affect one of the following parts:

Dependencies (does it add or upgrade a dependency): (yes)
The public API, i.e., is any changed class annotated with @Public(Evolving): (no)
The serializers: ( no )
The runtime per-record code paths (performance sensitive): (no )
Anything that affects deployment or recovery: JobManager (and its components), Checkpointing, Kubernetes/Yarn, ZooKeeper: (no )
The S3 file system connector: (no )

Documentation

Does this pull request introduce a new feature? (no)
If yes, how is the feature documented? (not applicable)

@Zakelly sorry for the ping
do you mind if I ask you to have a look here (GitHub says you are the most matching person)

:D  Sure, will take a look

@flinkbot run azure

@flinkbot run azure


CI will fail at the end of this month

Multiple of our GitHub action dependencies rely on an old API that will be deprecated at the end of this month, e.g. https://github.com/8c6794b6/hpc-codecov-action/issues/2
I suggest we wait for the maintainers to become active and fix this. If the actions do not get fixed, then we have to replace them. For now I want to avoid this work, though.

This was fixed -- at least for hpc-codecov-action. I close this, because the action obviously works.


Adding a resources page

This will help the community members to stay on the right track, we will take that it would be free.
If agreed please assign it to me once the event gets started, I am participating in HacktoberFest

Join us on discord @Aman-Singh-Kushwaha , We will talk about resources and then I will be assigning you this issue. The discord link is provided in the website.


runtime(java): Add a config variable for commonly used compiler options

The value of g:javac_makeprg_params is now added to the value of 'makeprg' as an option string.
@Konfekt, does that work for you?

thanks!


Make dropping of indexes in cluster retry in case of precondition failed

Scope & Purpose
When dropping an indexes of a collection in the cluster, the operation could fail with a "precondition failed" error in case there were simultaneous index creation or drop actions running for the same collection. The error was returned properly internally, but got lost at the point when <collection>.dropIndex() simply converted any error to just false. We can't make dropIndex() throw an exception for any error, because that would affect downwards-compatibility. But in case there is a simultaneous change to the collection indexes, we can just retry our own operation and check if it succeeds then. This is what dropIndex() will do now.

[x] :hankey: Bugfix (requires CHANGELOG entry)
[ ] :pizza: New feature (requires CHANGELOG entry, feature documentation and release notes)
[ ] :fire: Performance improvement
[ ] :hammer: Refactoring/simplification
[x] :book: CHANGELOG entry made

Backports:

[x] Backports required for: 3.7: https://github.com/arangodb/arangodb/pull/13532, 3.6: https://github.com/arangodb/arangodb/pull/13533

Testing & Verification

[x] The behavior in this PR was manually tested
[x] This PR adds tests that were used to verify all changes:

[x] Added new integration tests (shell_server)

Link to Jenkins PR run:
http://<IP_ADDRESS>:8080/view/PR/job/arangodb-matrix-pr/13947/

http://<IP_ADDRESS>:8080/view/PR/job/arangodb-matrix-pr/13952/

Tests blue


Documentation

Some detailed documentation would be nice.

I propose using sphinx to automatically generate api docs from the docstrings.
In addition, we can add tutorials as needed, as notsotuf matures
Then publish the sphinx docs to rtd
I would be happy to set this up, once my work on #7  has been completed

Sounds good. Thanks!


Support github changelog type

Set changelog generation with changelog.type and set it to github or legacy to use different strategies to generate release notes
Support github generated release notes

@naueramant I've tested the new functionality in https://github.com/PaulFarver/release-testing


routes that contains # not working as expected

I'm trying to scrape this site

http://www.modalight.com/#/mmc-wl

, as you see the link contains a hash.
I have for example 10 links like it , when the puppeteerCrawler start, it scrapes just the first one.

This is because the unique key that identifies duplicate URLs is computed from a normalized URL. Normalization consists of multiple steps - we order query parameters alphabetically, remove UTM parameters and mainly remove URL fragment (hash part) of URL. This behavior might be overridden when you are creating a request object:
const request = new Apify.Request({
  url: 'http://www.modalight.com/#/mmc-wl',
  keepUrlFragment: true,
});

Thank you for your response you really made my day, I suffered from this problem for days.
I'm using requestList, is this solution will work with it?

@ahmedeldeeb25 Sorry, keepDuplicateUrls and keepUrlFragment are two different things.
// assuming websiteLinks is an array of strings
const sources = websiteLinks.map(link => {
    return {
        url: link,
        keepUrlFragment: true,
    }
});

// Then:
const requestList = await Apify.openRequestList('my-list', sources); // This sets some reasonable default options

//Or:
const rl = new RequestList({ sources }); // This is more raw.

These days, we typically prefer Apify.openRequestList().

that's great thanks my problem solved

Glad to hear that!


About versions of published models

what is the difference between different versions of models?
such as waveglow_256channels_universal_v3 and waveglow_256channels_universal_v5.
(sorry to ask such a tiny problem.
thanks

The difference between waveglow_256channels_universal_v4 and  waveglow_256channels_universal_v5 is that v5 converts v4 to be compatible with the new code.


Support object grabbing

Would be great to have a way to grab and drag objects like super hands has. Needs to be done in a distributed manner, however.
Maybe whenever a user grabs an object, it will constantly publish its world position every 10 Hz?

We need a new clientEvent grab or somesuch.
Just childs the object to grabber, based on the initial offset between them (will keep it pose-locked to hand)
More important part is other clients validating that the object being grabbed is a grabbable and some other stuff, as this would otherwise result in some violation of our objectId-vs-topic checks

Actually that's still a problem when you release, because non-editor users still can't write the new (stationary) position of the grabbable object.
Maybe persist needs to special case the grab-end message and allow it to update pos/rot only in persist

Joey has done some work on this, this week.

Preliminary tests publishing any controller button/stick events.
Preliminary tests with a Python program consuming those events and deciding how to simulate a grab.

It would be good to decide if this is an:

A-frame side natural parenting.
A Python app.

Would be great to have a way to grab and drag objects like super hands has. Needs to be done in a distributed manner, however.
Maybe whenever a user grabs an object, it will constantly publish its world position every 10 Hz?

If the object is a child of the hand, the existing 10Hz parent publish should take care of this.

Huh, parents handle publishing pose of children? I didn't know that...

Related to #532

This is partially supported "natively" in AFRAME from v1.5.0.
Does not of course, address network publishing, persist updating, or state conflicts of grabbed or graber


Fixes #256: various coverity issues in the HTTP/1 adaptor

Codecov Report

Merging #657 (9a12eb4) into main (5a68b6f) will increase coverage by 0.00%.
The diff coverage is 0.00%.

@@           Coverage Diff           @@
##             main     #657   +/-   ##
=======================================
  Coverage   25.90%   25.90%
=======================================
  Files         128      128
  Lines       31195    31198    +3
  Branches     4973     4973
=======================================
+ Hits         8081     8083    +2
- Misses      22059    22062    +3
+ Partials     1055     1053    -2

Flag
Coverage Δ

unittests
25.90% <0.00%> (+<0.01%)
:arrow_up:

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

src/adaptors/http1/http1_server.c
0.00% <0.00%> (ø)

src/router_core/route_tables.c
16.62% <0.00%> (+0.27%)
:arrow_up:

src/router_core/address_watch.c
74.71% <0.00%> (+1.14%)
:arrow_up:

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

@kgiusti once more... with feeling...]

you should be able to run scripts/git-clang-format origin/main --diff on your machine; it will format everything that changed from what's in origin/main. maybe git fetch before, to have accurate origin/main content. and remove --diff to directly apply changes

@kgiusti once more... with feeling...]

you should be able to run scripts/git-clang-format origin/main --diff on your machine; it will format everything that changed from what's in origin/main. maybe git fetch before, to have accurate origin/main content. and remove --diff to directly apply changes

Ok - good to know.
That second clang-format failure (fixed by the last commit) surprised me since - once I fetched/rebased on the latest main with the pre-commit hook - I was able to check in what was apparently a clang-format violation.
Here's the workflow that failed:

make change to code
git add changed files
run git clang-format
audit clang-format changes - all good
git add again to pick up changes
git commit - succeeded!
Profit!!!

Best I can tell is that I would've caught the second clang-format issue if I re-ran git clang-format again after adding the fixes from the previous run of git clang-format.  Essentially adding step 5.a: run git clang-format, then repeat until Profit!
I think the reason for that may be there were two clang-format violations on the same line of code  (align vars, then align equal sign).
What's funny is that step 6 commit worked even though the equal signs were unaligned.

@kgiusti That second clang-format failure (fixed by the last commit) surprised me since - once I fetched/rebased on the latest main with the pre-commit hook - I was able to check in what was apparently a clang-format violation.

The pre-commit only checks what you are currently committing (with git commit). It does not check commits that are already committed and you are only rebasing them. There is a command (pre-commit run --all-files, I think, or something like that) that will check it all, but it does not work with my git clang-format action, because that is written to always check outstanding changes... It is the problem from https://github.com/skupperproject/skupper-router/issues/660#issuecomment-1206184153 that the tooling only works on file-level, and checking changed lines has to be done hackishly.
Things will be much better when whole codebase is formatted, then we can run clang-format the way git-precommit.com means it to be run!
But when you know what the clang-format GHA is running and you run it yourself, it should be manageable, I hope. If there was a good way to figure out base commit when running pre-commit, then the precommit action could run the same thing...


Received SIGTERM right after "Updating OCSP stapling to extend validity period" (systemd)

uname -a
Linux servername 4.1.6-249 #1 SMP Mon Aug 31 12:34:47 UTC 2015 armv7l GNU/Linux

cat /etc/debian_version
8.2

/etc/systemd/system/caddy.service
[Unit]
Description=Caddy webserver
Documentation=https://caddyserver.com/
After=network.target

[Service]
User=caddy
LimitNOFILE=4096
ExecStart=/opt/caddy/caddy -agree=true -conf=/etc/caddy/Caddyfile -pidfile=/var/run/caddy/caddy.pid -log=stderr
Restart=on-failure

[Install]
WantedBy=multi-user.target

Jan 12 16:46:22 servername caddy[16660]: 2016/01/12 16:46:22 [INFO] Updating OCSP stapling to extend validity period to 2016-01-19 14:00:00 +0000 UTC
Jan 12 16:46:23 servername caddy[16660]: 2016/01/12 16:46:23 [INFO] Checking certificates for 26 hosts
Jan 12 16:46:23 servername caddy[16660]: 2016/01/12 16:46:23 [INFO] SIGTERM: Terminating process

This is when running 060ab92d295ba9dd8e34115c92557d5eff5896ff. I'm planning to step up to 0.8.1 3c96718027db0fc6bf40837b2983f849578b5f7f sometime tomorrow.
Let me know what debug data is needed.

Is this a Caddy question or a systemd question? Because I don't see anything wrong with this...

Is this behavior expected? And if so what would be the recommended way to handle it.

I guess I'm not understanding the question -- are you asking if Caddy is SIGTERM'ing itself?

I'm sorry, I should give you some background information first. I had Caddy running for about 6 hours serving multiple websites with no issues. According to the log at 16:46:22 "Updating OCSP stapling to extend validity period to" comes in and 1 second later at 16:46:23 Caddy dies with "SIGTERM: Terminating process". At this point Caddy remains down. I'm not really sure if we're looking at systemd or caddy issue.

Thanks for the background. That's helpful :smile:
Caddy is certainly not signaling itself. As stated in the docs, Caddy will restart when certificate information is updated, and this gives it a new process ID. I bet this is a systemd issue.

Why is it killing itself at all?

It's not -- I'm not sure what is signaling Caddy to terminate. But Caddy will respawn when it updates its listeners (certificates, OCSP stuff, etc); this allows it to do so immediately and without downtime, avoiding a mess of locking and blocking requests.

It happened again at 21:48:20.
Jan 12 21:48:20 servername caddy[18886]: 2016/01/12 21:48:20 [INFO] Updating OCSP stapling to extend validity period to 2016-01-19 14:00:00 +0000 UTC
Jan 12 21:48:22 servername caddy[18886]: 2016/01/12 21:48:22 [INFO] Checking certificates for 26 hosts
Jan 12 21:48:27 servername caddy[18886]: 2016/01/12 21:48:27 [INFO] SIGTERM: Terminating process

Monit started the process and it is running again. I'm not sure where to take it from here.

I would try running it without systemd, (caddy & maybe?) and see what happens -- I'd be interested to know if it's still term'ing.

How often Caddy performs OCSP stapling? Is this hard coded? Can we manipulate the value? The reason I'm asking is to help recreating the issue. My last Caddy restart was 21 hours ago and I'm still waiting for OCSP stapling.

Currently, Caddy maintains a list of the OCSP responses and iterates them every hour. It checks the LastUpdate and NextUpdate fields and, if that validity period is halfway over, it requests new OCSP. If it finds that the validity window has shifted more into the future (a new NextUpdate value), that's when it triggers a reload, printing those log lines you see.
It may take a couple days for new OCSP data.

Thanks for the explanation.
Just got one. This is still using systemd running the latest 0.8.1
Jan 15 11:16:01 servername caddy[10832]: 2016/01/15 11:16:01 [INFO] Updating OCSP stapling to extend validity period to 2016-01-22 13:00:00 +0000 UTC
Jan 15 11:16:01 servername caddy[10832]: 2016/01/15 11:16:01 [WARNING] TLS disabled for http://<IP_ADDRESS>:80.
Jan 15 11:16:01 servername caddy[10832]: 2016/01/15 11:16:01 [WARNING] TLS disabled for http://111.222.333.444:80.
Jan 15 11:16:06 servername caddy[10832]: 2016/01/15 11:16:06 [WARNING] TLS disabled for http://<IP_ADDRESS>:80.
Jan 15 11:16:06 servername caddy[10832]: 2016/01/15 11:16:06 [WARNING] TLS disabled for http://111.222.333.444:80.
Jan 15 11:16:15 servername caddy[10832]: 2016/01/15 11:16:15 [INFO] Checking certificates for 28 hosts
Jan 15 11:16:54 servername caddy[10832]: 2016/01/15 11:16:54 [INFO] SIGTERM: Terminating process

I see two interesting facts:

"TLS disabled" appears twice for the same IPs 5 seconds apart
SIGTERMing 39 seconds after "Checking certificates". Could this be somehow related to #507

I'm going to try running from the command line as you suggested. This is to rule out potential systemd issue. Unless you would prefer different course of action?

Thanks - yes, do that and let me know how it goes.

Received Updating OCSP stapling twice since starting from the command line and there is no failure. Which points to possible systemd issue. We need some systemd guru to take a look at my /etc/systemd/system/caddy.service. Maybe there is something unordinary that would need to be changed?
Here is the version I'm running
-->systemd --version
systemd 215

I know the right thing to do would be to close this issue but I would like to keep it open for now if that is OK with you. Maybe changing the title only?

Sure. Also will you try this binary? I built it for ARM Linux and it has a heck of a LOT more logging, could be useful for all your open issues right now. https://drive.google.com/file/d/0B-OxZ0LoeTvGT2E3dExiRFp4Zzg/view?usp=sharing

@hubertbanas I am a systemd guru. I use this unit for my caddy deployments. What's the content of yours?

@mholt
Thanks. I will take it for a spin
@Xe
[Unit]
Description=Caddy webserver
Documentation=https://caddyserver.com/
After=network.target

[Service]
User=caddy
LimitNOFILE=4096
ExecStart=/opt/caddy/caddy -agree=true -conf=/etc/caddy/Caddyfile -pidfile=/var/run/caddy/caddy.pid -log=stderr
Restart=on-failure

[Install]
WantedBy=multi-user.target

I see you have WorkingDirectory in your service file. Can you please elaborate?

xena@greedo (linux) ~
➜  sudo -iu caddy
[sudo] password for xena:
[caddy@greedo ~]$ ls -la
total 28
drwx------  3 caddy caddy  150 Jan  8 20:03 .
drwxr-xr-x 34 root  root  4096 Jan 10 21:46 ..
-rw-------  1 caddy caddy 1283 Jan 12 13:08 .bash_history
-rw-r--r--  1 caddy caddy   18 Aug 18 06:37 .bash_logout
-rw-r--r--  1 caddy caddy  193 Aug 18 06:37 .bash_profile
-rw-r--r--  1 caddy caddy  231 Aug 18 06:37 .bashrc
drwx------  3 caddy caddy   32 Jan  8 20:03 .caddy
-rw-r--r--  1 caddy caddy  334 Sep 11 10:02 .emacs
-rw-r--r--  1 caddy caddy  658 Dec 25 04:14 .zshrc
[caddy@greedo ~]$ ls -la .caddy
total 0
drwx------ 3 caddy caddy  32 Jan  8 20:03 .
drwx------ 3 caddy caddy 150 Jan  8 20:03 ..
drwx------ 4 caddy caddy  42 Jan  8 20:03 letsencrypt
[caddy@greedo ~]$

Caching the Let's Encrypt certs.

OK, I can start with that. Sorry but your ls doesn't show the full path. Are your certs at /var/lib/caddy ?

[caddy@greedo letsencrypt]$ tree /var/lib/caddy/.caddy/
/var/lib/caddy/.caddy/
└── letsencrypt
    ├── sites
    │   ├── xena.greedo.xeserv.us
    │   │   ├── xena.greedo.xeserv.us.crt
    │   │   ├── xena.greedo.xeserv.us.json
    │   │   └── xena.greedo.xeserv.us.key
    │   └── znc.yolo-swag.com
    │       ├── znc.yolo-swag.com.crt
    │       ├── znc.yolo-swag.com.json
    │       └── znc.yolo-swag.com.key
    └── users
        ├──<EMAIL_ADDRESS>        │   ├── me.json
        │   └── me.key
        └──<EMAIL_ADDRESS>            ├── xena.json
            └── xena.key

7 directories, 10 files

Awesome! Thank you!

relevant ansible plays I use:
# https://github.com/Xe/dotfiles/blob/master/ansible/roles/caddy/tasks/user.yml
- name: create caddy user
  user: name=caddy system=yes home=/var/lib/caddy

# https://github.com/Xe/dotfiles/blob/master/ansible/roles/caddy/tasks/install.yml
- name: enable caddy repo
  get_url:
    url: https://copr.fedoraproject.org/coprs/xena/caddy/repo/fedora-23/xena-caddy-fedora-23.repo
    dest: /etc/yum.repos.d/caddy.repo

- name: install caddy
  dnf:
    name: caddy
    state: latest

- name: install systemd unit
  copy:
    src: caddy.service
    dest: /etc/systemd/system/caddy.service
  notify: enable caddy

# https://github.com/Xe/dotfiles/blob/master/ansible/roles/caddy/tasks/config.yml
- name: create caddy folders
  file: path={{ item }} state=directory
  with_items:
    - /etc/caddy
    - /etc/caddy/sites

- name: copy Caddy config to /etc/caddy/Caddyfile
  copy:
    src: Caddyfile
    dest: /etc/caddy/Caddyfile
  notify: restart caddy

- name: copy sites config
  copy:
    src: "sites/{{ item }}"
    dest: "/etc/caddy/sites/{{ item }}"
  with_items:
    - xena.greedo.xeserv.us
    - znc.yolo-swag.com
  notify: restart caddy

Caddyfile:
import /etc/caddy/sites/*

/etc/caddy/sites/xena.greedo.xeserv.us:
xena.greedo.xeserv.us {
	log syslog

	tls<EMAIL_ADDRESS>
	root /home/xena/public_html

	markdown / {
		template blog templates/blog.html
		template index templates/index.html
	}

	browse
}

Hope this helps!

@Xe
I reassembled my service file based on yours and I'm still seeing the issue.
Jan 16 22:11:20 servername caddy[11422]: 2016/01/16 22:11:20 [INFO] Updating OCSP stapling to extend validity period to 2016-01-23 14:00:00 +0000 UTC
Jan 16 22:11:20 servername caddy[11422]: 2016/01/16 22:11:20 [WARNING] TLS disabled for http://<IP_ADDRESS>:80.
Jan 16 22:11:20 servername caddy[11422]: 2016/01/16 22:11:20 [WARNING] TLS disabled for http://111.222.333.444:80.
Jan 16 22:11:20 servername caddy[11422]: 2016/01/16 22:11:20 [WARNING] TLS disabled for http://<IP_ADDRESS>:80.
Jan 16 22:11:20 servername caddy[11422]: 2016/01/16 22:11:20 [WARNING] TLS disabled for http://111.222.333.444:80.
Jan 16 22:11:21 servername caddy[11422]: 2016/01/16 22:11:21 [INFO] Checking certificates for 28 hosts
Jan 16 22:11:22 servername caddy[11422]: 2016/01/16 22:11:22 [INFO] SIGTERM: Terminating process

Here is the OS and systemd version
-->cat /etc/debian_version
8.2

-->systemd --version
systemd 215
+PAM +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ -SECCOMP -APPARMOR

Here is my /etc/systemd/system/caddy.service
[Unit]
Description=Caddy webserver
Documentation=https://caddyserver.com/
After=network.target

[Service]
User=caddy
WorkingDirectory=/home/caddy
LimitNOFILE=4096
ExecStart=/opt/caddy/caddy -agree=true -conf=/etc/caddy/Caddyfile -pidfile=/var/run/caddy/caddy.pid -log=stderr
Restart=on-failure
StartLimitInterval=600

[Install]
WantedBy=multi-user.target

Here is the running process
-->ps -ef | grep caddy
caddy    15232     1  0 09:07 ?        00:00:00 /opt/caddy/caddy -agree=true -conf=/etc/caddy/Caddyfile -pidfile=/var/run/caddy/caddy.pid -log=stderr

Caddy binary location:
/opt/caddy/
|-- caddy -> /opt/caddy/caddy_rolling/20160116_caddy_go1.5.1_6e340cb
|-- caddy_0.8
|   |-- CHANGES.txt
|   |-- LICENSES.txt
|   |-- README.txt
|   `-- caddy
|-- caddy_0.8.1
|   |-- CHANGES.txt
|   |-- LICENSES.txt
|   |-- README.txt
|   `-- caddy
|-- caddy_debug
|   |-- caddy-logging
|   `-- caddy-logging2
`-- caddy_rolling
    |-- 20160110_caddy_go1.5.1_060ab92
    |-- 20160116_caddy_go1.4.2_6e340cb
    `-- 20160116_caddy_go1.5.1_6e340cb

Caddy home directory
/home/caddy/.caddy
`-- letsencrypt
    |-- sites
    |   |-- aa.com
    |   |   |-- aa.com.crt
    |   |   |-- aa.com.json
    |   |   `-- aa.com.key
    |   |-- blog.gg.com
    |   |   |-- blog.gg.com.crt
    |   |   |-- blog.gg.com.json
    |   |   `-- blog.gg.com.key
    |   |-- ff.com
    |   |   |-- ff.com.crt
    |   |   |-- ff.com.json
    |   |   `-- ff.com.key
    |   |-- bb.com
    |   |   |-- bb.com.crt
    |   |   |-- bb.com.json
    |   |   `-- bb.com.key
    |   |-- cc.com
    |   |   |-- cc.com.crt
    |   |   |-- cc.com.json
    |   |   `-- cc.com.key
    |   |-- ee.com
    |   |   |-- ee.com.crt
    |   |   |-- ee.com.json
    |   |   `-- ee.com.key
    |   |-- ii.com
    |   |   |-- ii.com.crt
    |   |   |-- ii.com.json
    |   |   `-- ii.com.key
    |   |-- gg.com
    |   |   |-- gg.com.crt
    |   |   |-- gg.com.json
    |   |   `-- gg.com.key
    |   |-- hh.com
    |   |   |-- hh.com.crt
    |   |   |-- hh.com.json
    |   |   `-- hh.com.key
    |   |-- www.ff.com
    |   |   |-- www.ff.com.crt
    |   |   |-- www.ff.com.json
    |   |   `-- www.ff.com.key
    |   |-- www.gg.com
    |   |   |-- www.gg.com.crt
    |   |   |-- www.gg.com.json
    |   |   `-- www.gg.com.key
    |   |-- www.hh.com
    |   |   |-- www.hh.com.crt
    |   |   |-- www.hh.com.json
    |   |   `-- www.hh.com.key
    |   `-- dd.com
    |       |-- dd.com.crt
    |       |-- dd.com.json
    |       `-- dd.com.key
    `-- users
        `--<EMAIL_ADDRESS>            |-- name.json
            `-- name.key

I also double checked https://denbeke.be/blog/servers/running-caddy-server-as-a-service-with-systemd/ which is basically the same.
I'm currently running 6e340cb which I built using go1.5.1. I have seen this issue on all of the versions I have tried so far including the one from the website. I have NOT seen this issue when running from the command line.
I would appreciate any ideas, thought, etc.

Could -email<EMAIL_ADDRESS>option have to do something with this?

@DenBeke
I will try your suggestion.

Nope, that is not it.
Jan 17 15:46:00 servername caddy[15555]: 2016/01/17 15:46:00 [INFO] Updating OCSP stapling to extend validity period to 2016-01-24 14:00:00 +0000 UTC
Jan 17 15:46:00 servername caddy[15555]: 2016/01/17 15:46:00 [WARNING] TLS disabled for http://<IP_ADDRESS>:80.
Jan 17 15:46:00 servername caddy[15555]: 2016/01/17 15:46:00 [WARNING] TLS disabled for http://111.222.333.444:80.
Jan 17 15:46:00 servername caddy[15555]: 2016/01/17 15:46:00 [WARNING] TLS disabled for http://<IP_ADDRESS>:80.
Jan 17 15:46:00 servername caddy[15555]: 2016/01/17 15:46:00 [WARNING] TLS disabled for http://111.222.333.444:80.
Jan 17 15:46:02 servername caddy[15555]: 2016/01/17 15:46:02 [INFO] Checking certificates for 28 hosts
Jan 17 15:46:02 servername caddy[15555]: 2016/01/17 15:46:02 [INFO] SIGTERM: Terminating process

Any other ideas?

strace?

systemd is configured to follow the pidfile, right?

@mholt
What do you mean?

Well I'm not very familiar with process managers, but I imagine that it would expect the process it started to stay alive. Caddy restarts by starting a new process then killing itself. I don't know why that would cause systemd to signal TERM to Caddy, but it's just a thought, since the sigterm log appears right about when the process would be killing itself. Any halfway-decent process manager should be able to use a pidfile to keep track of a moving process.

This is a horrible idea, but why not re-exec itself using the exec syscall?

After long 37 hours I finial got  OCSP stapling and there is no SIGTERM !
This is after adding PIDFile=/var/run/caddy/caddy.pid to the /etc/systemd/system/caddy.service
I will keep this open and will document and close it once confirmed.

I can now confirm SIGTERM is gone after adding PIDFile directive to the caddy.service
Here is my /etc/systemd/system/caddy.service
[Unit]
Description=Caddy Web Server
Documentation=https://caddyserver.com/docs
After=network.target

[Service]
User=caddy
LimitNOFILE=4096
ExecStart=/opt/caddy/caddy -agree=true -conf=/etc/caddy/Caddyfile -pidfile=/var/run/caddy/caddy.pid -log=stderr
PIDFile=/var/run/caddy/caddy.pid
Restart=on-failure

[Install]
WantedBy=multi-user.target

Thank you all for providing ideas and helping debug this issue.

:+1: Glad you figured it out.