Bug: undefined method `[]' for nil:NilClass in :mobile?

Description
Sometimes browser gem raises an error when using the mobile? method.
How to reproduce
Unknown, which user_agents are the offending ones, but perhaps an edge-case spec on mobile? method with incomplete/missing headers would allow to reproduce.
What do you expect
Browser gem not to produce errors when obscure user_agents are checked with mobile? Should just return false if unable to discern.
What happened instead
Browser threw a undefined method[]' for nil:NilClass`
Software:

Rails version: 4.0.0
Browser gem version: 2.0.1

Backtrace
ActionView::Template::Error: undefined method `[]' for nil:NilClass
…le/ruby/2.0.0/gems/browser-2.0.1/lib/browser/device.rb:  166:in `detect_mobile?'
…le/ruby/2.0.0/gems/browser-2.0.1/lib/browser/device.rb:   51:in `mobile?'

Please upgrade to the latest version (v2.0.2) and check if this still happens.

This is happening to me with v2.0.2.
irb(main):024:0> b
=> #<Browser::Chrome:0x007f09119ba2c8 @ua="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36", @accept_language=[], @device=#<Browser::Device:0x007f09119cdc38 @ua="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36", @subject=#<Browser::Device::Unknown:0x007f09119cd990 @ua="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36">>>
irb(main):025:0> b.device
=> #<Browser::Device:0x007f09119cdc38 @ua="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36", @subject=#<Browser::Device::Unknown:0x007f09119cd990 @ua="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36">>
irb(main):026:0> b.device.tv?
=> false
irb(main):027:0> b.device.mobile?
=> nil

@jordanful what's happening? Looks like is working fine. If the issue is nil, that's correct (remeber that nil is a falsy value in Rubyland).

You're right @fnando !

Still getting some errors. I enclosed the call in a begin-rescue block and in recue atempted to debug with browser.to_s but even that throws an error.
Here is the trace
…e/ruby/2.0.0/gems/browser-2.0.1/lib/browser/
generic.rb:  18:in `full_version'
…ndle/ruby/2.0.0/gems/browser-2.0.1/lib/browser/
base.rb:  32:in `version'
…gems/browser-2.0.1/lib/browser/meta/
generic_browser.rb:   6:in `meta'
…ruby/2.0.0/gems/browser-2.0.1/lib/browser/meta/
base.rb:  17:in `to_a'
…ndle/ruby/2.0.0/gems/browser-2.0.1/lib/browser/
/home/deployer/apps/nordenhealth/shared/bundle/ruby/2.0.0/gems/browser-2.0.1/lib/browser/base.rb
base.rb:  20:in `block in meta'
…ndle/ruby/2.0.0/gems/browser-2.0.1/lib/browser/
base.rb:  18:in `each'
…ndle/ruby/2.0.0/gems/browser-2.0.1/lib/browser/
base.rb:  18:in `each_with_object'
…ndle/ruby/2.0.0/gems/browser-2.0.1/lib/browser/
base.rb:  18:in `meta'
…ndle/ruby/2.0.0/gems/browser-2.0.1/lib/browser/
base.rb:  28:in `to_s'
…160318114936/app/controllers/
application_controller.rb: 205:in `rescue in mobile_device?'

@Epigene you're still running 2.0.1, which outdated. Try v2.0.2.

I could swear I updated gemfile, must have missed running bundle update, thanks for noticing!
I set up the system to dump the request object if erros happen again, perhaps it will help debug what evil haxxor devices cause this. :D

Assuming I have successfully updated to 2.0.2, there are still requests that produce the error.
Here is a truncated request object dump, hope you can gain some insight.
https://gist.github.com/Epigene/e4e14f84d9dac621914e

@Epigene I can't see the user agent in that Gist. Can you get it? In Rails is available under request.user_agent. Maybe is some sort of partial user agent that is triggering the exception?

@Epigene also the full backtrace would be nice (I can't see which method triggered that exception, what's the code path, etc).

I will see if I can get the exception trace and request.user_agent portion. Unfortunately, it is quite difficult to communicate an unadulterated request object because it is rather large when converted to plaintext and I have to sanitize some sensitive values.

You can try the following script for this (I didn't run it, so you should see if works as expected):
class ApplicationController < ActionController::Base
  rescue_from Exception do |error|
    lines = error.backtrace.select {|line| line.include?("/browser/") }

    if lines.empty?
      raise error
    else
      # save/output the following variables.
      request.user_agent
      lines
    end
  end
end

I don't care about anything other than the code path inside browser and the user agent.

No feedback, closing this.

I have the same issue running browser-2.5.0 and Rails-5.0.5. What can I do to provide debug output?
Thanks in advance, Max.


Add amd metrics support

Add AMD GPU metrics support.
Currently, we will export GPU usage, GPU memory usage, GPU temperature for AMD GPU

Test case:

Deploy new job-exporter/grafana in the bed which contains AMD node.
Submit AMD job. Check if node gpu metric, job gpu metric can show correctly


Set correct rights on unpacked files and unify umask entries

Description
Setting 0755 permission explicitly on all unarchived connector plugins.
Fixes #366
Type of change

[x] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] This change requires a documentation update

How Has This Been Tested?
Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration
Test Configuration:
Checklist:

[x] My code follows the style guidelines of this project
[x] I have performed a self-review of my own code
[x] I have commented my code, particularly in hard-to-understand areas
[x] I have made corresponding changes to the documentation
[x] My changes generate no new warnings
[x] I have added tests that prove my fix is effective or that my feature works
[x] Any dependent changes have been merged and published in downstream modules

I will rebase our 5.0.0-post branch


Sonar plugin use outdated Sonar runner jar

During Sonar plugin execution I got the following stack trace:
      ERROR: Error during Sonar runner execution
      java.lang.IllegalStateException: Fail to download libraries from server
        at org.sonar.runner.impl.Jars.dowloadFiles(Jars.java:78)
        at org.sonar.runner.impl.Jars.download(Jars.java:57)
        at org.sonar.runner.impl.JarDownloader.download(JarDownloader.java:46)
        at org.sonar.runner.impl.JarDownloader.checkVersionAndDownload(JarDownloader.java:37)
        at org.sonar.runner.impl.BatchLauncher$1.run(BatchLauncher.java:71)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at org.sonar.runner.impl.BatchLauncher.doExecute(BatchLauncher.java:69)
        at org.sonar.runner.impl.BatchLauncher.execute(BatchLauncher.java:50)
        at org.sonar.runner.api.EmbeddedRunner.doExecute(EmbeddedRunner.java:102)
        at org.sonar.runner.api.Runner.execute(Runner.java:100)
        at org.sonar.runner.Main.executeTask(Main.java:70)
        at org.sonar.runner.Main.execute(Main.java:59)
        at org.sonar.runner.Main.main(Main.java:53)
      Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
        at org.sonar.runner.impl.Jars.dowloadFiles(Jars.java:72)
        ... 12 more

According to a post on SonarQube forum it seems that it is due to an incompatibilty between an old version of the runner and a more recent version of the server.
Jeka include sonar-runner-2.4.jar that was released on 24-Apr-2014. Latest version of sonar-scanner-api (that replace sonar-runner) is now <IP_ADDRESS>1 and was released 29-Apr-2021.
So I guess an upgrade might solve the issue but, despite major version being the same, it seems that API changed (e.g. org.sonar.runner.Main that is used by Jeka Sonar plugin no longer exists in version <IP_ADDRESS>1). So fixing the issue would require taking a closer look at API changes. Maybe integration test can help figuring out the new implementation.

I agree the runner should be replaced by a newer one.
I think also that this plugin should be moved out of Jeka-Core to become an external plugin (It is here for historical reason).

Jeka built-in plugins Jacoco and Sonar are removed from the main distribution in favor of up-to-date external plugins :

Sonarqube Plugin
Jacoco Plugin


Verifying failure flag in the result json

@yaamai
BTW, this is a proposal, what do you say adding a something flag into result when Verify Text is failed? By this, we would be able to test that the text is excluded.
Originally posted by @rsp9u in https://github.com/side-runner-py/side-runner-py/pull/21#issuecomment-480489023

@rsp9u

@yaamai
BTW, this is a proposal, what do you say adding a something flag into result when Verify Text is failed? By this, we would be able to test that the text is excluded.

like below?
output:
  - tests:
    - commands:
      - command: verifyText
        isFailedVerify: true

@yaamai yeah, like that.


Internals visible

Changes to Internals within Common library should be treated as breaking since the internals are visible to the dependent libraries (blobs, queues, etc). Our tooling doesn't support detecting breaking changes to Internals (I think?). In order to prevent breaking changes, and to give flexibility to evolve the Internals over time, we would like to move the Internals to Shared source within each of the libraries. However, since we have already GA'ed we need to support the initial release of the dependent libraries (which relies on InternalsVisibleTo) forever, even with future versions of Common. This means that future versions of Common still need to support InternalsVisibleTo. We don't want to rely on this in our future version of dependent libraries, so the plan is to copy all internal types from common into a new namespace and move this into shared source in the dependent libraries. The legacy version of the internals will be in a new legacy folder in Common, but would only be used by old dependent libraries accessing new Common library. We would only enable InternalsVisibleTo in Common for release builds so that we don't accidentally depend on this going forward.

Still need to figure out how to avoid conflicts with Azure.Core types when the InternalsVisibleTo is flipped back on, as those types are pulled in to other projects via the shared directory as well as being visible to the projects from the reference to Common.

from the reference to Common

Remove them from common? Or exclude them from other projects.

from the reference to Common

Remove them from common? Or exclude them from other projects.

from the reference to Common

Remove them from common? Or exclude them from other projects.

Removing them from Common would mean that old versions of Blob would stop working with new versions of Common. Excluding them from Blob would mean we would still need to be dependent on InternalsVisibleTo. The way we are working around this for other internal types is that we are putting the "Shared" version in a different namespace than the original version.

Removing them from Common would mean that old versions of Blob would stop working with new versions of Common.

AFAIK this is fine.

Removing them from Common would mean that old versions of Blob would stop working with new versions of Common.

AFAIK this is fine.

It is not, unfortunately:

I write an app called Foo that uses Blobs.12 and Queues.12 (and hence Common.12)
We release Blobs.13, Queues.13, Common.13
Somebody writes a popular BlobUtilities library referencing Blobs.13
I add a reference in my Foo app to BlobUtilities which will upgrade to Blobs.13 and Common.13 but I've still got Queues.12 calling into Common.13

Why release only?

Going forward we shouldn't be relying on InternalsVisibleTo, but the released Common will need to always support it.

Going forward we shouldn't be relying on InternalsVisibleTo, but the released Common will need to always support it.

We can obsolete all of them.

Going forward we shouldn't be relying on InternalsVisibleTo, but the released Common will need to always support it.

We can obsolete all of them.
Good idea. Is it enough to just do at class level for all files in Legacy?

@JoshLove-msft @tg-msft do we have a bug for this? This seems like a cross cutting change that is touching storage and core. but I thought storage now has package dependency on core. How is this going to work?
/cc @seanmcc-msft

@JoshLove-msft @tg-msft do we have a bug for this? This seems like a cross cutting change that is touching storage and core. but I thought storage now has package dependency on core. How is this going to work?
/cc @seanmcc-msft

We are re-evaluating our approach for this, but to answer your question I think we would need to do a release of Core before releasing Storage to make this work with package dependencies. But the entire approach may change so that we don't need to modify Core.

This is unrelated to Core and we won't be re-releasing Core as part of this.  This is being tracked as part of the MQ work and was discussed with you at last week's sync about removing internal dependencies.  This PR is still in the Draft state and we'll reach out when we've got a clear plan about how to proceed.

Holding off on re-recording tests until after code is reviewed.


Typos fix and including more words for pt-br

I just fixed some typos PT-BR, included translations for words that were not translated and changed some words to better describe the tag's meaning. This is how I use it in my Portuguese blog.

Summary

Context

👏


JupyterLab 3.0 Release Umbrella Issue

JupyterLab's 3.0 release will be based on Jupyter Server - rather than Notebook - among other things.  This issue is created to track issues related to that effort.
Back-end tasks:

[x] Convert server tests to Jupyter Server's framework #831
[x] Rework server extension interface to Jupyter Server #834

Front-end tasks:

[ ] Clean up build

[ ] Remove redundant build steps
[ ] Figure out if new build files can be created dynamically on build (look into how core does it)

[ ] Get theme extension working
[ ] Get pipeline extension working
[ ] Test functionality that appears to be working
[ ] Lab icon redundant import issue has returned

Copying my notes from scrum here for reference:

Worked on switching to Lab 3.0 alpha 14 (beta wasn't fully published yet) and ran into issues with the move to the federated build system. This Issue looks like it will be creating transition scripts for our build files, but as far as I tried, it's not yet working. It is probably worth waiting until there is more documentation around the new build system before spending more dev hours on transitioning to it.

3.0 changeling for reference: https://jupyterlab.readthedocs.io/en/latest/getting_started/changelog.html
Task that need to be handled:

[] Clean up build

[] Remove redundant build steps
[] Figure out if new build files can be created dynamically on build (look into how core does it)

[] Get them extension working
[] Get pipeline extension working
[] Test functionality that appears to be working
[] lab icon redundant import issue has returned

Non-blocking upgrades to consider:

[] Support translation
[] Add debugger support to python editor
[] Support single document mode?

In an attempt to minimize the build changes I tried switching back to not using federated build, but hit a error, I've opened the following issue on lab to find a solution https://github.com/jupyterlab/jupyterlab/issues/9203
If this can be solved it would address the Clean up build bullet.

I notice the default configuration directory is changing from jupyter_notebook_config.d to jupyter_server_config.d and referenced in other places.  Do we need to consider some kind of upgrade script or instructions?  Might there also be pipeline updates for the 2.0 efforts?

I believe this is already handled on #1063
auto_extension_path = "./etc/config/jupyter_notebook_config.d/*.json"
auto_extension_path = "./etc/config/jupyter_server_config.d/elyra.json" # TODO change back to include git

I guess I was assuming that users may have added information to their elyra.json file or even marked the elyra extension as disabled for the moment.  Our objects do have configurable traits where this kind of thing would be configured (I think).  Are we doing anything to preserve configuration settings when an existing user upgrades from elyra 1.x to elyra 2.x?


Initial catchment attribute data

We need to catalog which catchment attributes we have available in the DRB

The other big one which has been brought up is streamcat: https://www.epa.gov/national-aquatic-resource-surveys/streamcat-metrics-and-definitions. The catch here is that these are on the NHD reaches where the prepped met data (see https://github.com/USGS-R/drb-do-ml/issues/5#issuecomment-955067932) and adjacency data are on the PRMS reaches.

Blodgett introduced me to this one: https://www.sciencebase.gov/catalog/item/5669a79ee4b08895842a1d47 which seems similar to streamcat. Not sure if they relate.

Blodgett introduced me to this one: https://www.sciencebase.gov/catalog/item/5669a79ee4b08895842a1d47 which seems similar to streamcat. Not sure if they relate.

This dataset looks really useful in that it provides a bunch of covariates processed and paired to NHDV2 flowline reaches (similar to EPA StreamCat). These data would require cross-walk from NHDV2 reaches to PRMS framework, though.


Announcement link for release of asp.net core 1.0.0 is broken.

@danroth27 - The announcement link: Announcement  is broken with release:asp.net core 1.0. Could you please provide correct link?

I believe its not broken but instead un-published. Wait few minutes and try :)


indexing: use $schemas field

Add to schema
Use for record_to_index (fall back to default behaviour).

Revisit invenio-rdm-records' 'invenio_search.mappings' here: https://github.com/inveniosoftware/invenio-rdm-records/blob/master/setup.py#L135 when this is tackled.

Fixed via IndexField system field.


vkcube: Fix object type printing in 32 bit mode

Previously the code assumed that all types were convertable to void*, since they happened to have the same size on 64 bit platforms. But in 32 bit, this is not true.
Now the code converts dispatchable handles to uintptr_t then to void* only for dispatchable types, printing all other types as non-dispatchable 64 bit ints.
@smcv Since there isn't an easy way for me to test these changes, could you verify that this works as intended for you?
Fixes #703

CI Vulkan-Tools build queued with queue ID 5282.

CI Vulkan-Tools build # 884 running.

CI Vulkan-Tools build # 884 passed.


[17.09] Serializing bitseq alloc

Cherry-pick of https://github.com/docker/libnetwork/pull/1788 for 17.09
git checkout -b 17.09-backport-ipam_alloc upstream/bump_17.09
git cherry-pick -s -S -x 5790b5c17ce7a6e2733ba0f4dfccced8144237e3
git cherry-pick -s -S -x 0184de8fc5074f94a74a0025ff60dab69cc442a9
git cherry-pick -s -S -x a2bcac00122a43d771af77ff060794dd02bb4a00

https://github.com/docker/libnetwork/pull/1947 may be needed to address the lint-errors

@abhi can you give the final blessing?

corresponding swarmkit change will required as well

/cc @andrewhsu in case we do a 17.09.2


Jekyll Assets & Gem-Based Jekyll Themes

This ticket is regarding the same stuff I pointed out in Jekyll earler in the day.. re-opening it here for consolidation of all my observations regarding this..
@envygeeks, you don't have to reply to this ticket because you have already stated your stance repeatedly..
you may simply apply fixes silently or ignore this entirely (because it may be really Jekyll's fault like you say..)
So what I'm saying throughout this ticket is..
--- " I'm not able to override theme-gem code when I use jekyll-assets v2.2.8 " ---

Jekyll Site Tests (uses Jekyll v3.2+)
With Jekyll 3.2.1

jekyll new testblog
modify Gemfile to use Jekyll 3.2.1, Minima 1.2, JekyllAssets 2.2.8
copy-paste _includes/head.html from Minima gem to source_dir
modify <source>/_includes/head.html by deleting the line that calls for main.css
bundle exec jekyll serve
Point browser to http://localhost:4000

=> I expect to see an un-styled blog.. but I get a fully styled blog instead..
With Jekyll 3.3.0 / Jekyll 3.3.1

Repeat the steps above but with ( Jekyll 3.3.0 / Jekyll 3.3.1 ) & Minima 2.1.0
=> Same expectation and same result

I first reported it in this comment
An issue-ticket was opened in response to it.. but was closed based on Parker's comment and my misunderstanding of the issue

jekyll/jekyll#5639 occurs because of this same bug
When this plugin is loaded, Jekyll no longer detects <source>/_includes/ (or any other scaffold-directory for that matter..)

I do plan on testing it and figure out where it resides for sure and fixing it no matter where it resides, my stance on it being an upstream bug doesn't change that any, the odd part is how little we mess about with Jekyll and how we are causing it.  I'm more intrigued as to how we are causing it then who's fault it is really.  I wanna know how.
Again, my stance on who's fault it is doesn't mean I wo't be looking into it.


Add code to allow the CallableResolver to resolve constructor dependencies.

This PR makes it nice and easy to ensure a Controller receives all of it's required dependencies without having to interact with the container itself.
See how tests/Mocks/ResolvingCallableDependencies/MultipleDependencyTest.php interacts with the MockDependency in the modified files below.
Without this change the following would have been required to get an instance of that dependency.
public function __construct(ContainerInterface $container = null)
{
    $this->container = $container;
    $this->dependency = $container->get(MockDependency::class);
}

This functionality means the controllers will no longer need direct access to the Container instance, which in itself isn't a problem, it can become annoying when your dependencies start building up.

Coverage increased (+0.04%) to 93.326% when pulling 87075ca1726ef9f126d8c4dcbd364734468a5623 on TomWright:3.x into f6884a7425e4ccf031ff8dda30c14e196bb67156 on slimphp:3.x.

Hey Tom, While I appreciate the amount of work that you have put into this Pull Request, this feature is a non-starter. We couldn't merge this PR as it would be a breaking change. Furthermore we are removing the requirement of having a container for the next major release of the framework.

Furthermore you can use PHP-DI's container if you wish to have auto-wiring!

Thanks for the quick response.
I had only ran phpunit locally so wasn't aware of the phpcs formatting errors yet. Other than those though I had attempted to make it backwards compatible.
I appreciate that you can get the auto-wiring functionality by using PHP-DI but thought it may be useful to have similar functionality out of the box. If you don't agree then that's fine also and I'll stick to using PHP-DI!
Thanks for your time.


Fix issue with inherited methods in interfaces

Given two interfaces
public interface Foo {

    void test(Object a);

}

public interface Bar extends Foo {

// inherits test

}

Bar b = ...;
b.test(); // cannot be solved

The issue arises from JavaParserTypeDeclarationAdapter.solveMethod
for (ReferenceType ancestor : typeDeclaration.getAncestors()) {
    SymbolReference<MethodDeclaration> res = MethodResolutionLogic.solveMethodInType(ancestor.getTypeDeclaration(), name, argumentsTypes, typeSolver);
    // consider methods from superclasses and only default methods from interfaces : not true, we should keep abstract as a valid candidate
    // abstract are removed in MethodResolutionLogic.isApplicable is necessary
    if (res.isSolved()&& (!ancestor.getTypeDeclaration().isInterface() || res.getCorrespondingDeclaration().isDefaultMethod())) {
        candidateMethods.add(res.getCorrespondingDeclaration());
    }
}

In this case Foo is an ancestor but because it's an interface it's methods won't be added as candidate methods (!ancestor.getTypeDeclaration().isInterface()).
I don't really know what the check was for but I'm removing it. I'm also adding another parameter for solving only static methods as the mechanism for solving statically imported methods also considered non-static ones in it's selection process.

Also, looking at ReflectionInterfaceDeclaration.solveMethod(...) it seems to only check for a method within the current interface. So something like
List<Integer> b;
b.toString();

Doesn't seem to resolve.
I've tried to add the ancestors as well but some tests fail because when faced with Object.equals(Object) and Set.equals(Object) it chooses the Object while Set should be preferred because it's an override.
@ftomassetti Is there any logic set in place which prioritizes overridden methods?

First of all thank you! The patch looks good. Maybe I will refactor it later to avoid having a boolean in the API and having instead solveMethod and solveStaticMethod but that can be done later.
About the logic for overriding: it should prefer candidates that come from closer ancestors. See MethodResolutionLogic.findMostApplicable. It is basically expecting to receive methods in an order that depends on how ancestors where visited.

@ftomassetti So I've tried to fix the issue in my previous comment and a test is failing because in this scenario:
Set<Integer> s1;
Set<Integer> s2;
s1.equals(s2);

s1.equals(...) resolves to Object.equals instead of Set.equals.
I've had a look at MethodResolutionLogic.findMostApplicable and it finds both methods as applicable:
ReflectionMethodDeclaration{method=public abstract boolean java.util.Set.equals(java.lang.Object)}
ReflectionMethodDeclaration{method=public boolean java.lang.Object.equals(java.lang.Object)}

But there is some logic at the start which removes abstract methods if a non-abstract is present so it's left with java.lang.Object.equals(java.lang.Object). Any idea as to how to go around this?

Well, you should probably remove the code that remove abstract methods: if anyway the methods are in the correct order it should always find the most specific one first. If that is not the case tests will definitely let us know...

@ftomassetti Removing it makes the tests pass again so I'll create a PR for it.

perfect, thanks!


adding metrics: number of active incoming requests, gc last run, proc…

…ess uptime, last response time for endpoint, response time metric for enpoint per status code

Coverage decreased (-0.6%) to 99.405% when pulling f286ed8edb01bd486554d3a89f0307f5d293da18 on ronayadid:master into 04c281d35df718856b36356e6eae02a50d400f6f on idanto:master.

Coverage remained the same at 100.0% when pulling eadbd625e422e2307a8255df104feb37696bd310 on ronayadid:master into 04c281d35df718856b36356e6eae02a50d400f6f on idanto:master.

Coverage remained the same at 100.0% when pulling e4bd64295b22f69609e39aacb7525c4c331b5d0b on ronayadid:master into 04c281d35df718856b36356e6eae02a50d400f6f on idanto:master.


Fix a Playwright test

the test:
"Test choosing [Operator -> Line # -> Route -> Stop station] opens the timestamp graph"
is skipped.
it can be found here:
tests/timeline.spec.ts

@NoamGaash may I unpin this issue as it's marked as closed?

sure! great catch, thanks!


ckcp can now be run without any app

This change should help deploying ckcp in a standalone manner.
Signed-off-by: Romain Arnaud<EMAIL_ADDRESS>

@bnallapeta This PR would help with the troubleshooting you are doing with the gitops team.
They would need to comment '.apps' and '.crs_to_sync' in 'developper/ckcp/config.yaml'

Thanks, @Roming22 for working on this! :")
You are awesome :rocket:

@Roming22 Maybe I wasn't clear in our discussion yesterday. The point I wanted to make was "Should ckcp, a dev environment created to use pipeline-service running on kcp be allowed to run just kcp without pipeline service itself?"
I believe we should not, because then the intention of ckcp becomes kcp + something on top of it rather than pipeline service in a developer environment. Just to clarify, I'm not saying we should not do it, but if that's what we want to provide with ckcp, then putting that under developer folder in pipeline service would not be the best idea.

@Roming22 Maybe I wasn't clear in our discussion yesterday. The point I wanted to make was "Should ckcp, a dev environment created to use pipeline-service running on kcp be allowed to run just kcp without pipeline service itself?"

Short answer: Yes, if it requires little effort on our end and as long as users know we're on a best effort regarding support.

I believe we should not, because then the intention of ckcp becomes kcp + something on top of it rather than pipeline service in a developer environment.

This tool lives in our repository because we were the first one to need it, and it was natural to keep everything together. It is now apparent that other development teams find the tool valuable. To be clear ckcp is indeed 'kcp deployed as a pod in a cluster' with pipeline-service on top. Every refactoring of the script has been to try to better separate each bit.

Just to clarify, I'm not saying we should not do it, but if that's what we want to provide with ckcp, then putting that under developer folder in pipeline service would not be the best idea.

I agree. Ideally ckcp should live somewhere else. Either within the kcp-dev repository as a dev tool, or in its own repository somewhere. The truth is that I'm not sure we can make that happen right now because we need to focus on the service itself.

Ideally ckcp should live somewhere else. Either within the kcp-dev repository as a dev tool, or in its own repository somewhere.

It is there: https://github.com/kcp-dev/helm-charts/tree/main/charts/kcp
and it has been there for a long time. Actually when we refined ckcp we took inspiration from the deployment in the kcp organization. Frankly I don't get why other projects don't want to consume it directly from there if they don't use Pipeline Service.
my 2 cents.

It is there: https://github.com/kcp-dev/helm-charts/tree/main/charts/kcp

My understanding is that:

This helm chart only install ckcp itself. Our script "magically" takes care of all the dependencies for the user and generates a kubeconfig so they're ready to login and use it by the time the script completed.
It install latest by default. I'm not familiar with Helm, so I'm not sure if there's a way to override the version. If there is, it's probably more involved than changing the version in config.yaml.

My take is that maybe we should be using that helm chart, but someone who wants to get started quickly and painlessly benefits immensely from our deployment script as they don't need to juggle the dependencies, versions and setting up the access.

Let me summarize our discussion on this PR.

Teams starting out to use kcp need a self-hosted kcp in order to experiment with their product on top of kcp.
kcp although provides a container image, our ckcp module uses that image and sets up a few different things on top.
We go agree as a team that there is value in providing ckcp module without pipeline service. This helps other teams use our module without pipeline service.
However, we also agreed that the current folder in which ckcp is available is not the ideal location.
So, this PR can be merged for now and then a later PR would bring in changes to

put this ckcp in another folder at the root of the repository.
or consider moving this into a separate repository.

@Roming22 @Mo3m3n @ramessesii2
If we all think this is okay, let me know and I can press that magic button :)


Docker Update broke everything

Hey I cannot access the webinterface anymore correctly not all tabs working and funktions/buttons are broken. When it was working the about page said that no plugins where installed. Cannot add Streamer and Streamer where already pressent when I checked the dashboard.

a lot of stuff was changed with the rewrite, a full docker rebuild is probably recommended if you're using that

a lot of stuff was changed with the rewrite, a full docker rebuild is probably recommended if you're using that

Good to know, but after I deleted everything the web container wont start because it cannot create some folder:
`$ node --enable-source-maps build/server.js
AppRoot: /usr/local/share/twitchautomator
DataRoot: /usr/local/share/twitchautomator
Initialising...
Environment: production
Running as user undefined
Data folder '/usr/local/share/twitchautomator/cache/cron' does not exist, creating.
Error: EACCES: permission denied, mkdir '/usr/local/share/twitchautomator/cache/cron'
at Object.mkdirSync (node:fs:1350:3)
at Function.createFolders (/usr/local/share/twitchautomator/server/src/Core/TwitchConfig.ts:323:20)
at Function.init (/usr/local/share/twitchautomator/server/src/Core/TwitchConfig.ts:411:22)
at Object. (/usr/local/share/twitchautomator/server/src/index.ts:21:14)
at Module._compile (node:internal/modules/cjs/loader:1099:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
at Module.load (node:internal/modules/cjs/loader:975:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
at node:internal/main/run_main_module:17:47 {
errno: -13,
syscall: 'mkdir',
code: 'EACCES',
path: '/usr/local/share/twitchautomator/cache/cron'
}
Node.js v17.9.0
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.`

hmm, you probably need to change the permissions of the mounted folders, i never really got into it with docker since it was so complicated

hmm, you probably need to change the permissions of the mounted folders, i never really got into it with docker since it was so complicated

What user should have permissions because it is courrently set to nobody and it seems it cannot write into it at all.

hmm, you probably need to change the permissions of the mounted folders, i never really got into it with docker since it was so complicated

Ok got it atleast starting now again. But cannot add any streams again and it does not find any tools.
`

2022-04-18 17:52:18
api
WARNING
No channels in channel list

2022-04-18 17:52:57
hook
INFO
Hook called

2022-04-18 17:52:57
hook
ERROR
Hook called with invalid JSON.

2022-04-18 17:52:58
config
SUCCESS
Saved config from settings form saved

2022-04-18 17:52:59
helper
INFO
Fetched new access token

2022-04-18 17:53:00
exec
INFO
Executing about binary check: python --version

2022-04-18 17:53:00
helper
ERROR
Process undefined for about binary check error: Error: spawn python ENOENT

2022-04-18 17:53:00
exec
INFO
Executing about binary check: python3 --version

2022-04-18 17:53:00
helper
INFO
Process undefined for about binary check exited with code -2

2022-04-18 17:53:00
helper
INFO
Process 40 for about binary check exited with code 0

2022-04-18 17:53:00
exec
INFO
Executing about binary check: node --version

2022-04-18 17:53:00
helper
INFO
Process 41 for about binary check exited with code 0

2022-04-18 17:53:00
helper
ERROR
tcd binary not found at: tcd

2022-04-18 17:53:00
helper
ERROR
Streamlink binary not found at: streamlink

2022-04-18 17:53:00
helper
ERROR
yt-dlp binary not found at: yt-dlp

2022-04-18 17:53:00
helper
ERROR
pipenv binary not found at: pipenv

2022-04-18 17:53:12
helper
ERROR
Channel data request for gronkh exceptioned: TypeError: Cannot read properties of undefined (reading 'get')

2022-04-18 17:53:13
route.channels.add
ERROR
Failed to create channel: Error: Could not get channel data for channel login: gronkh

2022-04-18 17:53:16
api
WARNING
No channels in channel list

2022-04-18 17:52:18	[api]()	WARNING	No channels in channel list
2022-04-18 17:52:57	[hook]()	INFO	Hook called
2022-04-18 17:52:57	[hook]()	ERROR	Hook called with invalid JSON.
2022-04-18 17:52:58	[config]()	SUCCESS	Saved config from settings form saved
2022-04-18 17:52:59	[helper]()	INFO	Fetched new access token
2022-04-18 17:53:00	[exec]()	INFO	Executing about binary check: python --version
2022-04-18 17:53:00	[helper]()	ERROR	Process undefined for about binary check error: Error: spawn python ENOENT
2022-04-18 17:53:00	[exec]()	INFO	Executing about binary check: python3 --version
2022-04-18 17:53:00	[helper]()	INFO	Process undefined for about binary check exited with code -2
2022-04-18 17:53:00	[helper]()	INFO	Process 40 for about binary check exited with code 0
2022-04-18 17:53:00	[exec]()	INFO	Executing about binary check: node --version
2022-04-18 17:53:00	[helper]()	INFO	Process 41 for about binary check exited with code 0
2022-04-18 17:53:00	[helper]()	ERROR	tcd binary not found at: tcd
2022-04-18 17:53:00	[helper]()	ERROR	Streamlink binary not found at: streamlink
2022-04-18 17:53:00	[helper]()	ERROR	yt-dlp binary not found at: yt-dlp
2022-04-18 17:53:00	[helper]()	ERROR	pipenv binary not found at: pipenv
2022-04-18 17:53:12	[helper]()	ERROR	Channel data request for gronkh exceptioned: TypeError: Cannot read properties of undefined (reading 'get')
2022-04-18 17:53:13	[route.channels.add]()	ERROR	Failed to create channel: Error: Could not get channel data for channel login: gronkh
2022-04-18 17:53:16	[api]()	WARNING	No channels in channel list`

that seems very odd indeed, are your client id and secret set? it seems like the api request is failing somehow

hmm, it might be failing even before that, are there any logs earlier about axios or something?

hmm, it might be failing even before that, are there any logs earlier about axios or something?

Dunno what else to say, this is a fresh start tried my own channel:
`

2022-04-18 20:13:21
config
SUCCESS
Loaded channel herrmaximal with 0 vods

2022-04-18 20:13:21
channel
SUCCESS
Loaded 2 channels!

2022-04-18 20:13:21
job
INFO
Loaded 0 jobs from cache

2022-04-18 20:13:21
config
SUCCESS
Loading config stuff done.

2022-04-18 20:13:51
exec
INFO
Executing about binary check: python --version

2022-04-18 20:13:51
helper
ERROR
Process undefined for about binary check error: Error: spawn python ENOENT

2022-04-18 20:13:51
exec
INFO
Executing about binary check: python3 --version

2022-04-18 20:13:51
helper
INFO
Process 40 for about binary check exited with code 0

2022-04-18 20:13:51
exec
INFO
Executing about binary check: node --version

2022-04-18 20:13:51
helper
INFO
Process undefined for about binary check exited with code -2

2022-04-18 20:13:51
helper
INFO
Process 41 for about binary check exited with code 0

2022-04-18 20:13:51
helper
ERROR
tcd binary not found at: tcd

2022-04-18 20:13:51
helper
ERROR
Streamlink binary not found at: streamlink

2022-04-18 20:13:51
helper
ERROR
yt-dlp binary not found at: yt-dlp

2022-04-18 20:13:51
helper
ERROR
pipenv binary not found at: pipenv

2022-04-18 20:13:53
hook
INFO
Hook called

2022-04-18 20:13:53
automator
INFO
Stream offline for herrmaximal

2022-04-18 20:13:53
automator
INFO
Stream end

2022-04-18 20:13:57
helper
INFO
Requesting subscriptions list

2022-04-18 20:13:58
helper
INFO
27 subscriptions

2022-04-18 20:13:21	[config]()	SUCCESS	Loaded [channel]() herrmaximal with 0 vods
2022-04-18 20:13:21	channel	SUCCESS	Loaded 2 channels!
2022-04-18 20:13:21	[job]()	INFO	Loaded 0 jobs from cache
2022-04-18 20:13:21	[config]()	SUCCESS	Loading config stuff done.
2022-04-18 20:13:51	[exec]()	INFO	Executing about binary check: python --version
2022-04-18 20:13:51	[helper]()	ERROR	Process undefined for about binary check error: Error: spawn python ENOENT
2022-04-18 20:13:51	[exec]()	INFO	Executing about binary check: python3 --version
2022-04-18 20:13:51	[helper]()	INFO	Process 40 for about binary check exited with code 0
2022-04-18 20:13:51	[exec]()	INFO	Executing about binary check: node --version
2022-04-18 20:13:51	[helper]()	INFO	Process undefined for about binary check exited with code -2
2022-04-18 20:13:51	[helper]()	INFO	Process 41 for about binary check exited with code 0
2022-04-18 20:13:51	[helper]()	ERROR	tcd binary not found at: tcd
2022-04-18 20:13:51	[helper]()	ERROR	Streamlink binary not found at: streamlink
2022-04-18 20:13:51	[helper]()	ERROR	yt-dlp binary not found at: yt-dlp
2022-04-18 20:13:51	[helper]()	ERROR	pipenv binary not found at: pipenv
2022-04-18 20:13:53	[hook]()	INFO	Hook called
2022-04-18 20:13:53	[automator]()	INFO	Stream offline for herrmaximal
2022-04-18 20:13:53	[automator]()	INFO	Stream end
2022-04-18 20:13:57	[helper]()	INFO	Requesting subscriptions list
2022-04-18 20:13:58	[helper]()	INFO	27 subscriptions`

ok i think i found the problem for the binaries at least, not sure about the other config stuff

pushed a version that should fix binary issues

pushed a version that should fix binary issues

Hmm now it wants to record but crashes completly because it says it cannot access the storage folder. But it created the streamer folder so it has permission for that. Dunno what to do.

same permissions issue, the folder has changed from public to just root/storage, but it should just work as before otherwise
might just be that docker is too simplistic for this kind of software

i guess changing permissions on the required folders to 777 would solve it? not ideal at all however

i also just moved all the user data related folders to /data, hopefully making it easier to organise, as more and more folders got used.

Oof yea, running this on Docker on Synology and also massively broke my installation. Is there a way to revert or maybe receive instructions on how to get this up and running again on Docker running synology?

https://github.com/MrBrax/TwitchAutomator/tree/bbf4eb502e44c2b2f09a8a7e1cb16370930da28b
This commit should be stable. Download the whole thing and run docker-compose build and docker-compose up -d to run.
I don't really have an environment to test docker in, but moving your config/logs/cache folders into the new data folder and putting 777 permissions on it should work until a solution is found for the permissions.

now I cannot access the site at all, since all the data ist stored in one folder I guess. I found this online maybe this will help you with the docker file.
https://stackoverflow.com/questions/29245216/write-in-shared-volumes-docker

Also, I'm noticing when pulling from Dockerhub it has some of your configurations and I am unable to overwrite them. Some aspects include twitch client and secret ID, binary locations for files not pertaining to my settings that include your username, etc etc.

ok I think I found the fix for the files having the wrong permissions with docker, atleast I hope. Should I open a Pull Request?
I guess I also created a XML File for Unraid, would need a Picture to Upload so it looks nice.

@MrBrax ok I think I found the fix for the files having the wrong permissions with docker, atleast I hope. Should I open a Pull Request? I guess I also created a XML File for Unraid, would need a Picture to Upload so it looks nice.

If it works then yeah go ahead, i think i might just drop docker support since it's such a pain in the ass to get working, and keeping all the correct files in it

@MrBrax ok I think I found the fix for the files having the wrong permissions with docker, atleast I hope. Should I open a Pull Request? I guess I also created a XML File for Unraid, would need a Picture to Upload so it looks nice.

If it works then yeah go ahead, i think i might just drop docker builds since it's such a pain in the ass to get working, and keeping all the correct files in it

Gonna test it locally first if it actually works, then gonna open the PR with everything in it even then xml for unraid if it wokrs.

i'm setting up a linux vm to check what's actually going on, on windows it works fine with docker desktop, but there must be something with the passthrough permissions on linux that goes wrong

i'm setting up a linux vm to check what's actually going on, on windows it works fine with docker desktop, but there must be something with the passthrough permissions on linux that goes wrong

as far as I understood is, that users are not users. Like on ubuntu user xyz is user abc on arch or something.
This is what I found: https://forums.unraid.net/topic/39289-adapting-container-user-and-group-ids-to-the-host/

especially:
Apps run commands like "chown -R nobody:users", but the UID for nobody and the GID for users may not match the host

so i just ran build and up (with sudo due to no rootless docker) and it just worked, correct permissions were set for the data/storage folders

so i just ran build and up (with sudo due to no rootless docker) and it just worked, correct permissions were set for the data/storage folders

what linux did you use?

ubuntu server 20.04 with docker picked at install, did a git checkout and ran sudo docker-compose build and up

ubuntu server 20.04 with docker picked at install, did a git checkout and ran sudo docker-compose build and up i did not do any recordings, but it managed to make the folders at first launch

ok will check with manjaro/Arch if this works.

ubuntu server 20.04 with docker picked at install, did a git checkout and ran sudo docker-compose build and up i did not do any recordings, but it managed to make the folders at first launch

just did the same on arch, worked aswell, but cannot open the webinterface 500

ubuntu server 20.04 with docker picked at install, did a git checkout and ran sudo docker-compose build and up i did not do any recordings, but it managed to make the folders at first launch

just did the same on arch, worked aswell, but cannot open the webinterface 500

oh yeah true, i'll see what's up

maybe there's an selinux issue?

dunno, as far as I understand the docker cannot write its files because of permissions.
500 Error message:
twitchautomator-master-web-1   | ::ffff:<IP_ADDRESS> - - [19/Apr/2022:14:36:21 +0000] "GET /api/v0/settings HTTP/1.1" 500 148 "http://localhost:8082/dashboard" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36"
twitchautomator-master-web-1   | /usr/local/share/twitchautomator/server/src/Core/TwitchConfig.ts:383
twitchautomator-master-web-1   |         const ws_path = http_path.replace(/^https:\/\//, "wss://").replace(/^http:\/\//, "ws://");
twitchautomator-master-web-1   |                                   ^
twitchautomator-master-web-1   |
twitchautomator-master-web-1   | TypeError: Cannot read properties of undefined (reading 'replace')
twitchautomator-master-web-1   |     at Function.getWebsocketClientUrl (/usr/local/share/twitchautomator/server/src/Core/TwitchConfig.ts:383:35)
twitchautomator-master-web-1   |     at GetSettings (/usr/local/share/twitchautomator/server/src/Controllers/Settings.ts:29:41)
twitchautomator-master-web-1   |     at Layer.handle (/usr/local/share/twitchautomator/server/node_modules/express/lib/router/layer.js:95:5)
twitchautomator-master-web-1   |     at next (/usr/local/share/twitchautomator/server/node_modules/express/lib/router/route.js:137:13)
twitchautomator-master-web-1   |     at Route.dispatch (/usr/local/share/twitchautomator/server/node_modules/express/lib/router/route.js:112:3)
twitchautomator-master-web-1   |     at Layer.handle (/usr/local/share/twitchautomator/server/node_modules/express/lib/router/layer.js:95:5)
twitchautomator-master-web-1   |     at <anonymous> (/usr/local/share/twitchautomator/server/node_modules/express/lib/router/index.js:281:22)
twitchautomator-master-web-1   |     at Function.process_params (/usr/local/share/twitchautomator/server/node_modules/express/lib/router/index.js:341:12)
twitchautomator-master-web-1   |     at next (/usr/local/share/twitchautomator/server/node_modules/express/lib/router/index.js:275:10)
twitchautomator-master-web-1   |     at Function.handle (/usr/local/share/twitchautomator/server/node_modules/express/lib/router/index.js:174:3)

ok that issue should be fixed, just deleted that vm, apparently 30 gigs disk is not enough to run docker

@MrBrax ok I think I found the fix for the files having the wrong permissions with docker, atleast I hope. Should I open a Pull Request? I guess I also created a XML File for Unraid, would need a Picture to Upload so it looks nice.

 Gotta ask a college of mine how he did it with our tools to work so good. We even use docker in production. For development it's great if you have a ton for different environments so you just start docker and there is your project and you can tinker about. Maybe it has something to do if you use docker from the start. Anyways if I find time today will look at permissions again. Yesterday it worked even on unRAID with the XML/docker I made. So fingers crossed.

yeah docker can be nice when it just works and you don't have to tinker with it, just feels like hacks on top of hacks to get stuff working
i think it should launch now at least

ok that issue should be fixed, just deleted that vm, apparently 30 gigs disk is not enough to run docker

@MrBrax ok I think I found the fix for the files having the wrong permissions with docker, atleast I hope. Should I open a Pull Request? I guess I also created a XML File for Unraid, would need a Picture to Upload so it looks nice.

 Gotta ask a college of mine how he did it with our tools to work so good. We even use docker in production. For development it's great if you have a ton for different environments so you just start docker and there is your project and you can tinker about. Maybe it has something to do if you use docker from the start. Anyways if I find time today will look at permissions again. Yesterday it worked even on unRAID with the XML/docker I made. So fingers crossed.

By chance do you mind posting the XML changes you made? Having difficulties with the recordings not working. Thanks :)

here is my xml:
<?xml version="1.0"?> <Container version="2">   <Name>twitchautomator</Name>   <Repository>mrbrax/twitchautomator</Repository>   <Registry>https://hub.docker.com/r/mrbrax/twitchautomator/</Registry>   <Network>proxynet</Network>   <MyIP/>   <Shell>sh</Shell>   <Privileged>false</Privileged>   <Support>https://github.com/MrBrax/TwitchAutomator/issues</Support>   <Project>https://github.com/MrBrax/TwitchAutomator</Project>   <Overview>An automatic twitch recorder.
 I have no idea if this works. </Overview>   <Category>MediaApp:Video</Category>   <WebUI/>   <TemplateURL/>   <Icon>/plugins/dynamix.docker.manager/images/question.png</Icon>   <ExtraParams/>   <PostArgs/>   <CPUset/>   <DateInstalled>1650428860</DateInstalled>   <DonateText/>   <DonateLink/>   <Requires/>   <Config Name="Webinterface" Target="8080" Default="8080" Mode="tcp" Description="WebUI Port" Type="Port" Display="always" Required="true" Mask="false">8146</Config>   <Config Name="Host Path 1" Target="/usr/local/share/twitchautomator/data" Default="/mnt/user/appdata" Mode="rw" Description="" Type="Path" Display="always" Required="false" Mask="false">/mnt/user/twitch_vods/</Config>   <Config Name="PUID" Target="PUID" Default="99" Mode="" Description="" Type="Variable" Display="advanced" Required="false" Mask="false">99</Config>   <Config Name="PGID" Target="PGID" Default="100" Mode="" Description="" Type="Variable" Display="advanced" Required="false" Mask="false">100</Config>   <Config Name="UMASK" Target="UMASK" Default="022" Mode="" Description="" Type="Variable" Display="advanced" Required="false" Mask="false">022</Config> </Container>

yeah docker can be nice when it just works and you don't have to tinker with it, just feels like hacks on top of hacks to get stuff working
i think it should launch now at least

Yeah ots launching and working for me

alright good, i just ditched the separate cron container, so only one will be required soon

alright good, i just ditched the separate cron container, so only one will be required soon

what is it used for? my unraid one is running without it :D

alright good, i just ditched the separate cron container, so only one will be required soon

what is it used for? my unraid one is running without it :D

cronjobs, like checking for muted and deleted vods twice a day. entirely optional but if you want to keep vods deleted from twitch then it's useful

alright good, i just ditched the separate cron container, so only one will be required soon

maybe I was to soon, kinda crazy its recording on an earlier stream I did and is saysing its missing 2h or something:
`

2022-04-20 13:57:13
automator
INFO
Stream online for herrmaximal (retry 0)

2022-04-20 13:57:13
vodclass
INFO
Create VOD JSON for herrmaximal: herrmaximal_2022-04-20T11_56_34Z_39305649128.json @ /usr/local/share/twitchautomator/data/storage/vods/herrmaximal

2022-04-20 13:57:13
vodclass
SUCCESS
Saving JSON of herrmaximal_2022-04-20T11_56_34Z_39305649128 (create json)

2022-04-20 13:57:13
vodclass
ERROR
No chapters on herrmaximal_2022-04-20T11_56_34Z_39305649128!

2022-04-20 13:57:13
vodclass
WARNING
Loaded VOD herrmaximal_2022-04-20T11_56_34Z_39305649128 is not finalized!

2022-04-20 13:57:13
vodclass
ERROR
Vod on disk and vod in memory are not the same for herrmaximal

2022-04-20 13:57:13
vodclass
ERROR
Vod on disk and vod in main memory are not the same for herrmaximal

2022-04-20 13:57:13
vodclass
ERROR
Vod in memory and vod in main memory are not the same for herrmaximal

2022-04-20 13:57:13
vodclass
WARNING
Saving JSON of herrmaximal_2022-04-20T11_56_34Z_39305649128 with no chapters!!

2022-04-20 13:57:13
vodclass
SUCCESS
Saving JSON of herrmaximal_2022-04-20T11_56_34Z_39305649128 (is_capturing set)

2022-04-20 13:57:13
automator
INFO
Update game for herrmaximal_2022-04-20T11_56_34Z_39305649128

2022-04-20 13:57:13
vodclass
WARNING
Saving JSON of herrmaximal_2022-04-20T11_56_34Z_39305649128 with no chapters!!

2022-04-20 13:57:13
vodclass
SUCCESS
Saving JSON of herrmaximal_2022-04-20T11_56_34Z_39305649128 (dt_capture_started set)

2022-04-20 13:57:13
automator
INFO
Starting capture with filename herrmaximal_2022-04-20T11_56_34Z_39305649128.ts

2022-04-20 13:57:13
automator
SUCCESS
Spawned process 83 for capture_herrmaximal_2022-04-20T11_56_34Z_39305649128

2022-04-20 13:57:13
job
INFO
Save job capture_herrmaximal_2022-04-20T11_56_34Z_39305649128 with PID 83 to /usr/local/share/twitchautomator/data/cache/pids/capture_herrmaximal_2022-04-20T11_56_34Z_39305649128.json

2022-04-20 13:57:13
vodclass
INFO
VOD JSON herrmaximal_2022-04-20T11_56_34Z_39305649128 changed (external/change)!

2022-04-20 13:57:13
vodclass
INFO
VOD JSON herrmaximal_2022-04-20T11_56_34Z_39305649128 exists (again?) change

2022-04-20 13:57:13
vodclass
INFO
VOD JSON herrmaximal_2022-04-20T11_56_34Z_39305649128 changed (external/change)!

2022-04-20 13:57:13
vodclass
INFO
VOD JSON herrmaximal_2022-04-20T11_56_34Z_39305649128 exists (again?) change

2022-04-20 13:57:13
exec
INFO
Executing about binary check: /usr/bin/ffmpeg -version

2022-04-20 13:57:13
helper
INFO
Process 86 for about binary check exited with code 0

2022-04-20 13:57:13
exec
INFO
Executing about binary check: /usr/bin/mediainfo --Version

2022-04-20 13:57:13
helper
INFO
Process 87 for about binary check exited with code 0

2022-04-20 13:57:13
exec
INFO
Executing about binary check: /usr/local/bin/TwitchDownloaderCLI --version 2>&1

2022-04-20 13:57:13
helper
ERROR
Process undefined for about binary check error: Error: spawn /usr/local/bin/TwitchDownloaderCLI ENOENT

2022-04-20 13:57:13
exec
INFO
Executing about binary check: python --version

2022-04-20 13:57:13
helper
ERROR
Process undefined for about binary check error: Error: spawn python ENOENT

2022-04-20 13:57:13
exec
INFO
Executing about binary check: python3 --version

2022-04-20 13:57:13
helper
INFO
Process 90 for about binary check exited with code 0

2022-04-20 13:57:13
exec
INFO
Executing about binary check: node --version

2022-04-20 13:57:13
helper
INFO
Process undefined for about binary check exited with code -2

2022-04-20 13:57:13
helper
INFO
Process undefined for about binary check exited with code -2

2022-04-20 13:57:13
helper
INFO
Process 91 for about binary check exited with code 0

2022-04-20 13:57:13
helper
ERROR
pipenv binary not found at: /usr/local/bin/pipenv

2022-04-20 13:57:13
exec
INFO
Executing about pip check: /usr/local/bin/streamlink --version

2022-04-20 13:57:14
helper
INFO
Process 92 for about pip check exited with code 0

2022-04-20 13:57:14
exec
INFO
Executing about pip check: /usr/local/bin/yt-dlp --version

2022-04-20 13:57:14
helper
INFO
Process 94 for about pip check exited with code 0

2022-04-20 13:57:14
automator
INFO
Stream resolution for herrmaximal_2022-04-20T11_56_34Z_39305649128: 1080p60

2022-04-20 13:57:14
automator
INFO
Capturing of herrmaximal_2022-04-20T11_56_34Z_39305649128, will try to remove ads!

2022-04-20 13:57:14
automator
INFO
Writing output

2022-04-20 13:57:41
hook
INFO
Hook called

2022-04-20 13:57:41
hook
ERROR
Hook called with invalid JSON.

2022-04-20 13:57:50
config
SUCCESS
Saved config from settings form saved

2022-04-20 13:57:13	[automator]()	INFO	Stream online for herrmaximal (retry 0)
2022-04-20 13:57:13	[vodclass]()	INFO	Create VOD JSON for herrmaximal: herrmaximal_2022-04-20T11_56_34Z_39305649128.json @ /usr/local/share/twitchautomator/data/storage/vods/herrmaximal
2022-04-20 13:57:13	[vodclass]()	SUCCESS	Saving JSON of herrmaximal_2022-04-20T11_56_34Z_39305649128 (create json)
2022-04-20 13:57:13	[vodclass]()	ERROR	No chapters on herrmaximal_2022-04-20T11_56_34Z_39305649128!
2022-04-20 13:57:13	[vodclass]()	WARNING	Loaded VOD herrmaximal_2022-04-20T11_56_34Z_39305649128 is not finalized!
2022-04-20 13:57:13	[vodclass]()	ERROR	Vod on disk and vod in memory are not the same for herrmaximal
2022-04-20 13:57:13	[vodclass]()	ERROR	Vod on disk and vod in main memory are not the same for herrmaximal
2022-04-20 13:57:13	[vodclass]()	ERROR	Vod in memory and vod in main memory are not the same for herrmaximal
2022-04-20 13:57:13	[vodclass]()	WARNING	Saving JSON of herrmaximal_2022-04-20T11_56_34Z_39305649128 with no chapters!!
2022-04-20 13:57:13	[vodclass]()	SUCCESS	Saving JSON of herrmaximal_2022-04-20T11_56_34Z_39305649128 (is_capturing set)
2022-04-20 13:57:13	[automator]()	INFO	Update game for herrmaximal_2022-04-20T11_56_34Z_39305649128
2022-04-20 13:57:13	[vodclass]()	WARNING	Saving JSON of herrmaximal_2022-04-20T11_56_34Z_39305649128 with no chapters!!
2022-04-20 13:57:13	[vodclass]()	SUCCESS	Saving JSON of herrmaximal_2022-04-20T11_56_34Z_39305649128 (dt_capture_started set)
2022-04-20 13:57:13	[automator]()	INFO	Starting capture with filename herrmaximal_2022-04-20T11_56_34Z_39305649128.ts
2022-04-20 13:57:13	[automator]()	SUCCESS	Spawned process 83 for capture_herrmaximal_2022-04-20T11_56_34Z_39305649128
2022-04-20 13:57:13	[job]()	INFO	Save job capture_herrmaximal_2022-04-20T11_56_34Z_39305649128 with PID 83 to /usr/local/share/twitchautomator/data/cache/pids/capture_herrmaximal_2022-04-20T11_56_34Z_39305649128.json
2022-04-20 13:57:13	[vodclass]()	INFO	VOD JSON herrmaximal_2022-04-20T11_56_34Z_39305649128 changed (external/change)!
2022-04-20 13:57:13	[vodclass]()	INFO	VOD JSON herrmaximal_2022-04-20T11_56_34Z_39305649128 exists (again?) change
2022-04-20 13:57:13	[vodclass]()	INFO	VOD JSON herrmaximal_2022-04-20T11_56_34Z_39305649128 changed (external/change)!
2022-04-20 13:57:13	[vodclass]()	INFO	VOD JSON herrmaximal_2022-04-20T11_56_34Z_39305649128 exists (again?) change
2022-04-20 13:57:13	[exec]()	INFO	Executing about binary check: /usr/bin/ffmpeg -version
2022-04-20 13:57:13	[helper]()	INFO	Process 86 for about binary check exited with code 0
2022-04-20 13:57:13	[exec]()	INFO	Executing about binary check: /usr/bin/mediainfo --Version
2022-04-20 13:57:13	[helper]()	INFO	Process 87 for about binary check exited with code 0
2022-04-20 13:57:13	[exec]()	INFO	Executing about binary check: /usr/local/bin/TwitchDownloaderCLI --version 2>&1
2022-04-20 13:57:13	[helper]()	ERROR	Process undefined for about binary check error: Error: spawn /usr/local/bin/TwitchDownloaderCLI ENOENT
2022-04-20 13:57:13	[exec]()	INFO	Executing about binary check: python --version
2022-04-20 13:57:13	[helper]()	ERROR	Process undefined for about binary check error: Error: spawn python ENOENT
2022-04-20 13:57:13	[exec]()	INFO	Executing about binary check: python3 --version
2022-04-20 13:57:13	[helper]()	INFO	Process 90 for about binary check exited with code 0
2022-04-20 13:57:13	[exec]()	INFO	Executing about binary check: node --version
2022-04-20 13:57:13	[helper]()	INFO	Process undefined for about binary check exited with code -2
2022-04-20 13:57:13	[helper]()	INFO	Process undefined for about binary check exited with code -2
2022-04-20 13:57:13	[helper]()	INFO	Process 91 for about binary check exited with code 0
2022-04-20 13:57:13	[helper]()	ERROR	pipenv binary not found at: /usr/local/bin/pipenv
2022-04-20 13:57:13	[exec]()	INFO	Executing about pip check: /usr/local/bin/streamlink --version
2022-04-20 13:57:14	[helper]()	INFO	Process 92 for about pip check exited with code 0
2022-04-20 13:57:14	[exec]()	INFO	Executing about pip check: /usr/local/bin/yt-dlp --version
2022-04-20 13:57:14	[helper]()	INFO	Process 94 for about pip check exited with code 0
2022-04-20 13:57:14	[automator]()	INFO	Stream resolution for herrmaximal_2022-04-20T11_56_34Z_39305649128: 1080p60
2022-04-20 13:57:14	[automator]()	INFO	Capturing of herrmaximal_2022-04-20T11_56_34Z_39305649128, will try to remove ads!
2022-04-20 13:57:14	[automator]()	INFO	Writing output
2022-04-20 13:57:41	[hook]()	INFO	Hook called
2022-04-20 13:57:41	[hook]()	ERROR	Hook called with invalid JSON.
2022-04-20 13:57:50	[config]()	SUCCESS	Saved config from settings form saved`

are you running two instances of it at the same time? looks weird for sure

are you running two instances of it at the same time? looks weird for sure, unless it's that auto updater thing
other errors can appear in the console log, so be sure to check that too

Ok I think I have it figured out. You have to set the permissions of the host volume to GID and PID 1000. Which refers to your used node user. This I will update on the Unraid XML and create a whater ever a merge request is called here again. (used to gitlab). With your permission of course, will be published to the unraid Community Applications. I referenced your github page everywhere so the credits go to you.
Last if you have a link for me, with the logo of TA so I can link that as well.

sure thing!
there's a logo png here: https://github.com/MrBrax/TwitchAutomator/blob/master/client-vue/src/assets/favicon-huge.png

So apologies for my lack of knowledge but through the pushes and help from Serph I was able to get the host working. I am having an issue of it not finding the binaries nor seeing my hard drive space on my NAS. I also seem to be running into an issue of the docker configuration not creating the folders in usr/local/shares/twitchautomator/data but is able to make the folder and subsequent files when running creating the docker where docker-compose is.
If anyone can kind of hold my hand and walking me through fixing this I'd greatly appreciate it. Currently my setup is Synology NAS running docker while using Portainer to create and edit the dockers.

So apologies for my lack of knowledge but through the pushes and help from Serph I was able to get the host working. I am having an issue of it not finding the binaries nor seeing my hard drive space on my NAS. I also seem to be running into an issue of the docker configuration not creating the folders in usr/local/shares/twitchautomator/data but is able to make the folder and subsequent files when running creating the docker where docker-compose is.
If anyone can kind of hold my hand and walking me through fixing this I'd greatly appreciate it. Currently my setup is Synology NAS running docker while using Portainer to create and edit the dockers.

So apologies for my lack of knowledge but through the pushes and help from Serph I was able to get the host working. I am having an issue of it not finding the binaries nor seeing my hard drive space on my NAS. I also seem to be running into an issue of the docker configuration not creating the folders in usr/local/shares/twitchautomator/data but is able to make the folder and subsequent files when creating the docker where docker-compose is.
If anyone can kind of hold my hand and walking me through fixing this I'd greatly appreciate it. Currently my setup is Synology NAS running docker while using Portainer to create and edit the dockers.

I have read alot about Synology and permission errors while searching to fix my problem with unRAID. I would suggest you start here:https://www.synoforum.com/threads/docker-permissions-how-and-where.5022/ .  Because I have no real knowledge about Synology Nas.

sure thing!
there's a logo png here: https://github.com/MrBrax/TwitchAutomator/blob/master/client-vue/src/assets/favicon-huge.png

Looks like it needs to be a specific size. Will change in and also add in the merge.
2 questions:

The vod download is not working atm? There are no logs about it failing only that the route is called.

Telegram integrations is not working I guess. Set it to notify when channel goes online. And have entered my telegram information but never received a message. Used this info in one other docker where it is working.

sure thing!
there's a logo png here: https://github.com/MrBrax/TwitchAutomator/blob/master/client-vue/src/assets/favicon-huge.png

Looks like it needs to be a specific size. Will change in and also add in the merge.
2 questions:
* The vod download is not working atm? There are no logs about it failing only that the route is called.

* Telegram integrations is not working I guess. Set it to notify when channel goes online. And have entered my telegram information but never received a message. Used this info in one other docker where it is working.

the tools have not been reimplemented yet but the vod download button on a captured vod should be working, if that's what you mean
so telegram works on one setup but not another? are there any errors in the console output?

sure thing!
there's a logo png here: https://github.com/MrBrax/TwitchAutomator/blob/master/client-vue/src/assets/favicon-huge.png

Looks like it needs to be a specific size. Will change in and also add in the merge.
2 questions:
* The vod download is not working atm? There are no logs about it failing only that the route is called.

* Telegram integrations is not working I guess. Set it to notify when channel goes online. And have entered my telegram information but never received a message. Used this info in one other docker where it is working.

the tools have not been reimplemented yet but the vod download button on a captured vod should be working, if that's what you mean
so telegram works on one setup but not another? are there any errors in the console output?

Sorry, maybe I did not express myself clearly enough.

On the tools page this vod download is not working. ( I dont need it, just asking if still something is broke on my end)
In another tool the telegram integration works with the credentials I also used in TwitchAutomator, but TA wont notify me on Telegram
Third question can I somehow reimport/copy my old recordings or would it not work`?

Sorry, maybe I did not express myself clearly enough.
* On the tools page this vod download is not working. ( I dont need it, just asking if still something is broke on my end)

* can I somehow reimport/copy my old recordings or would it not work`?

the vod and chat download tools should work now, reimplemented again
the old recordings unfortunately won't work no, i changed the json format around so it would be less bloated and better structured, and writing a parser for every component would be a bit too much

Is it possible to have DockerHub update the image with these recent commits?

Sorry, maybe I did not express myself clearly enough.
* On the tools page this vod download is not working. ( I dont need it, just asking if still something is broke on my end)

* can I somehow reimport/copy my old recordings or would it not work`?

the vod and chat download tools should work now, reimplemented again
the old recordings unfortunately won't work no, i changed the json format around so it would be less bloated and better structured, and writing a parser for every component would be a bit too much

Is it possible to have DockerHub update the image with these recent commits? It may also be easier on you to setup a Github Action to publish to Dockerhub on new release tags or merges into main

yeah i'll make one right now
i looked at the auto publish stuff on dockerhub but they wanted complete control over my account, and github actions is extremely complicated, but maybe i can figure it out

If it helps, I have a project that I have publishing to both Github Registry and Docker Hub: https://github.com/djdembeck/bragibooks/blob/main/.github/workflows/docker-publish.yml
You would just need to setup repository secrets for DOCKER_USERNAME and DOCKER_PASSWORD and change djdembeck/bragibooks to mrbrax/twitchautomator

If it helps, I have a project that I have publishing to both Github Registry and Docker Hub: https://github.com/djdembeck/bragibooks/blob/main/.github/workflows/docker-publish.yml
You would just need to setup repository secrets (Settings>Secrets>Actions) for your Dockerhub credentials DOCKER_USERNAME and DOCKER_PASSWORD and change djdembeck/bragibooks to mrbrax/twitchautomator

thanks, got it up and running!
gotta figure out why it takes up a gig though, that's all kinds of weird.

That’s typical of Ubuntu based images. You can check what the base image size on its own is, but I think it’s 800-900MB

pretty sure that's separate though, just these add up quick

alright found a few tricks to reduce the size

so i guess it works then? otherwise open more issues for smaller ones


Update index.md

Please confirm this pull request meets the following requirements:

[ x] I followed the contributing guidelines: https://github.com/github/explore/blob/main/CONTRIBUTING.md.
[ x] I have no affiliation with the project I am suggesting (as a maintainer, creator, contractor, or employee).

Which change are you proposing?

[ ] Suggesting edits to an existing topic or collection
[ x] Curating a new topic or collection
[ ] Something that does not neatly fit into the binary options above

Editing an existing topic or collection
I'm suggesting these edits to an existing topic or collection:

[ x] Image (and my file is *.png, square, dimensions 288x288, size <= 75 kB)
[ x] Content (and my changes are in index.md)

Please replace this line with an explanation of why you think these changes should be made.

I hope this new topic can help people to find resources about ranganathan
Curating a new topic or collection

[ x] I've formatted my changes as a new folder directory, named for the topic or collection as it appears in the URL on GitHub (e.g. https://github.com/topics/[NAME] or https://github.com/collections/[NAME])
[ x] My folder contains a *.png image (if applicable) and index.md
[ x] All required fields in my index.md conform to the Style Guide and API docs: https://github.com/github/explore/tree/main/docs

Please replace this line with an explanation of why you think this topic or collection should be curated.

Ranganathan is the father of the moder library science
Something that does not neatly fit into the binary options above

[ ] My suggested edits are not about an existing topic or collection, or at least not a single one
[ ] My suggested edits are not about curating a new topic or collection, or at least not a single one
[ ] My suggested edits conform to the Style Guide and API docs: https://github.com/github/explore/tree/main/docs

Please replace this line with an explanation of your proposed changes.

I have created the directory, the png image and the index.md
Please note: we will close your PR without comment if you do not check the boxes above and provide ALL requested information.

Thanks


[BUG] Could not load multimedia backend "ffmpeg"

Could not load multimedia backend "ffmpeg"
I strongly believe this is rather not a bug but my mere misunderstanding of how manim-slides work, but let me explain this because it can be related with the reproducibility of the package installation.
When I execute manim-slides BasicExample, it give me the following message:
could not load multimedia backend "ffmpeg"
QtMultimedia is not currently supported on this platform or compiler.
Failed to create QVideoSink "Not available"
Failed to initialize QMediaPlayer "Not available"

I thought this is the problem coming from the absence of ffmpeg or qt5, so I installed them globally on my system. However, the problem persists.
Version
manim-slides, version 5.0.0
Platform
NixOS 23.05.
If this issue gets solved, I'm interested in packaging the manim-slides  for NixOS.
I personally think manim-slides would work a lot better with system level package manager (apt, dnf, pacman, etc), due to its heavy dependency on various software frameworks.
Screenshots
No response
Additional information
No response

Hello, you are right that dependencies can become very hard to manage, especially on OSes like yours.
Is NixOS Linux based? I would have guessed that it support the manylinux binaries, but maybe not.
As you can read, the Qt plug-in for displaying multimedia does not seem to be available on your platform.. I might be good to first investigate that issue further

Right, NixOS is Linux based. So I think there might not be some specific issue that can cause the malfunction of the Qt multimedia plug-in.
Is manim-slides specifically depending on qt5? I tried both qt5 and qt6 on my system, but it didn't work properly.
If there is a Dockerfile for manim-slides, I might be able to investigate the issue by comparing the Dockerfile's setup procedure and that of my system.

Also, I'd like to mention that someone proposed the packaging of manim-slides for the NixOS package manager, but looks like there is no significant progress for a few months, so it might be a good idea for us to resume the packaging.

Creating a working Dockerfile is an ongoing issue but I didn’t time yet to work on that…
Qt is a required dependency for the present mode (+ wizard).
What I don’t know is whether the issue is from Qt, or from PySide6 bindings. Maybe you can try using PyQt6. For that, I might need to rewrite the code so people can chose the bindings they prefer.

Just a side note:

I thought this is the problem coming from the absence of ffmpeg or qt5, so I installed them globally on my system. However, the problem persists.

Starting with v5.1, also waiting next Manim release (to be in sync), Manim Slides and Manim should not depend on a global FFMPEG installation anymore, because we will use PyAV that ships the necessary bindings. PySide6 should also ship ffmpeg bindings itself, I think.

Regarding your issue, can you try installing PyQt6 and see if you can import the multimedia module?
E.g., run this (change the video file path):
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QPushButton, QSlider
from PyQt6.QtMultimedia import QMediaPlayer
from PyQt6.QtMultimediaWidgets import QVideoWidget
from PyQt6.QtCore import QUrl, Qt

class VideoPlayer(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("Video Player")
        self.setGeometry(100, 100, 1024, 768)

        self.media_player = QMediaPlayer()
        self.media_player.setSource(QUrl.fromLocalFile("Video.mp4"))

        self.video_widget = QVideoWidget()

        self.start_button = QPushButton("Start")
        self.start_button.clicked.connect(self.start_video)

        self.pause_button = QPushButton("Pause")
        self.pause_button.clicked.connect(self.pause_video)

        self.stop_button = QPushButton("Stop")
        self.stop_button.clicked.connect(self.stop_video)

        self.slider = QSlider(Qt.Orientation.Horizontal)
        self.slider.sliderMoved.connect(self.set_position)

        self.media_player.setVideoOutput(self.video_widget)
        self.media_player.positionChanged.connect(self.position_changed)
        self.media_player.durationChanged.connect(self.duration_changed)

        layout = QVBoxLayout()
        layout.addWidget(self.video_widget)
        layout.addWidget(self.start_button)
        layout.addWidget(self.pause_button)
        layout.addWidget(self.stop_button)
        layout.addWidget(self.slider)

        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

    def start_video(self):
        self.media_player.play()

    def pause_video(self):
        self.media_player.pause()

    def stop_video(self):
        self.media_player.stop()

    def set_position(self, position):
        self.media_player.setPosition(position)

    def position_changed(self, position):
        self.slider.setValue(position)

    def duration_changed(self, duration):
        self.slider.setRange(0, duration)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    video_player = VideoPlayer()
    video_player.show()
    sys.exit(app.exec())

I got this to work with nixpkgs: https://github.com/NixOS/nixpkgs/pull/298198
no problem using ffmpeg
with this env
nix-shell -p ffmpeg manim "python3.withPackages(ps: with ps; [ marimo manim-slides ])"
even got magics working in a new type of notebook:
https://static.marimo.app/static/manim-example-rket

So I am not sure to catch everything: is the original issue solved?
Nonetheless, I didn't know about the "new type of notebook" thing, and this might be nice to document it in the docs. Do you have some reference for this?

It should be fine once the nixpkgs PR is merged
As far as the new notebook, it's not widely used or even known about- I'm slowly moving over from Jupyter because I like it, and hope it takes off.
The project is called Marimo, and hopes to address some of the state-based pains that Jupyter brings: https://marimo.io/
Also really polished widgets, nicer UI, and feels less bloated
If you want to highlight what is possible in documentation, I'm sure they would appreciate it. I think this issue from the lead: https://github.com/marimo-team/marimo/issues/794
shows they have some interested in deeper integration with manim like tools - but what I did is a bit of a magics hack

Nice!
Thanks for the link to Marimo's docs, I'll give it a look once I have some time :-)

nixos has now packaged manim-slides, should be in cache and widely accessible in a few days

Great news! Thanks for your work @dmadisett!

@dmadisetti, before I close this, would you mind adding a small section about how to install Manim Slides via NixOS in https://github.com/jeertmans/manim-slides/blob/main/docs/source/installation.md?
If you have time, I would really appreciate! I can review your PR and make some changes on top of it :-) Thanks!

No problem! I will once this gets into unstable cache, this should then get officially supported in 24.05 (released sometime in May)

No problem! I will once this gets into unstable cache, this should then get officially supported in 24.05 (released sometime in May)

thanks!


refactor: replace non-fungible token example sim tests with workspaces

Related to #563 #662

FYI I took the liberty to merge some of the tests introduced in https://github.com/near/near-sdk-rs/pull/627 with other already existing tests to avoid bloating the test files (and because some of them were even a strict superset of other ones).


Question / Decoding torrent file

Hi,
First, this is a great project together with WebTorrent, thanks so much!
I was wondering why would you use hex encoding for the pieces here : https://github.com/feross/create-torrent/blob/master/index.js#L319 ?
I am trying to decode a generated Torrent file but couldn't get it to work.
Here is my code:
var fs = require('fs'),
    createTorrent = require('create-torrent'),
    bencode = require('bencode');

createTorrent('./audio.mp3', (err, torrent) => {
    if (err) throw err;

    console.log('created torrent file');

    var torrentString = torrent.toString('utf-8');

    var decodedTorrent = bencode.decode(torrent, 'utf-8');

    try {
        var decodedTorrent2 = bencode.decode(torrentString, 'utf-8');
    } catch (e) {
        console.error('error decoding string', e);
    }

    // Weird pieces in `decodedTorrent.info`
    console.log('decoded torrent', decodedTorrent);
});

Thanks!

Nevermind, got it to work like this:
var torrentString = Buffer.from(torrent.toString('hex'), 'hex');
var decodedTorrent = bencode.decode(torrentString);
var pieces = decodedTorrent.info.pieces.toString('hex');

Still a bit funky though

You can simplify your code to:
var decodedTorrent = bencode.decode(torrent);
var pieces = decodedTorrent.info.pieces.toString('hex');

bencode.decode takes a Buffer argument, and torrent is already a Buffer.

Yep that's true, but it was in fact a case where I got the file content in the browser (from an AJAX request), thus as a String.

Ah, I see. You can do binary AJAX. It's really easy if you're using require('http') and browserify. It's even easier if you're using something like simple-get.

Ah okay thanks, I'll have a look ! :+1:


v1.1.0 release

I'd like to cut a v1.1.0 release for this month's PySAL meta release. Anything else to add/adjust/etc. before that?

This would be about documentation only? Then it does not qualify for a minor I guess and should be 1.0.1 instead.

It's a bit more than docs; infrastructure and such. I was on the fence about it either being a minor release or patch release. I don't have a strong opinion either way though. If nobody else chimes in in the next several days we can go ahead with v1.0.1.

Infrastructure is irrelevant for a release, no? How we manage our CI is not affecting the package a user downloads from PyPI. I don't really mind I just thought that per semver we may not fulfil the minor criteria.

Fair enough. Let's go with v1.0.1.

No release action ever made it into inequality. I'll work on that.

I do not have further items to add to the release. Thanks @jGaboardi

I'll start with a v1.0.1rc1 since there seem to be quite a few kinks to work out in other packages.

Done.


[Navigation Material] Unexpected transition animation when navigating between BottomSheetNavigator.Destinations

Description
When navigating to from one BottomSheetNavigator.Destination to another BottomSheetNavigator.Destination, the current sheet slides down vertically, and the new sheet slides vertically up.
Steps to reproduce
val bottomSheetNavigator = rememberBottomSheetNavigator()
val navController = rememberAnimatedNavController(bottomSheetNavigator)
val scaffoldState = rememberScaffoldState()

ModalBottomSheetLayout(bottomSheetNavigator = bottomSheetNavigator) {
    Scaffold(
        scaffoldState = scaffoldState,
        snackbarHost = { scaffoldState.snackbarHostState }
    ) {
        AnimatedNavHost(navController = navController, startDestination = "home") {
            composable("home") {
                Button(onClick = {
                    navController.navigate("firstSheet")
                }) {
                    Text(text = "Show sheet")
                }
            }
            bottomSheet("firstSheet") {
                Button(onClick = {
                    navController.navigate("secondSheet")
                }) {
                    Text(text = "Show second sheet")
                }
            }
            bottomSheet("secondSheet") {
                Button(onClick = {
                    navController.navigate("firstSheet")
                }) {
                    Text(text = "Show first sheet")
                }
            }
        }
    }
}

Expected behavior
The documentation for BottomSheetNavigator:
The sheetContent will always host the latest entry of the back stack. When navigating from a BottomSheetNavigator.Destination to another BottomSheetNavigator.Destination, the content of the sheet will be replaced instead of a new bottom sheet being shown.
The way I interprete the documentation, I would expect the content for ModalBottomSheetLayout to be replaced, and not dismissing the sheet and showing a new one whenever I navigate from one BottomSheetNavigator.Destination to another BottomSheetNavigator.Destination.
If this is just the default and only behaviour for showing bottomsheets, I would suggest the NavGraphBuilder.bottomSheet to support the params enterTransition, exitTransition, (maybe popEnterTransition and popExitTransition) as  NavGraphBuilder.composable

@jbw0033 This sounds like a reasonable request to me. It's still blocked by upstream Swipeable work but would be nice to support in the future. WDYT?

@jossiwolf I agree, that this would be a nice - also as stated in #1176, designers/UX designers are really keen on having a more fin-grained handling of bottomsheet size/transitions. 🙌

@jossiwolf Any news on this issue/request? :)

Hi! Not yet, we are working on more stability improvements for the time being :)

@jossiwolf Is this actually still waiting on dependency (Potentially the swipeable issue which was fixed not long ago?) or should the label be changed to something else? :)

@jossiwolf any updates on this?

@jossiwolf Any info or timeline for this issue? :)

With the release of Compose Material 1.7.0-alpha04, the Material team has added a new artifact: androidx.compose.material:material-navigation, which fully replaces Accompanist Navigation Material.
As such, we are closing all issues here on Accompanist and will be fully deprecating Accompanist Navigation Material in an upcoming release.
A number of issues were fixed as part of the migration, but if you're still seeing an issue, please file an issue with a sample project that reproduces your issue and the Material team will take a look.