Is it safe to use sub-classing design pattern with PageObject?

Hi folks,
My team uses page-object to test multi-breakpoint (desktop, tablet, mobile) websites and we are looking to re-factor our codebase using the template / sub-classing pattern. We currently use a single page-object to represent all 3 breakpoints.
In our initial testing we have seen no issues / problems but we were hoping  either @cheezy or @daneandersen could give a quick response on any pitfalls of using this pattern with page-object.
How do we do this today?
We dynamically define our elements based on a variable ENV['BREAKPOINT'] and in our methods we do lots of ugly if / case blocking where we branch to different code depending on the value of ENV['BREAKPOINT']
Example:
class AccountPcPoints
  include ::PageObject

  page_url ROOT_URL + FigNewton.partial_account_profile

    text_field(.  :points_email,             id:  'email')
    text_field(   :points_password,      id:  'password')

  case ENV['BREAKPOINT']
  when 'mobile'
    label(          :points_error_message,  class:  'account-greeting-error-msg')
  when 'desktop'
    button(       :points_link_btn,              class:  'input-pcplus-sync-button')
    label(          :points_error_message,  class:  'warning link-pc-error'')
  end

  def initialize_page
    wait_until { current_url.include?(FigNewton.partial_account_profile) }
  end

  def link_pc_plus(data)
    points_link_btn_element.when_present.click if ENV['BREAKPOINT'] == 'desktop'
    points_email_element.when_present
    populate_page_with Magic.form(data)
  end
end

How do we want to do this next?
We would like to use sub-classing to increase readability and reduce cyclomatic complexity of our code. Any shared elements / classes would go into the 'root' page object, and breakpoint specifc elements & methods would go into the child page-objets.
Example:
# encoding: utf-8
class AccountPcPoints
  include ::PageObject

  page_url ROOT_URL + FigNewton.partial_account_profile

  text_field(   :points_email,                id:  'email')
  text_field(   :points_password,             id:  'password')

  def initialize_page
    wait_until { current_url.include?(FigNewton.partial_account_profile) }
  end

end

class AccountPcPointsMobile < AccountPcPoints
  label(        :points_error_message,     class:  'account-greeting-error-msg')

  def initialize_page
    super
  end

  def link_pc_plus(data)
    points_email_element.when_present
    populate_page_with Magic.form(data)
  end

end

class AccountPcPointsDesktop < AccountPcPoints
  button(       :points_link_btn,          class:  'mobile-pcplus-sync-button')
  label(        :points_error_message,     class:  'warning link-pc-error')

  def initialize_page
    super
  end

  def link_pc_plus(data)
    points_link_btn_element.when_present.click
    points_email_element.when_present
    populate_page_with Magic.form(data)
  end

end

why not use @browser to make decisions ?! ...

Hi vveliev, care to expand? I don't fully understand. In my mind, @browser would be the same in all cases and while you could use it to query width, it would result in the same cyclomatic complexity in the end.

On Apr 8, 2016, at 17:28, vveliev<EMAIL_ADDRESS>wrote:
why not use @browser to make decisions ?! ...
—
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub

This does not answer your question with splitting code based on the driver.
@browser.capabilities or @current_page.browser.capabilities

@capabilities={:browser_name=>"firefox", :version=>"44.0.2", :platform=>:windows,
:javascript_enabled=>true, :css_selectors_enabled=>true, :takes_screenshot=>true,
:native_events=>false, :rotatable=>false, :firefox_profile=>nil, :proxy=>nil,
"applicationCacheEnabled"=>true, "handlesAlerts"=>true, "databaseEnabled"=>true,
"elementScrollBehavior"=>"1", "acceptSslCerts"=>true,
"webdriver.remote.sessionid"=>"5683a46e-a787-4b02-a0d0-07350caf360a",
"webStorageEnabled"=>true, "locationContextEnabled"=>true}

I am not sure you understand the question being asked vveliev. this has nothing to do with the browser. Let me give you an example, if you visit Facebook on your desktop, vs on your mobile - you will be served a different design with some elements in common. This is called breakpoint code. I am looking to use page-object sub-classing to support my breakpoint code, currently we are using if blocks in a single page object.

@tk8817 You can indeed use inheritance with the page object pattern. Though I would recommend including modules instead of inheriting from classes.

Thanks for the feedback. We use modules for site wide sections like the header, footer, etc. I learned the technique from cheezy's 'Cucumber & Cheese' book.
Do you think the module approach is ideal for 'run-specific' elements (as detailed in op)? I imagine it will result in  a case/if block to include the correct module, on each page class.
I can see us being successful with that design but am feeling weird about it. Perhaps sub-classing is totally wrong as well, and I just have not found he right design pattern for my problem.
Any further thoughts or suggestions?
Thanks again!
I will close this issue as my question on if it is supported has been answered.

On Apr 12, 2016, at 21:20, Cohen-Carlisle<EMAIL_ADDRESS>wrote:
@tk8817 You can indeed use inheritance with the page object pattern. Though I would recommend including modules instead of inheriting from classes.
—
You are receiving this because you were mentioned.
Reply to this email directly or view it on GitHub

I'd act as if you were going to use inheritance, but instead of doing this:
class Bar
  def method_a
    # ...
  end
end

class Foo < Bar
  def method_b
    # ...
  end
end

Do this:
module Bar
  def method_a
    # ...
  end
end

class Foo
  include Bar

  def method_b
    # ...
  end
end

I generally find that modules are easier to manage than inheritance, especially as the inheritance chain gets longer.
Inheritance can work perfectly fine, too, however.

hi I would better if you can adopt cross platform solution, that means you only write the features once, but design the separated step_definition for mobile and desktop. Then you can run each you test with difference defined profiles, It really hard for you to manage the test like this for a long time because you have to take cares different UI in a single page, and even different functionalities, capabilities...etc. And I think it harder for your team to maintain the test.
https://github.com/calabash/x-platform-example/tree/master/features
You can see the example of using cross platform pattern above, and mix it with page object.

We looked at this pattern along with the adapter pattern but it seemed overkill. The pattern forces you to duplicate ALL code, as the assumption is that each interface is fully unique.
As shown above, we only have a small difference for any given page. Some kind of inheritance / inclusion seems apt.
However, I am deeply appreciative of the feedback! It's an awesome design pattern and we DO use it for our app testing.
Best,
Justin.

On Apr 12, 2016, at 21:56, Nguyen Duc Thanh<EMAIL_ADDRESS>wrote:
hi I would better if you can adopt cross platform solution, that means you only write the features once, but design the separated step_definition for mobile and desktop. Then you can run each you test with difference defined profiles, It really hard for you to manage the test like this for a long time because you have to take cares different UI in a single page, and even different functionalities, capabilities...etc. And I think it harder for your team to maintain the test.
https://github.com/calabash/x-platform-example/tree/master/features
You can see the example of using cross platform pattern above, and mix it with page object.
—
You are receiving this because you were mentioned.
Reply to this email directly or view it on GitHub

@Cohen-Carlisle - we are going to use the module approach after mapping both out. Thanks for the insights.


DOC: Numpy docstrings migration

This PR focusses on the following features (in order of implementation):

[x] Initial conversion of rst docstrings to numpydoc format (with the help of pyment)
[ ] numpydoc docstring validators to ensure docstring quality

[x] Install numpydoc docstring validators as part of the Sphinx build process
[x] Ensure docstrings are compliant with validators
[ ] Tying in docstring validation with CI/CD

[ ] Add types to docstring parameters (particularly focussing on popular modules).

PR contributes to #1324, where you can read more on this featureset.
Draft PR for visibility (and to trigger RTD builds).
(given the size of these diffs, let me know if you want me to break into multiple PRs)

Done with initial conversion of docstrings to numpy format. Now moving onto docstring validation.

Numpydoc validators have been included in the build process (basically linting through docstrings, looking for things like "is the argument in the docstring the same as the one in the function call", ensuring the docstring is rendered correctly).
The full list of possible validation checks are outlined in the error codes. Some of the codes are incompatible with the codebase (either outright, or due to the state of many docstrings). Implementing all these codes is a very very low priority, but the small subset of codes at the moment are a good starting point (and additional codes can be included easily down the line if desired).

Just confirming @erikvansebille , is this option checked in the Advanced Settings section of the RTD parcels project panel?

Just confirming @erikvansebille , is this option checked in the Advanced Settings section of the RTD parcels project panel?

Yep, that checkbox is on (see below), but the default branch is not set. Should I do that?

Following on from this (10 year old) conversation, it doesn't look like builds are triggered from PRs originating from branches on forks. No matter though. My RTD build for this branch is available here. We'll review properly when merging new_docs -> master.

the default branch is not set. Should I do that?
No need 😄

Thanks for digging into this

My RTD build for this branch is available here. We'll review properly when merging new_docs -> master.

That link seems to point to the RTD Issue? Can you update to the correct link?

Opps, yes, just updated

Used the regex \s:$ to search across the codebase for parameters with missing types. Added many types, will leave the rest to be gradually done over a longer timeframe.
PR ready for feedback 😄

The title in your https://veckoparcels.readthedocs.io/en/docstrings/ version mentions v2.3.0; will that be the latest after we merge?

As of 398ba3b the version number is determined automatically using the parcels.__version__ attribute. new_docs (the target of this PR) is at v2.3.0. When we re-sync and merge new_docs into master it will be at the intended version.

The copyright statement on the page bottom could/should be updated to 2023?

Can do. Should we dynamically determine the year for the copyright statement? i.e. update the copyright statement from:
copyright = '2022, The OceanParcels Team'

to
copyright = f"{datetime.datetime.now().year}, The OceanParcels Team"

Happy to fix this in a separate PR.

Should we add these commits (especially the really large ones) to the .git-blame-ignore-revs file too?

I don't think so. The purpose of .git-blame-ignore-revs is to ignore (large) superfluous changes that in the end have no effect on the function of the code (eg. introducing black, introducing isort, whitespace. These are mainly created by automated formatting tools) and would otherwise soil the blame. These commits mark a shift in how the codebase works with docstrings, and introduce additional edits to the docstrings, which are worth keeping in blame.

OK is fine, let's then just go for it. The integration tests have skipped (not sure why), but I guess we can merge without these in this case, because only docstrings are affected in this PR?

The integration tests have skipped (not sure why)

#1335 rearing its head again 😕
And yes, only docstrings/doc related changes.


lifelines models should support auxiliary information

For example, suppose I have a piecewise model that has a break that is subject-specific. For example,
t  e  tau
10  1    5
10  1    3
11  0   10
13  1  inf
15  1  inf
17  1    9

The tau determines when the breakpoint is (inf denotes, for now, that the breakpoint was never realized/observed!). A linear model looks like:

from autograd import grad, elementwise_grad, value_and_grad
from autograd import numpy as np
from scipy.optimize import minimize

def H1(params, t):
    log_lambda = params[0]
    lambda_ = np.exp(log_lambda)
    return t/lambda_

def H2(params, t):
    log_lambda, log_rho = params
    lambda_, rho = np.exp(log_lambda), np.exp(log_rho)
    return (np.clip(t, 1e-4, np.inf) / lambda_) ** rho

def cumulative_hazard(params, t, tau):
    return np.where(t < tau, H1(params, t), H1(params[:1], tau) + H1(params[1:], t-tau))

    # does the product keep degrading in the same manner when owned by the consumer?
    return np.where(t < tau, H1(params, t), H1(params, t) + H2(params, t-tau))

hazard = elementwise_grad(cumulative_hazard, argnum=1)

def log_hazard(params, T, tau):
    return np.log(np.clip(hazard(params, T, tau), 1e-15, np.inf))

def survival_function(params, T, tau):
    return np.exp(-cumulative_hazard(params, T, tau))

def negative_log_likelihood(params, T, E, tau):
    n = T.shape[0]
    ll = 0
    ll += log_hazard(params, T, tau).sum()
    ll -= cumulative_hazard(params, T, tau).sum()
    return -ll/n

results = minimize(
    value_and_grad(negative_log_likelihood),
    x0=np.array([0.0, 0.0]),
    args=(df['T_obs'].values, df['E'].values.astype(bool), df['tau'].values),
    jac=True)

x = np.linspace(0, 30, 300)
y = [survival_function(results.x, _, 15.0) for _ in x]
plt.plot(x, y)

ATM, if I used tau as a regression variable, the model would want me to treat it like a linear predictor. How can I support information like this?

This is very similar to a problem  to @robdmc (gitter) was having. He was trying to model a subject that experienced different churn rates depending on what quarter they were in.

Another example of using external information:


Search bar feature and new node info panel

Search bar feature that opens a dropdown with the top 10 search results for a user's query.
Added nodes will have their buttons disabled, and hidden nodes can be unhidden.
New Node info panel

LGTM!


new article with tips for PowerShell users

This PR completes the following:

rename use-cli-effectively.md to use-azure-cli-successfully.md, update links and add redirect
add new article use-azure-cli-successfully-in-powershell.md
slight reorganization of the TOC and Main landing page

Merging PR until it gets any larger!


Allow limiting session duration when using OIDC authentication

What is the goal / desired outcome?
OIDC session duration in Pachyderm is hard coded to 30 days. This means that even if a user logged out, they would be allowed to instantly log in without needing authentication. This is also applicable the Pachyderm IDE. From a security perspective, this is problematic if another person were to use a previously authenticated computer or if the computer was lost.
If there is a way to accomplish this today via workaround, what does that require?
Use SAML.
(Optional) What is your proposal for a feature to solve this?
Add support to limiting the session duration. It would be beneficial if this was configurable via the command line similar to the current --ttl flag which limits the token lifetime. For example, by using a command line flag or optionally if this was supplied by the OIDC provider.

@RaananHadar this should be doable once 2.0 will be released.

Agent Dale Georg linked Freshdesk ticket 266 for this issue.


perf: type and hash container judgement

What kind of change does this PR introduce? (check at least one)

[ ] Bugfix
[ ] Feature
[ ] Code style update
[x] Refactor
[ ] Build-related changes
[ ] Other, please describe:

Does this PR introduce a breaking change? (check one)

[ ] Yes
[x] No

If yes, please describe the impact and migration path for existing applications:
The PR fulfills these requirements:

[ ] It's submitted to the dev branch, not the main branch
[x] When resolving a specific issue, it's referenced in the PR's title (e.g. fix #xxx[,#xxx], where "xxx" is the issue number)
[x] All tests are passing
[x] New/updated tests are included

If adding a new feature, the PR's description includes:

[ ] A convincing reason for adding this feature (to avoid wasting your time, it's best to open a suggestion issue first and wait for approval before working on it)

Other information:

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

187 of 187 (100.0%)  changed or added relevant lines in 10 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.2%) to 100.0%

Totals

Change from base Build<PHONE_NUMBER>:
0.2%

Covered Lines:
1404

Relevant Lines:
1404

💛  - Coveralls

Coverage remained the same at 100.0% when pulling 8b89b89be07fb41e53ed3072f70425b5ce2db600 on perf/type_judge into<PHONE_NUMBER>3c1e951c7319ddbe08b7c22a41e762 on main.


asyncValidate doesn't allow objects for errors

With the validate function we can return Objects with error name and parameters, which come in very handy for error reporting. However, if we do the same from an asyncValidatefunction, the object gets lost in the way and the error doesn't appear at all on the field object.
Is this a bug or is it intentional ?

Sounds like a bug. Can you give an example of a value returned from asyncValidate that fails in this way?

I have the problem with the following object as error:
return {
  name: "SOME_ERROR_CONSTANT"
};

if I just use
return "SOME_ERROR_CONSTANT";

instead, I get the expected error.

That's very odd. Have another look at the example, and see if you can notice anything you're doing differently.

I had hard time figuring out what was going wrong, and got to the example many times. In the end, I only had something like this:
export default reduxForm({
  form: 'myForm',
  fields: ['username'],
  asyncValidate: (values/*, dispatch */) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
        reject({username: {
            name: 'That username is taken'
        }
        });
    }, 100);
  });,
  asyncBlurFields: ['username']
})(MyComponent);

which was ignoring the error, while
export default reduxForm({
  form: 'myForm',
  fields: ['username'],
  asyncValidate: (values/*, dispatch */) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
        reject({username:  'That username is taken'
        });
    }, 100);
  });,
  asyncBlurFields: ['username']
})(MyComponent);

was displaying it.
I tried to follow the calls in the lib, going from asyncValidation.js _isValid2 to isValid, which seemed like an odd function to apply to an error output (as opposed to a field or field value). I didn't figure out whaat was going on in there with the recursive calls and stopped my investigation there.

What is this name key for? Your data looks like this:
{
  username: 'mlarcher'
}

So your error needs the same shape:
{
  username: 'invalid for some reason'
}

If you give an error like:
{
  username: {
    name: 'some error'
  }
}

...redux-form is going to assume that your data looks like:
{
  username: {
    name: 'mlarcher'
  }
}

Perhaps redux-form should be smarter, and look at your fields array to see the shape of your data and accept objects as errors, but, at the moment, it does not.
Does all that make sense?

I understand. I implemented the synchronous validation first and didn't face this problem, so I was a bit surprised when it arose during async validation implementation.
A string is not enough for us as an error content, as we need to be able to pass params along with the error key for better error reporting.
What approach would you recommend to end up with an object as the error content ?

Ah. This is a bug, then. Async and submit errors are saved in the state, but sync errors are not, so there must be some inconsistency there. Investigating... :mag:

Fix published in v4.1.1.
Thanks for this.

Great! Thanks for the quick fix :)


Design: add balance to the user concent screen

insight from https://github.com/Tonomy-Foundation/Tonomy-ID-Management/issues/571

Design: https://www.figma.com/design/cvV48t0f7O2znT6QBxK0Zj/Tonomy-ID?node-id=8889-4459&t=YSEVeIdSq4OdwY30-1


Agent for Windows

With the new jaeger-client-csharp there will be those wanting to run the Jaeger Agent on Windows where their services are hosted. I've tested building the agent with GOOS=windows and it works on Windows.
Would we be able to publish the binary produced for Windows? I think having a Windows binary available for download would greatly help the adoption of the C# client and those on Windows. I can submit a PR with the Makefile targets to build the agent for Windows.

@grounded042 thanks for the pull request. The binaries are now part of the release, check out https://github.com/jaegertracing/jaeger/releases/tag/v1.4.1


[BUG] Unable to install autogluon.tabular[skex] on M1 Mac

Bug Report Checklist

[x] I provided code that demonstrates a minimal reproducible example.
[ ] I confirmed bug exists on the latest mainline of AutoGluon via source install.
[ ] I confirmed bug exists on the latest stable version of AutoGluon.

Describe the bug
On a fresh conda environment (python=3.10), I did the following to install autogluon and autogluon.tabular
pip install --no-cache-dir autogluon                   # this succeeded
pip install --no-cache-dir 'autogluon.tabular[skex]'   # this failed with error (see the log section)

Expected behavior
To install autogluon.tabular[skex] successfully.
To Reproduce
conda create -n env python=3.10
conda activate env
pip install --no-cache-dir autogluon
pip install --no-cache-dir 'autogluon.tabular[skex]'

Screenshots / Logs
ERROR: Cannot install autogluon-tabular[skex]==0.7.0, autogluon-tabular[skex]==0.8.0, autogluon-tabular[skex]==0.8.1, autogluon-tabular[skex]==0.8.2 and autogluon-tabular[skex]==1.0.0 because these package versions have conflicting dependencies.

The conflict is caused by:
    autogluon-tabular[skex] 1.0.0 depends on scikit-learn-intelex<2024.1 and >=2023.0; extra == "skex"
    autogluon-tabular[skex] 0.8.2 depends on scikit-learn-intelex<2023.2 and >=2021.7; extra == "skex"
    autogluon-tabular[skex] 0.8.1 depends on scikit-learn-intelex<2023.2 and >=2021.7; extra == "skex"
    autogluon-tabular[skex] 0.8.0 depends on scikit-learn-intelex<2023.2 and >=2021.7; extra == "skex"
    autogluon-tabular[skex] 0.7.0 depends on scikit-learn-intelex<2023.1 and >=2021.7; extra == "skex"

To fix this you could try to:
1. loosen the range of package versions you've specified
2. remove package versions to allow pip attempt to solve the dependency conflict

ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts

System Info

M1 Macbook
OS: Sonoma 14.2.1
Python = 3.10

Hi @liam-sbhoo,
scikit-learn-intelex does not support ARM currently.
I've created a PR to mention this in our install instructions: #3976


Display tweaks

This PR carries out some tweaks to the way MLJBase displays objects:

suppress @423 business except for source nodes (https://github.com/alan-turing-institute/MLJ.jl/issues/842)
suppress blue colouring of objects (leave some bold)
#532

Codecov Report

Merging #654 (6c7ff87) into dev (e8863c5) will decrease coverage by 2.91%.
The diff coverage is 16.66%.

@@            Coverage Diff             @@
##              dev     #654      +/-   ##
==========================================
- Coverage   86.07%   83.16%   -2.92%
==========================================
  Files          39       39
  Lines        3369     2935     -434
==========================================
- Hits         2900     2441     -459
- Misses        469      494      +25

Impacted Files
Coverage Δ

src/hyperparam/one_dimensional_ranges.jl
67.27% <0.00%> (-13.43%)
:arrow_down:

src/resampling.jl
88.21% <0.00%> (-1.03%)
:arrow_down:

src/utilities.jl
76.47% <ø> (-2.38%)
:arrow_down:

src/show.jl
27.85% <20.00%> (-8.79%)
:arrow_down:

src/sources.jl
74.28% <75.00%> (-11.43%)
:arrow_down:

src/composition/learning_networks/arrows.jl
28.57% <0.00%> (-44.77%)
:arrow_down:

src/data/datasets.jl
86.84% <0.00%> (-13.16%)
:arrow_down:

src/measures/continuous.jl
87.80% <0.00%> (-8.03%)
:arrow_down:

... and 30 more

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 e8863c5...6c7ff87. Read the comment docs.


Add Bash Command Formatter

New App Submission

[x] I've read the contribution guidelines.

Repo or homepage link:
https://ray.run/tools/bash-command-formatter
Description:
A Bash command formatter tool takes in a Bash command and formats it, applying proper indentation, line breaks, and formatting to make it more readable and structured.
Why I think it's awesome:
It solves a problem of formatting long command lines.

Thank you for submitting this entry, but I am closing this because it is not clear to me if this entry is truly useful or "awesome". We already have shfmt, which also does the job of Bash formatting, and the website you linked does not look like it represents a project that people can run on their own computers.


Put replicator sequence number in Update sent from leader to follower

in replication
Can be used by followers that are not rocksdb instances (e.g. rocksobserver)

Can u elaborate wha u mean by "Can be used by followers that are not rocksdb instances (e.g. rocksobserver)"?

how the rocksobserver use it?

Can u elaborate wha u mean by "Can be used by followers that are not rocksdb instances (e.g. rocksobserver)"?

how the rocksobserver use it?

We use it in RocksObserver if there is no sequence number in Kafka, to know where we have started replicating from. Since the sequence number of the first write batch in the writeahead log may not be 0 (and will not be if there is retention set up)


Twitter and GDPR

It seems that the bridge for Twitter won't work in the EU because of GDPR - I'm seeing this message:
\n
By using Twitter’s services you agree to our Cookie Use and Data Transfer outside the EU. We and our partners operate globally and use cookies, including for analytics, personalisation, and ads.
in my feed.

I don't see it. Bridge is located in Moscow.
https://feed.eugenemolotov.ru/dev/?action=display&bridge=Twitter&q=Kekeflipnote&format=Html

eu law cookie policy not in the russian

The bridge is working fine on my machine (located in Germany). Is this an isolated incident for one specific query or a general problem? Can you provide one of your failing queries?

It seems to have stopped appending messages to Twitter now.

I see, thanks for letting us know :+1:
I'll close this issue now. Feel free to reopen if the problem returns.


Update index_en.rst

This is Adam, NVIDIA Product Manager for PaddlePaddle. To ensure PP developers can get the installation manual easier, I update the description of NVIDIA NGC PaddlePaddle Container here.
Many thanks.

 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.

++ @onecatcn

@AdamzNV Please sign the CLA agreement, thanks


docs: set site_url to fix broken 404 page on RTD

Summary of Changes
The 404 page was previously not properly rendered on Read the Docs. This PR aims to fix this once https://github.com/readthedocs/readthedocs.org/issues/8529 is done.

🦙 MegaLinter status: ✅ SUCCESS

Descriptor
Linter
Files
Fixed
Errors
Elapsed time

✅ REPOSITORY
git_diff
yes

no
0.05s

See detailed report in MegaLinter reports
Set VALIDATE_ALL_CODEBASE: true in mega-linter.yml to validate all sources, not only the diff
MegaLinter is graciously provided by

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

v0.15.0
GitHub release

Your semantic-release bot :package::rocket:


bug in adding data to loop

I found a bug, while I am trying add data to loop. Here is how you can reproduce the bug
`import bmrb
ll=bmrb.Loop.from_scratch()
ll.add_column('_Atom_chem_shift.Auth_entity_assembly_ID')
ll.add_column('_Atom_chem_shift.Auth_seq_ID')
ll.add_column('_Atom_chem_shift.Auth_Comp_ID')
ll.add_column('_Atom_chem_shift.Auth_atom_ID')
ll.add_column('_Atom_chem_shift.Val')
ll.add_column('_Atom_chem_shift.Val_err')
ll.add_column('Atom_chem_shift.Ambiguity_code')
dat1=['A','2','LYS','HB1','1.779323999994285','0.009758767141997112','2']
ll.add_data(dat1)
print ll
loop
_Atom_chem_shift.Auth_entity_assembly_ID
_Atom_chem_shift.Auth_seq_ID
_Atom_chem_shift.Auth_Comp_ID
_Atom_chem_shift.Auth_atom_ID
_Atom_chem_shift.Val
_Atom_chem_shift.Val_err
_Atom_chem_shift.Ambiguity_code
 A   2   LYS   HB1   1.779323999994285   0.009758767141997112   2

stop_
dat1[3]="HB2"
ll.add_data(dat1)
print ll
loop_
_Atom_chem_shift.Auth_entity_assembly_ID
_Atom_chem_shift.Auth_seq_ID
_Atom_chem_shift.Auth_Comp_ID
_Atom_chem_shift.Auth_atom_ID
_Atom_chem_shift.Val
_Atom_chem_shift.Val_err
_Atom_chem_shift.Ambiguity_code
 A   2   LYS   HB2   1.779323999994285   0.009758767141997112   2
 A   2   LYS   HB2   1.779323999994285   0.009758767141997112   2

stop_
`
note HB1 in the first row become HB2, if I add HB3 then all 3 become HB3. Am I doing something wrong? or is it a bug?

It isn't a bug; it is just an artifact of the fact that python passes arguments by object reference. When you pass a list to a function you are in effect passing a pointer to the actual list such that any updates to the list are reflected in all places that have names bound to that list. For example:
>>> a = [1,2,3]
>>> def test(a_list):
...   a_list.append(4)
...
>>> test(a)
>>> a
[1, 2, 3, 4]
>>> test(a)
>>> a
[1, 2, 3, 4, 4]

This page has a great explanation of how it works.
Basically, in the code sample you provided above, you are in effect creating a loop whose data is a list of pointers to the list dat1. So when you modify dat1 all of the rows change. To fix this just pass a shallow copy of the list as such:
ll.add_data(dat1[:])
dat1[3]="HB2"
ll.add_data(dat1[:])
print ll

When you do this each row is pointing to a unique list which was copied from dat1 - this way you can change dat1 without the data in the loop changing.
Jon


SAM-3068 avoid lots of NumberFormatExceptions in the logs from Gradebook lookups

Looked at this and LGTM, I've seen this before too


[main] Update BC Artifact version

Fixes AB#420000

Test Results Summary
Workflow run: https://github.com/aholstrup1/BCApps/actions/runs/8167610386
Last updated: 2024-03-06 05:59:07


Title is wrong

simple jQuery image cropping plugin - This title or any where in the document, it dose not mention PHP.
Take a look here:  cropper/examples/crop-avatar/crop.php

That's just an example (in one language) of how you might store your cropped image server-side.
The cropper itself is client-side JS.

Thanks yeah I noticed it later, that was the example I really wanted.  So I'm using th demo, and basically getting that one to do the same thing as the avatar doing but with out php (Since work wants it in CF)


Snap /tmp folder + Docker mounting point

Describe the bug
An error occurred when I try run the command kool deploy logs -f app.
Follow the error:
kool --verbose deploy logs -f app
api - calling URL: https://kool.dev/api/deploy/exec?
api - got response: {"server":"https:\/\/808A64640E3217D47085F09CEBCDC1B8.gr7.us-east-1.eks.amazonaws.com","token":"...","ca.crt":"...","namespace":"dev-none-default-loly-loly-web-developkooldev","path":"deployment\/app"}
$ (TTY in: true out: true) kool [docker -- -v /tmp/.kool-cluster-CA:/tmp/.kool-cluster-CA kooldev/toolkit:full kubectl --server https://808A64640E3217D47085F09CEBCDC1B8.gr7.us-east-1.eks.amazonaws.com --token XXX --namespace dev-none-default-loly-loly-web-developkooldev --certificate-authority /tmp/.kool-cluster-CA logs -f --tail 25 deployment/app -c default]
[recursive call]
$ (TTY in: true out: true) docker [run --init --rm -w /app -i -t --env ASUSER=1000 --volume /home/leonakao/projects/loly/web:/app:delegated -v /tmp/.kool-cluster-CA:/tmp/.kool-cluster-CA kooldev/toolkit:full kubectl --server https://808A64640E3217D47085F09CEBCDC1B8.gr7.us-east-1.eks.amazonaws.com --token XXX --namespace dev-none-default-loly-loly-web-developkooldev --certificate-authority /tmp/.kool-cluster-CA logs -f --tail 25 deployment/app -c default]
error: read /tmp/.kool-cluster-CA: is a directory
2021/05/11 17:06:36.851613 exit status 1

Kool version and environment
kool version 1.11.0
Docker version 19.03.13
Elementary OS:

Distributor ID:	elementary
Description:	elementary OS 5.1.7 Hera
Release:	5.1.7
Codename:	hera

Base OS:

Distributor ID:	Ubuntu
Description:	Ubuntu 18.04.4 LTS
Release:	18.04
Codename:	bionic

Additional context
Docker was installed using snapcraft but I don't know if have some relation in this case.

@leonakaodev do you have /tmp/.kool-cluster-CA in your host machine? If you don't, docker will bind it as a folder into the container, indeed.

@fabriciojs if the absence of this file is generating this error, could we add a extra validation for it?

@leonakaodev do you have /tmp/.kool-cluster-CA in your host machine? If you don't, docker will bind it as a folder into the container, indeed.

@danielsuguimoto I didn't have this file on my machine. Shouldn't the kool generate it in this case before the docker bind it as a folder?
ps: I solved the problem by installing manually kubectl

This is an issue with the kubectl on kool docker strategy, when no kubectl is available in the host OS.
It seems indeed that the file was not available which would make the map become a folder, like @danielsuguimoto mentioned.
We shall review the file creation error handling, and look into Snap Docker confinement strategy, since I believe it may be changing the /tmp access for Docker, which causes the issue.

We already have the file creation properly validated, the issue here indeed is due to Snap handling of /tmp folders:

https://forum.snapcraft.io/t/read-write-access-to-tmp/21743
https://stackoverflow.com/questions/65267251/docker-bind-mount-directory-in-tmp-not-working

We can revisit the credentials generation/creation in #300 updates for v2.


Can't join to meeting (strict-origin-when-cross-origin)

Hi All, trying to run it locally by using option 4
use those values
set publicUrl, publicIP, useHostNetwork
My local ipV4 address is <IP_ADDRESS>
but it shows me strict-origin-when-cross-origin
nginx
What could be wrong?
"jicofo and jvb issue"
DNS lookup exception for first-release-prosody.default.svc.cluster.local' exception='java.net.UnknownHostException: first-release-prosody.default.svc.cluster.local')
2024-08-19 21:11:19     at org.jivesoftware.smack.SmackException$EndpointConnectionException.from(SmackException.java:334)
2024-08-19 21:11:19     at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectUsingConfiguration(XMPPTCPConnection.java:664)
2024-08-19 21:11:19     at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectInternal(XMPPTCPConnection.java:849)
2024-08-19 21:11:19     at org.jivesoftware.smack.AbstractXMPPConnection.connect(AbstractXMPPConnection.java:526)
2024-08-19 21:11:19     at org.jitsi.xmpp.mucclient.MucClient.lambda$getConnectAndLoginCallable$9(MucClient.java:635)
2024-08-19 21:11:19     at org.jitsi.retry.RetryStrategy$TaskRunner.run(RetryStrategy.java:167)
2024-08-19 21:11:19     at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
2024-08-19 21:11:19     at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
2024-08-19 21:11:19     at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
2024-08-19 21:11:19     at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
2024-08-19 21:11:19     at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
2024-08-19 21:11:19     at java.base/java.lang.Thread.run(Thread.java:840)

prosody is running and exposed

values.yaml
# Default values for jitsi-meet.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

global:
  # Set your cluster's DNS domain here.
  # "cluster.local" should work for most environments.
  # Set to "" to disable the use of FQDNs (default in older chart versions).
  clusterDomain: cluster.local
  podLabels: {}
  podAnnotations: {}
  releaseSecretsOverride:
    enabled: false
    #Support environment variables from pre-created secrets, such as 1Password operator
    #extraEnvFrom:
    #  - secretRef:
    #      name: '{{ include "prosody.fullname" . }}-overrides'
    #      optional: true

imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""

enableAuth: false
enableGuests: true
# Where Jitsi Web UI is made available
# such as jitsi.example.com
publicURL: "<IP_ADDRESS>:8080"

tz: Europe/Amsterdam

image:
  pullPolicy: IfNotPresent

## WebSocket configuration:
#
#  Both Colibri and XMPP WebSockets are disabled by default,
#  since some LoadBalancer / Reverse Proxy setups can't pass
#  WebSocket connections properly, which might result in breakage
#  for some clients.
#
#  Enable both Colibri and XMPP WebSockets to replicate the current
#  upstream `meet.jit.si` setup. Keep both disabled to replicate
#  older setups which might be more compatible in some cases.
websockets:
  ## Colibri (JVB signalling):
  colibri:
    enabled: false
  ## XMPP (Prosody signalling):
  xmpp:
    enabled: false

web:
  replicaCount: 1
  image:
    repository: jitsi/web

  ## Override the image-provided configuration files:
  #  See https://github.com/jitsi/docker-jitsi-meet/tree/master/web/rootfs
  custom:
    contInit:
      _10_config: ""
    defaults:
      _default: ""
      _ffdhe2048_txt: ""
      _interface_config_js: ""
      _meet_conf: ""
      _nginx_conf: ""
      _settings_config_js: ""
      _ssl_conf: ""
      _system_config_js: ""
    configs:
      _custom_interface_config_js: ""
      _custom_config_js: ""

  extraEnvs: {}
  service:
    type: ClusterIP
    port: 80
    ## If you want to expose the Jitsi Web service directly
    #  (bypassing the Ingress Controller), use this:
    #
    # type: NodePort
    # nodePort: 30580
    # port: 80
    externalIPs: []

  ingress:
    enabled: false
    # ingressClassName: "nginx-ingress-0"
    annotations: {}
      # kubernetes.io/tls-acme: "true"
    hosts:
    - host: jitsi.local
      paths: ['/']
    tls: []
    #  - secretName: jitsi-web-certificate
    #    hosts:
    #      - jitsi.local

  # Useful for ingresses that don't support http-to-https redirect by themself, (namely: GKE),
  httpRedirect: false

  # When tls-termination by the ingress is not wanted, enable this and set web.service.type=Loadbalancer
  httpsEnabled: false

  ## Resolver IP for nginx.
  #
  #  Starting with version `stable-8044`, the web container can
  #  auto-detect the nameserver from /etc/resolv.conf.
  #  Use this option if you want to override the nameserver IP.
  #
  # resolverIP: <IP_ADDRESS>

  livenessProbe:
    httpGet:
      path: /
      port: 80
  readinessProbe:
    httpGet:
      path: /
      port: 80

  podLabels: {}
  podAnnotations: {}
  podSecurityContext: {}
    # fsGroup: 2000

  securityContext: {}
    # capabilities:
    #   drop:
    #   - ALL
    # readOnlyRootFilesystem: true
    # runAsNonRoot: true
    # runAsUser: 1000

  resources: {}
    # We usually recommend not to specify default resources and to leave this as a conscious
    # choice for the user. This also increases chances charts run on environments with little
    # resources, such as Minikube. If you do want to specify resources, uncomment the following
    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
    # limits:
    #   cpu: 100m
    #   memory: 128Mi
    # requests:
    #   cpu: 100m
    #   memory: 128Mi

  nodeSelector: {}

  tolerations: []

  affinity: {}

jicofo:
  replicaCount: 1
  image:
    repository: jitsi/jicofo

  ## Override the image-provided configuration files:
  #  See https://github.com/jitsi/docker-jitsi-meet/tree/master/jicofo/rootfs
  custom:
    contInit:
      _10_config: ""
    defaults:
      _jicofo_conf: ""
      _logging_properties: ""

  xmpp:
    password:
    componentSecret:

  livenessProbe:
    tcpSocket:
      port: 8888

  readinessProbe:
    tcpSocket:
      port: 8888

  podLabels: {}
  podAnnotations: {}
  podSecurityContext: {}
  securityContext: {}
  resources: {}
  nodeSelector: {}
  tolerations: []
  affinity: {}
  extraEnvs: {}

jvb:
  replicaCount: 1
  image:
    repository: jitsi/jvb

  xmpp:
    user: jvb
    password:

  ## Set public IP addresses to be advertised by JVB.
  #  You can specify your nodes' IP addresses,
  #  or IP addresses of proxies/LoadBalancers used for your
  #  Jitsi Meet installation. Or both!
  #
  #  Note that only the first IP address will be used for legacy
  #  `DOCKER_HOST_ADDRESS` environment variable.
  #
  publicIPs:
    - <IP_ADDRESS>
  #   - <IP_ADDRESS>
  ## Alternative option: auto-detect Node's external IP address.
  #  Recommended for OCTO setups (with either NodePort service
  #  or hostPort enabled) where every JVB pod should announce it's
  #  own IP address only.
  useNodeIP: false
  ## Use a STUN server to help some users punch through some
  #  especially nasty NAT setups. Usually makes sense for P2P calls.
  stunServers: 'meet-jit-si-turnrelay.jitsi.net:443'
  ## Try to use the hostPort feature:
  #  (might not be supported by some clouds or CNI engines)
  useHostPort: false
  ## Use host's network namespace:
  #  (not recommended, but might help for some cases)
  useHostNetwork: true
  ## UDP transport port:
  UDPPort: 10000
  ## Use a pre-defined external port for NodePort or LoadBalancer service,
  #  if needed. Will allocate a random port from allowed range if unset.
  #  (Default NodePort range for K8s is 30000-32767)
  # nodePort: 10000
  service:
    enabled:
    type: ClusterIP
    externalTrafficPolicy: Cluster
    externalIPs: []
    ## Annotations to be added to the service (if LoadBalancer is used)
    #  An example below is needed for DigitalOcean managed k8s setups
    #  with a LoadBalancer service, so that DO's external LB can perform
    #  health checks on JVB.
    annotations: {}
      # service.beta.kubernetes.io/do-loadbalancer-healthcheck-port: "8080"
      # service.beta.kubernetes.io/do-loadbalancer-healthcheck-protocol: "tcp"
    ## Add extra ports to the service.
    #  An example below is needed for DigitalOcean managed k8s setups.
    extraPorts: []
      # - name: http-healthcheck
      #   port: 8080
      #   protocol: TCP

  breweryMuc: jvbbrewery

  livenessProbe:
    httpGet:
      path: /about/health
      port: 8080
  readinessProbe:
    httpGet:
      path: /about/health
      port: 8080

  podLabels: {}
  podAnnotations: {}
  podSecurityContext: {}
  securityContext: {}
  resources: {}
  nodeSelector: {}
  tolerations: []
  affinity: {}
  extraEnvs: {}

  metrics:
    enabled: false
    image:
      repository: docker.io/systemli/prometheus-jitsi-meet-exporter
      tag: 1.2.3
      pullPolicy: IfNotPresent

    resources:
      requests:
        cpu: 10m
        memory: 16Mi
      limits:
        cpu: 20m
        memory: 32Mi

    prometheusAnnotations: false
    serviceMonitor:
      enabled: true
      selector:
        release: prometheus-operator
      interval: 10s
      # honorLabels: false

    grafanaDashboards:
      enabled: false
      labels:
        grafana_dashboard: "1"
      annotations: {}
octo:
  enabled: false

jigasi:
  ## Enabling Jigasi will allow regular SIP clients to join Jitsi meetings
  ## or nearly real-time transcription.
  enabled: false

  ## Use external Jigasi installation.
  ## This setting skips the creation of Jigasi Deployment altogether,
  ## instead creating just the config secret and enabling services.
  ## Defaults to disabled (use bundled Jigasi).
  useExternalJigasi: false

  replicaCount: 1
  image:
    repository: jitsi/jigasi

  breweryMuc: jigasibrewery

  ## jigasi XMPP user credentials:
  xmpp:
    user: jigasi
    password:

  livenessProbe:
    tcpSocket:
      port: 8788
  readinessProbe:
    tcpSocket:
      port: 8788

  podLabels: {}
  podAnnotations: {}
  podSecurityContext: {}
  securityContext: {}
  resources: {}
  nodeSelector: {}
  tolerations: []
  affinity: {}
  extraEnvs: {}

jibri:
  ## Enabling Jibri will allow users to record
  ## and/or stream their meetings (e.g. to YouTube).
  enabled: false

  ## Use external Jibri installation.
  ## This setting skips the creation of Jibri Deployment altogether,
  ## instead creating just the config secret
  ## and enabling recording/streaming services.
  ## Defaults to disabled (use bundled Jibri).
  useExternalJibri: false

  ## Enable single-use mode for Jibri.
  ## With this setting enabled, every Jibri instance
  ## will become "expired" after being used once (successfully or not)
  ## and cleaned up (restarted) by Kubernetes.
  ##
  ## Note that detecting expired Jibri, restarting and registering it
  ## takes some time, so you'll have to make sure you have enough
  ## instances at your disposal.
  ## You might also want to make LivenessProbe fail faster.
  singleUseMode: false

  ## Enable recording service.
  ## Set this to true/false to enable/disable local recordings.
  ## Defaults to enabled (allow local recordings).
  recording: true

  ## Enable livestreaming service.
  ## Set this to true/false to enable/disable live streams.
  ## Defaults to disabled (livestreaming is forbidden).
  livestreaming: false

  ## Enable multiple Jibri instances.
  ## If enabled (i.e. set to 2 or more), each Jibri instance
  ## will get an ID assigned to it, based on pod name.
  ## Multiple replicas are recommended for single-use mode.
  replicaCount: 1

  ## Enable persistent storage for local recordings.
  ## If disabled, jibri pod will use a transient
  ## emptyDir-backed storage instead.
  persistence:
    enabled: false
    size: 4Gi
    ## Set this to existing PVC name if you have one.
    existingClaim:
    storageClassName:

  shm:
    ## Set to true to enable "/dev/shm" mount.
    ## May be required by built-in Chromium.
    enabled: false
    ## If "true", will use host's shared memory dir,
    ## and if "false" — an emptyDir mount.
    # useHost: false
    # size: 256Mi

  ## Configure the update strategy for Jibri deployment.
  ## This may be useful depending on your persistence settings,
  ## e.g. when you use ReadWriteOnce PVCs.
  ## Default strategy is "RollingUpdate", which keeps
  ## the old instances up until the new ones are ready.
  # strategy:
  #   type: RollingUpdate

  image:
    repository: jitsi/jibri

  podLabels: {}
  podAnnotations: {}
  resources: {}

  breweryMuc: jibribrewery
  timeout: 90

  ## jibri XMPP user credentials:
  xmpp:
    user: jibri
    password:

  ## recorder XMPP user credentials:
  recorder:
    user: recorder
    password:

  livenessProbe:
    initialDelaySeconds: 5
    periodSeconds: 5
    failureThreshold: 2
    exec:
      command:
        - /bin/bash
        - "-c"
        - >-
          curl -sq localhost:2222/jibri/api/v1.0/health
          | jq '"\(.status.health.healthStatus) \(.status.busyStatus)"'
          | grep -qP 'HEALTHY (IDLE|BUSY)'

  readinessProbe:
    initialDelaySeconds: 5
    periodSeconds: 5
    failureThreshold: 2
    exec:
      command:
        - /bin/bash
        - "-c"
        - >-
          curl -sq localhost:2222/jibri/api/v1.0/health
          | jq '"\(.status.health.healthStatus) \(.status.busyStatus)"'
          | grep -qP 'HEALTHY (IDLE|BUSY)'

  extraEnvs: {}

  ## Override the image-provided configuration files:
  #  See https://github.com/jitsi/docker-jitsi-meet/tree/master/jibri/rootfs
  custom:
    contInit:
      _10_config: ""
    defaults:
      _autoscaler_sidecar_config: ""
      _jibri_conf: ""
      _logging_properties: ""
      _xorg_video_dummy_conf: ""

serviceAccount:
  # Specifies whether a service account should be created
  create: true
  # Annotations to add to the service account
  annotations: {}
  # The name of the service account to use.
  # If not set and create is true, a name is generated using the fullname template
  name:

xmpp:
  domain: meet.jitsi
  authDomain:
  mucDomain:
  internalMucDomain:
  guestDomain:

extraCommonEnvs: {}

prosody:
  enabled: true
  useExternalProsody: false
  server:
  extraEnvFrom:
  - secretRef:
      name: '{{ include "prosody.fullname" . }}-jibri'
  - secretRef:
      name: '{{ include "prosody.fullname" . }}-jicofo'
  - secretRef:
      name: '{{ include "prosody.fullname" . }}-jigasi'
  - secretRef:
      name: '{{ include "prosody.fullname" . }}-jvb'
  - configMapRef:
      name: '{{ include "prosody.fullname" . }}-common'
  image:
    repository: jitsi/prosody
    tag: stable-9646

  # service:
  #   ports:
  # If Prosody c2s in needed on private net outside the cluster
  #     xmppc2snodePort: 30522

  ## Override the image-provided configuration files:
  #  See https://github.com/jitsi/docker-jitsi-meet/tree/master/prosody/rootfs
  custom:
    contInit:
      _10_config: ""
    defaults:
      _prosody_cfg_lua: ""
      _saslauthd_conf: ""
      _jitsi_meet_cfg_lua: ""

  extraVolumes: []
    # - name: prosody-modules
    #   configMap:
    #     name: prosody-modules

  extraVolumeMounts: []
    # - name: prosody-modules
    #   subPath: mod_measure_client_presence.lua
    #   mountPath: /prosody-plugins-custom/mod_measure_client_presence.lua

For some reason /http-bind use https protocol and it cause this issue

Hello @NikitaSTets!
As for the values you've provided: I'm not sure if using <IP_ADDRESS> as your announced Public IP is going to do any good in this setup. I'd recommend leaving .Values.jvb.publicIPs unset, so that JVB pod would auto-discover the node's IP address. Are you going to expose this Jitsi Meet installation to the Internet, or is it going to be used in some internal network only?
As for the error log: this error says that your (I assume) JVB pod is unable to resolve the k8s service DNS record for Prosody. This may indicate that this pod either ignores cluster DNS or has some other problems with in-cluster DNS resolution. Please connect to the pod shell (with kubectl -n $namespace exec -it $podname -- /bin/bash or using your favourite k8s GUI) and try to check if the service name resolves correctly. You can use dig for that, it's included in the JVB image.
As for the HTTP(S) error: It seems that you're trying to expose the web service via a NodePort without enabling HTTPS inside the web pod. Both of these things are not recommended. Please use an ingress controller. Also, IIRC, some browsers explicitly disallow any WebRTC communication over plaintext HTTP since ~2017, so you'll need to use HTTPS anyway, even if only with a self-signed certificate.

Hey @spijet thanks for your reply,

We are going to use it in both cases, sometimes internaly sometimes expose to the internet.
Looks like it's smth went wront when I start it, after restart jvb pod it resolved it correctly.
yes, i just tried to run and see how it works and then going to expose it to run with more than 1 jvb pod to scale it and support a lot of sessions/connection at the same time.

In this case it might be preferable to explicitly set the IP address depending on the installation in question (internal-only or external+internal).

It could happen in case JVB pod gets scheduled and started before Prosody. Not much we can do here except rely on JVB's automatic reconnection logic and/or failure to start and subsequent pod restart by k8s.

From my experience there's not much need in scaling JVB pods unless you specifially need to:

Improve connectivity for users in different regions (e.g. some of your users are in western Europe, while others are in Middle East), or
When you host a lot of active big meeting rooms at the same time (i.e. you need more network bandwidth that one node can handle).

JVB rarely uses a lot of CPU, since it just sends audio/video streams back and forth between users without any transcoding or anything like that.

Hi @spijet
I am trying to run according to your recommendations but with no luck
Looks like ingress doesn't redirect to the web service. Did I miss smth?
`# Default values for jitsi-meet.
This is a YAML-formatted file.
Declare variables to be passed into your templates.
global:
Set your cluster's DNS domain here.
"cluster.local" should work for most environments.
Set to "" to disable the use of FQDNs (default in older chart versions).
clusterDomain: cluster.local
podLabels: {}
podAnnotations: {}
releaseSecretsOverride:
enabled: false
#Support environment variables from pre-created secrets, such as 1Password operator
#extraEnvFrom:
#  - secretRef:
#      name: '{{ include "prosody.fullname" . }}-overrides'
#      optional: true
imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""
enableAuth: false
enableGuests: true
Where Jitsi Web UI is made available
such as jitsi.example.com
publicURL: "jitsi.local"
tz: Europe/Amsterdam
image:
pullPolicy: IfNotPresent
WebSocket configuration:

Both Colibri and XMPP WebSockets are disabled by default,
since some LoadBalancer / Reverse Proxy setups can't pass
WebSocket connections properly, which might result in breakage
for some clients.

Enable both Colibri and XMPP WebSockets to replicate the current
upstream meet.jit.si setup. Keep both disabled to replicate
older setups which might be more compatible in some cases.
websockets:
Colibri (JVB signalling):
colibri:
enabled: false
XMPP (Prosody signalling):
xmpp:
enabled: false
web:
replicaCount: 1
image:
repository: jitsi/web
Override the image-provided configuration files:
See https://github.com/jitsi/docker-jitsi-meet/tree/master/web/rootfs
custom:
contInit:
_10_config: ""
defaults:
_default: ""
_ffdhe2048_txt: ""
_interface_config_js: ""
_meet_conf: ""
_nginx_conf: ""
_settings_config_js: ""
_ssl_conf: ""
_system_config_js: ""
configs:
_custom_interface_config_js: ""
_custom_config_js: ""
extraEnvs: {}
service:
type: ClusterIP
port: 443
## If you want to expose the Jitsi Web service directly
#  (bypassing the Ingress Controller), use this:
#
# type: NodePort
# ports:
# - name: http
# protocol: TCP
# port: 80               # The port on the service (ClusterIP)
# targetPort: 8080        # The port on the pod
# nodePort: 30580         # The external NodePort
# - name: https
# protocol: TCP
# port: 443              # The port on the service (ClusterIP)
# targetPort: 8443       # The port on the pod
# nodePort: 30443
externalIPs: []
ingress:
enabled: true
ingressClassName: "nginx"
annotations:
kubernetes.io/tls-acme: "true"
hosts:
- host: jitsi.local
paths: [/]
tls:
- secretName: my-release
hosts:
- jitsi.local
Useful for ingresses that don't support http-to-https redirect by themself, (namely: GKE),
httpRedirect: false
When tls-termination by the ingress is not wanted, enable this and set web.service.type=Loadbalancer
httpsEnabled: false
Resolver IP for nginx.

Starting with version stable-8044, the web container can
auto-detect the nameserver from /etc/resolv.conf.
Use this option if you want to override the nameserver IP.

resolverIP: <IP_ADDRESS>
livenessProbe:
httpGet:
path: /
port: 80
readinessProbe:
httpGet:
path: /
port: 80
podLabels: {}
podAnnotations: {}
podSecurityContext: {}
# fsGroup: 2000
securityContext: {}
# capabilities:
#   drop:
#   - ALL
# readOnlyRootFilesystem: true
# runAsNonRoot: true
# runAsUser: 1000
resources: {}
# We usually recommend not to specify default resources and to leave this as a conscious
# choice for the user. This also increases chances charts run on environments with little
# resources, such as Minikube. If you do want to specify resources, uncomment the following
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
# limits:
#   cpu: 100m
#   memory: 128Mi
# requests:
#   cpu: 100m
#   memory: 128Mi
nodeSelector: {}
tolerations: []
affinity: {}
jicofo:
replicaCount: 1
image:
repository: jitsi/jicofo
Override the image-provided configuration files:
See https://github.com/jitsi/docker-jitsi-meet/tree/master/jicofo/rootfs
custom:
contInit:
_10_config: ""
defaults:
_jicofo_conf: ""
_logging_properties: ""
xmpp:
password:
componentSecret:
livenessProbe:
tcpSocket:
port: 8888
readinessProbe:
tcpSocket:
port: 8888
podLabels: {}
podAnnotations: {}
podSecurityContext: {}
securityContext: {}
resources: {}
nodeSelector: {}
tolerations: []
affinity: {}
extraEnvs: {}
jvb:
replicaCount: 1
image:
repository: jitsi/jvb
xmpp:
user: jvb
password:
Set public IP addresses to be advertised by JVB.
You can specify your nodes' IP addresses,
or IP addresses of proxies/LoadBalancers used for your
Jitsi Meet installation. Or both!

Note that only the first IP address will be used for legacy
DOCKER_HOST_ADDRESS environment variable.

#publicIPs:
- <IP_ADDRESS>
- <IP_ADDRESS>
Alternative option: auto-detect Node's external IP address.
Recommended for OCTO setups (with either NodePort service
or hostPort enabled) where every JVB pod should announce it's
own IP address only.
useNodeIP: true
Use a STUN server to help some users punch through some
especially nasty NAT setups. Usually makes sense for P2P calls.
stunServers: 'meet-jit-si-turnrelay.jitsi.net:443'
Try to use the hostPort feature:
(might not be supported by some clouds or CNI engines)
useHostPort: false
Use host's network namespace:
(not recommended, but might help for some cases)
useHostNetwork: true
UDP transport port:
UDPPort: 10000
Use a pre-defined external port for NodePort or LoadBalancer service,
if needed. Will allocate a random port from allowed range if unset.
(Default NodePort range for K8s is 30000-32767)
nodePort: 10000
service:
enabled:
type: ClusterIP
externalTrafficPolicy: Cluster
externalIPs: []
## Annotations to be added to the service (if LoadBalancer is used)
#  An example below is needed for DigitalOcean managed k8s setups
#  with a LoadBalancer service, so that DO's external LB can perform
#  health checks on JVB.
annotations: {}
# service.beta.kubernetes.io/do-loadbalancer-healthcheck-port: "8080"
# service.beta.kubernetes.io/do-loadbalancer-healthcheck-protocol: "tcp"
## Add extra ports to the service.
#  An example below is needed for DigitalOcean managed k8s setups.
extraPorts: []
# - name: http-healthcheck
#   port: 8080
#   protocol: TCP
breweryMuc: jvbbrewery
livenessProbe:
httpGet:
path: /about/health
port: 8080
readinessProbe:
httpGet:
path: /about/health
port: 8080
podLabels: {}
podAnnotations: {}
podSecurityContext: {}
securityContext: {}
resources: {}
nodeSelector: {}
tolerations: []
affinity: {}
extraEnvs: {}
metrics:
enabled: false
image:
repository: docker.io/systemli/prometheus-jitsi-meet-exporter
tag: 1.2.3
pullPolicy: IfNotPresent
resources:
  requests:
    cpu: 10m
    memory: 16Mi
  limits:
    cpu: 20m
    memory: 32Mi

prometheusAnnotations: false
serviceMonitor:
  enabled: true
  selector:
    release: prometheus-operator
  interval: 10s
  # honorLabels: false

grafanaDashboards:
  enabled: false
  labels:
    grafana_dashboard: "1"
  annotations: {}

octo:
enabled: false
jigasi:
Enabling Jigasi will allow regular SIP clients to join Jitsi meetings
or nearly real-time transcription.
enabled: false
Use external Jigasi installation.
This setting skips the creation of Jigasi Deployment altogether,
instead creating just the config secret and enabling services.
Defaults to disabled (use bundled Jigasi).
useExternalJigasi: false
replicaCount: 1
image:
repository: jitsi/jigasi
breweryMuc: jigasibrewery
jigasi XMPP user credentials:
xmpp:
user: jigasi
password:
livenessProbe:
tcpSocket:
port: 8788
readinessProbe:
tcpSocket:
port: 8788
podLabels: {}
podAnnotations: {}
podSecurityContext: {}
securityContext: {}
resources: {}
nodeSelector: {}
tolerations: []
affinity: {}
extraEnvs: {}
jibri:
Enabling Jibri will allow users to record
and/or stream their meetings (e.g. to YouTube).
enabled: false
Use external Jibri installation.
This setting skips the creation of Jibri Deployment altogether,
instead creating just the config secret
and enabling recording/streaming services.
Defaults to disabled (use bundled Jibri).
useExternalJibri: false
Enable single-use mode for Jibri.
With this setting enabled, every Jibri instance
will become "expired" after being used once (successfully or not)
and cleaned up (restarted) by Kubernetes.

Note that detecting expired Jibri, restarting and registering it
takes some time, so you'll have to make sure you have enough
instances at your disposal.
You might also want to make LivenessProbe fail faster.
singleUseMode: false
Enable recording service.
Set this to true/false to enable/disable local recordings.
Defaults to enabled (allow local recordings).
recording: true
Enable livestreaming service.
Set this to true/false to enable/disable live streams.
Defaults to disabled (livestreaming is forbidden).
livestreaming: false
Enable multiple Jibri instances.
If enabled (i.e. set to 2 or more), each Jibri instance
will get an ID assigned to it, based on pod name.
Multiple replicas are recommended for single-use mode.
replicaCount: 1
Enable persistent storage for local recordings.
If disabled, jibri pod will use a transient
emptyDir-backed storage instead.
persistence:
enabled: false
size: 4Gi
## Set this to existing PVC name if you have one.
existingClaim:
storageClassName:
shm:
## Set to true to enable "/dev/shm" mount.
## May be required by built-in Chromium.
enabled: false
## If "true", will use host's shared memory dir,
## and if "false" — an emptyDir mount.
# useHost: false
# size: 256Mi
Configure the update strategy for Jibri deployment.
This may be useful depending on your persistence settings,
e.g. when you use ReadWriteOnce PVCs.
Default strategy is "RollingUpdate", which keeps
the old instances up until the new ones are ready.
strategy:
type: RollingUpdate
image:
repository: jitsi/jibri
podLabels: {}
podAnnotations: {}
resources: {}
breweryMuc: jibribrewery
timeout: 90
jibri XMPP user credentials:
xmpp:
user: jibri
password:
recorder XMPP user credentials:
recorder:
user: recorder
password:
livenessProbe:
initialDelaySeconds: 5
periodSeconds: 5
failureThreshold: 2
exec:
command:
- /bin/bash
- "-c"
- >-
curl -sq localhost:2222/jibri/api/v1.0/health
| jq '"(.status.health.healthStatus) (.status.busyStatus)"'
| grep -qP 'HEALTHY (IDLE|BUSY)'
readinessProbe:
initialDelaySeconds: 5
periodSeconds: 5
failureThreshold: 2
exec:
command:
- /bin/bash
- "-c"
- >-
curl -sq localhost:2222/jibri/api/v1.0/health
| jq '"(.status.health.healthStatus) (.status.busyStatus)"'
| grep -qP 'HEALTHY (IDLE|BUSY)'
extraEnvs: {}
Override the image-provided configuration files:
See https://github.com/jitsi/docker-jitsi-meet/tree/master/jibri/rootfs
custom:
contInit:
_10_config: ""
defaults:
_autoscaler_sidecar_config: ""
_jibri_conf: ""
_logging_properties: ""
_xorg_video_dummy_conf: ""
serviceAccount:
Specifies whether a service account should be created
create: true
Annotations to add to the service account
annotations: {}
The name of the service account to use.
If not set and create is true, a name is generated using the fullname template
name:
xmpp:
domain: meet.jitsi
authDomain:
mucDomain:
internalMucDomain:
guestDomain:
extraCommonEnvs: {}
prosody:
enabled: true
useExternalProsody: false
server:
extraEnvFrom:

secretRef:
name: '{{ include "prosody.fullname" . }}-jibri'
secretRef:
name: '{{ include "prosody.fullname" . }}-jicofo'
secretRef:
name: '{{ include "prosody.fullname" . }}-jigasi'
secretRef:
name: '{{ include "prosody.fullname" . }}-jvb'
configMapRef:
name: '{{ include "prosody.fullname" . }}-common'
image:
repository: jitsi/prosody
tag: stable-9646

service:
ports:
If Prosody c2s in needed on private net outside the cluster
xmppc2snodePort: 30522
Override the image-provided configuration files:
See https://github.com/jitsi/docker-jitsi-meet/tree/master/prosody/rootfs
custom:
contInit:
_10_config: ""
defaults:
_prosody_cfg_lua: ""
_saslauthd_conf: ""
_jitsi_meet_cfg_lua: ""
extraVolumes: []
# - name: prosody-modules
#   configMap:
#     name: prosody-modules
extraVolumeMounts: []
# - name: prosody-modules
#   subPath: mod_measure_client_presence.lua
#   mountPath: /prosody-plugins-custom/mod_measure_client_presence.lua`


In ZSH show zsh: command not found: sdk

In my Macbook pro, on zsh type "sdk" show zsh: command not found: sdk
then i enter :curl -s "https://get.sdkman.io" | bash   it will work again.
but when i close this terminal and start a new one , it's show command not found: sdk again.
how to solve this ?

For bash, sdkman appends the following to your ~/.bashrc
#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!! export SDKMAN_DIR="/home/USER/.sdkman" [[ -s "/home/USER/.sdkman/bin/sdkman-init.sh" ]] && source "/home/USER/.sdkman/bin/sdkman-init.sh"
(where USER is your username)
Just copy this on to the end of the ~/.zshrc and it should work just fine.

Can you confirm that you have this snippet? This should have been appended automatically to the .zshrc file when you installed sdkman.

@marc0der it happens quite often with oh-my-zsh that an update is reverting that file to some old backup, and those lines need to be manually added back.

Ah no, I copied it manually since I also had the same problem.

I also use oh-my-zsh but have never had it reverting my changes to .zshrc.
Let me know if you see this happening again.
On Thu, 23 Nov 2017, 14:09 meltzerpete<EMAIL_ADDRESS>wrote:

Ah no, I copied it manually since I also had the same problem.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/sdkman/sdkman-cli/issues/613#issuecomment-346628035,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAI0BtItCOBFg6dIfCJcIixO_AQyLNsQks5s5Xy2gaJpZM4QUZBX
.

✘ jiiiiiin@jiiiiiins-MacBook-Pro  ~/.oh-my-zsh/custom/plugins   master  source ~/.zshrc
/Users/jiiiiiin/.zshrc:120: parse error near `[['
✘ jiiiiiin@jiiiiiins-MacBook-Pro  ~/.oh-my-zsh/custom/plugins   master 
why?

.zshrc add:
SDKMAN_DIR="/home/jiiiiiin/.sdkman" [[ -s "/home/jiiiiiin/.sdkman/bin/sdkman-init.sh" ]] && source "/home/jiiiiiin/.sdkman/bin/sdkman-init.sh"

jiiiiiin is my mac username

What happens when you source the ~/.sdkman/bin/sdkman-init.sh?
Another experiment, what happens when you manually source your .zshrc.

For some reason, I was having the same problem on my MacBook Pro when doing a clean install of sdkman.
I ended up manually adding the snippet that @meltzerpete posted at the end of both my .bashrc and .bash_profile files.
That took care of it 🍻

This does not work for me despite following suggestions. See below:

Full .zshrc below:
# Add RVM to PATH for scripting. Make sure this is the last PATH variable change.
export PATH="$PATH:$HOME/.rvm/bin"

[ -s "/Users/charper/.jabba/jabba.sh" ] && source "/Users/charper/.jabba/jabba.sh"

#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="/Users/charper/.sdkman"
[[ -s "/Users/charper/.sdkman/bin/sdkman-init.sh" ]] && source "/Users/charper/.sdkman/bin/sdkman-init.sh"

The clue is in the title bar of your shell: it's a bash shell, not zsh. On
Linux we use the chsh command to permanently switch to a different shell.
Not sure if the same is true for OSX.
On Wed, 20 Dec 2017, 16:56 Connor<EMAIL_ADDRESS>wrote:

This does not work for me despite following suggestions. See below:
[image: screen shot 2017-12-20 at 11 55 01 am]
https://user-images.githubusercontent.com/9372848/34218638-b724a8ee-e57c-11e7-93b6-55cc643746e2.png
Full .zshrc below:
Add RVM to PATH for scripting. Make sure this is the last PATH variable change.
export PATH="$PATH:$HOME/.rvm/bin"
[ -s "/Users/charper/.jabba/jabba.sh" ] && source "/Users/charper/.jabba/jabba.sh"
#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="/Users/charper/.sdkman"
[[ -s "/Users/charper/.sdkman/bin/sdkman-init.sh" ]] && source "/Users/charper/.sdkman/bin/sdkman-init.sh"
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/sdkman/sdkman-cli/issues/613#issuecomment-353119806,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAI0BmaS0fsxMc1kCIUHfKajSV7r205Iks5tCTwzgaJpZM4QUZBX
.

I needed to include this in my .bash_profile - looks like it's working good now

Excellent news! Closing this issue.

For bash, sdkman appends the following to your ~/.bashrc
#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!! export SDKMAN_DIR="/home/USER/.sdkman" [[ -s "/home/USER/.sdkman/bin/sdkman-init.sh" ]] && source "/home/USER/.sdkman/bin/sdkman-init.sh"
(where USER is your username)
Just copy this on to the end of the ~/.zshrc and it should work just fine.

#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!  export SDKMAN_DIR="$HOME/.sdkman"  [[ -s "$SDKMAN_DIR/bin/sdkman-init.sh" ]] && source "$SDKMAN_DIR/bin/sdkman-init.sh"

i belive that you was using sdk on bash, you just have to copy the line in the .bash_profile , that export sdk , and past on the .zshrc, and refresh

Just execute this line: works fine for me Ubuntu 19.04
echo 'source "$HOME/.sdkman/bin/sdkman-init.sh"' >> ~/.zshrc

Very simple
step 1:
vim ~/.zshrc

step 2:(Add at the end of the file)
source ~/.bash_profile;

step 3:(Execution shell)
> source ~/.bash_profile

You can use sdkman :
➜  sdk
We periodically need to update the local cache. Please run:
$ sdk update
==== BROADCAST =================================================================

2020-09-21: jbang 0.47.1 now available for download.
2020-09-20: jbang 0.46.1 @jbangdev https://git.io/JUEb5
2020-09-20: jbang 0.46.0 @jbangdev https://git.io/JUEHD
================================================================================

Usage: sdk  [candidate] [version]
sdk offline <enable|disable>
commands:
install   or i     [version] [local-path]
uninstall or rm
list      or ls   [candidate]
use       or u
default   or d     [version]
home      or h
env       or e    [init]
current   or c    [candidate]
upgrade   or ug   [candidate]
version   or v
broadcast or b
help
offline           [enable|disable]
selfupdate        [force]
update
flush             <broadcast|archives|temp>
candidate  :  the SDK to install: groovy, scala, grails, gradle, kotlin, etc.
use list command for comprehensive list of candidates
eg: $ sdk list
version    :  where optional, defaults to latest stable if not provided
eg: $ sdk install groovy
local-path :  optional path to an existing local installation
eg: $ sdk install groovy 2.4.13-local /opt/groovy-2.4.13

@xadimousalih I really wouldn't recommend sourcing your bash profile from your zsh profile. Rather just add the following snippet to the end of .zshrc:
# SDKMAN!
export SDKMAN_DIR="$HOME/.sdkman"
[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"

@xadimousalih I really wouldn't recommend sourcing your bash profile from your zsh profile. Rather just add the following snippet to the end of .zshrc:
# SDKMAN!
export SDKMAN_DIR="$HOME/.sdkman"
[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"

Make sure this is at the very end.

+1 for making it in three separate lines, as I had it in 2 lines - first comment and the rest of the lines together which gave me an error as follows.
➜  h2 source ~/.zshrc /Users/raghavan.muthu/.zshrc:106: bad pattern: [[

just do this and that should resolve your issue
source ~/.bash_profile;


New version of minigrad

Hi Göktuğ, sorry for bothering you. I forked your minigrad repo and added the following functionalities:
In engine.c:

Added the sigmoid activation function.
Added the tanh activation function.
Added the exp and log functions to the Value struct.
Added the _op member to the Value struct for tracing functionalities.

In nn.py:

Modified it to be more similar to PyTorch in the network configuration.
Added the possibility to use RNN(1) layer.
Added a method to save and load the model weights.

In the examples folder:

Added a simple example for a regression problem.
Added a simple example for a multilabel classification problem.
Added an example for graph drawing.

Beyond these technical changes, I want to propose a new name for the project, and I have already registered it in the PyPi index: Kiwigrad. In the README, you can find a "meme" logo that I drew and the motivation behind this name.
If you consider my work valuable, I would be honoured to continue developing minigrad/kiwigrad and help you build our personal mini framework. My goal is to create something that I can use effectively in a limited computational environment, such as the Raspberry Pi, and to use it to study the implementation of major model architectures like the LSTM, ConvNet or Transformer in the future.

Hey Marco, really sorry for not replying, I totally forgot about it. Unfornutely, I don't really have time to look into it and I see that you are already working on it in a seperate repo :+1:


Version update failing

This feedstock is not updating from PyPI with the following error:
No error information available for version '0.2.3'.

Not sure what to make of this...
the 0.2.3 release, which is on PyPI, limits the ipywidgets dependency to ~=7.7which is captured by #5, so this release is not totally critical

@conda-forge/help-python, any thoughts on what's going wrong here? 0.2.3 is on PyPI, but this feedstock is failing to update

I think that's conda-forge/status#133. It should resolve itself in a few days as the backlog clears, or you can make a manual PR.

Thanks @dopplershift!


Error with installer - Permission  denied

After I've copied the files to the correct directory and tried to open the installer, but it told me Permission denied. I set the Permissions for every file and directory having to do with it to 777 but it's still telling me permission denied. (I've also tried several browsers)
Specs:
Raspberry Pi 3B+ with Fedora ARM 29
Apache 2.4
PHP 7.2.16

That user and group look wrong. Try running a chmod -R <user>: ., replacing <user> with the webserver user.

Changed the user and group, still the same error (your command didn't work I've used chown -R <user>:<group> <path>

Try this : chown -R www-data:www-data

Thank you it worked.


Update actix-web to 0.7.

I wanted to use this with actix-web 0.7 so created this patch. I'm not sure the migration plan but I hope to see it landing some time.

@qnighy @phansch also had published to crates.io: actix-web-httpauth = "0.1.0"


crate2nix: 0.11.0 -> 0.12.0

Automatic update generated by nixpkgs-update tools. This update was made based on information from https://github.com/nix-community/crate2nix/releases.
meta.description for crate2nix is: A Nix build file generator for Rust crates.
meta.homepage for crate2nix is: https://github.com/nix-community/crate2nix
Updates performed

Rust version update

To inspect upstream changes

Release on GitHub

Compare changes on GitHub

Impact

Checks done (click to expand)

built on NixOS
The tests defined in passthru.tests, if any, passed
found 0.12.0 with grep in /nix/store/41wvis3vif420hq0xaqg20lfdamm4x09-crate2nix-0.12.0
found 0.12.0 in filename of file in /nix/store/41wvis3vif420hq0xaqg20lfdamm4x09-crate2nix-0.12.0

Rebuild report (if merged into master) (click to expand)

1 total rebuild path(s)

1 package rebuild(s)

First fifty rebuilds by attrpath
crate2nix

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/41wvis3vif420hq0xaqg20lfdamm4x09-crate2nix-0.12.0 \
  --option binary-caches 'https://cache.nixos.org/ https://nix-community.cachix.org/' \
  --option trusted-public-keys '
  nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

(The Cachix cache is only trusted for this store-path realization.)
For the Cachix download to work, your user must be in the trusted-users list or you can use sudo since root is effectively trusted.
Or, build yourself:
nix-build -A crate2nix https://github.com/r-ryantm/nixpkgs/archive/b8de1b469d2ea33b29a3c9f43c207fb010d3b827.tar.gz

Or:
nix build github:r-ryantm/nixpkgs/b8de1b469d2ea33b29a3c9f43c207fb010d3b827#crate2nix

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/41wvis3vif420hq0xaqg20lfdamm4x09-crate2nix-0.12.0
ls -la /nix/store/41wvis3vif420hq0xaqg20lfdamm4x09-crate2nix-0.12.0/bin

Pre-merge build results
We have automatically built all packages that will get rebuilt due to
this change.
This gives evidence on whether the upgrade will break dependent packages.
Note sometimes packages show up as failed to build independent of the
change, simply because they are already broken on the target branch.
Result of nixpkgs-review run on x86_64-linux 1

1 package built:

crate2nix

Maintainer pings
cc @kolloch @cole-h for testing.

LGTM


running setup.sh on a fresh machine gives logstash error

ERROR: for logstash  Cannot start service logstash: Invalid address <IP_ADDRESS>: It does not belong to any of this network's subnets

My bad. Fixed: d17965c2732309927d3b9b646a2f8ab4812bedb1

Thanks for reporting. ^^


Advanced usage of tokenizer for sentence tokenization

I may have misunderstood the intent with the section under Advance Usage / Tokenizers (https://textblob.readthedocs.org/en/dev/advanced_usage.html#advanced) but I cannot get my passed in tokenizer to work with blob.sentences.  Is that the intended behaviour? (it would be helpful as then once you've passed in a different tokenizer, none of the rest of your code needs to be changed, but I can live w/o it if it's not practical or possible)
My ultimate intent it to allow sentences to be aware of some abbreviations it is currently mistaking for sentence ends ("min." and "max.").  I found how to do this wihtin NLTK itself (here: http://stackoverflow.com/questions/14095971/how-to-tweak-the-nltk-sentence-tokenizer ) and was able to combine this by following the advanced usage, but it doesn't pick up the new tokenizer if I use .sentences still.  Here's the code:
from textblob import TextBlob
from nltk.tokenize.punkt import PunktSentenceTokenizer, PunktParameters

punkt_param = PunktParameters()
punkt_param.abbrev_types = set(['min', 'max'])
tokenizer = PunktSentenceTokenizer(punkt_param)
blob = TextBlob("""This is a normal sentence with but with an abbreviation of min. in it. This one has max. in it too. This has none.""", tokenizer=tokenizer)
blob.tokens
for s1 in blob.sentences:
	print(s1)
for s2 in blob.tokens:
	print(s2)

which results in the output of the screenshot.  Anything obvious I'm doing wrong or overlooking?
Many thanks,
Neil

One additional point: it seems that it wouldn't be as simple as just using .tokens instead of .sentences, since several of the properties and methods no longer seem to work then.


License missing

I would like to use your library for dev-purposes in my projects. Can you provide a license in your repository?
See: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/licensing-a-repository

Hi @hiasel !
That's a very good point, I totally missed it! Let me add a license.


Bad opening with bookmarks

Assume you select a bookmark in NERDTree.
| NERDTree                      | File currently open                                                   |
 will indeed open it, but for example "i" or "go" won't open the file in the good window : the file will be open in the NERDTree's window, replacing NERDTree.
asciinema demo

Assume you set let NERDTreeShowBookmarks=1 in your .vimrc. Bookmarks will display in NERDTree window. I select a bookmark in NERDTree and execute t and T. I got error:
Error detected while processing function nerdtree#ui_glue#invokeKeyMap[1]..73[43]..72[3]..32_openInNewTab[1]..76[1]..92[4]..97[3]..86:
line    1:
E716: Key not present in Dictionary: root.AbsoluteTreeRoot() : a:nerdtree.root
E15: Invalid expression: a:searchFromAbsoluteRoot ? a:nerdtree.root.AbsoluteTreeRoot() : a:nerdtree.root
Error detected while processing function nerdtree#ui_glue#invokeKeyMap[1]..73[43]..72[3]..32_openInNewTab[1]..76[1]..92:
line    4:
E171: Missing :endif
Error detected while processing function nerdtree#ui_glue#invokeKeyMap[1]..73[43]..72:
line    3:
E171: Missing :endif
Error detected while processing function nerdtree#ui_glue#invokeKeyMap[1]..73:
line   43:
E171: Missing :endif
@scrooloose  I assume this is a bug.
@w2ak  Bookmarks has't i or go mapkey. You can read the quick help ? about bookmark table mappings.
" Bookmark table mappings~
" double-click,
" o: open bookmark
" t: open in new tab
" T: open in new tab silently
" D: delete bookmark

What abour the bindings for opening in v/hsplits ? Are you using the same version as me ?

This issue will be fixed by PR #835.


TypeError while creating dataframe

Hello, I don't know what I'm missing.
from optimus import Optimus
op = Optimus()
import pandas as pd
pdf = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c',3:'d'},
                    'B': {0: 1, 1: 3, 2: 5,3:7},
                       'C': {0: 2, 1: 4, 2: 6,3:None},
                       'D': {0:'1980/04/10',1:'1980/04/10',2:'1980/04/10',3:'1980/04/10'},
                       })

s_pdf = op.create.df(pdf=pdf)
s_pdf.table()

gives me, and I don't understand why
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
File python3.9/site-packages/IPython/core/interactiveshell.py, in run_code:
Line 3437:  exec(code_obj, self.user_global_ns, self.user_ns)

In  [5]:
Line 8:     s_pdf = op.create.df(pdf=pdf)

TypeError: data_frame() got an unexpected keyword argument 'pdf'

Hi @diagnostikon,
A couple of questions?
Which Optimus version did you install?
How Do you make the installation?

Hello!
I installed with python3 -m pip install optimuspyspark
I will try with another python version, maybe 3.6

Closing this. @diagnostikon please free to open an issue if you need help


Reading Data from Links in the Website Content

Add capability to extract the content of the pdf/slides uploaded for the lectures on the website. A good starting point is to first just extract the texts from these files, and then later try out multi-modal capabilities.

Done


Improve information about Code Repository Hosting

[Issue created based on the suggestion document that Naoe created]

Use the page “Code repository hosting for Nordic research
software:
source.coderefinery.org”
as it is (at least for now).

Or if there is a suspect that this page may cause the little use of
this service, we should inspect the details of this page more.

If I understand the issue correctly, we should leave it as it is for now?


Errors of type lstat: no such file or directory

Got it several times, typically from /proc entries:
error for /proc/4906: lstat /proc/4906: no such file or directory

2 observations:

This is also in warning class, should not be an error! If file has vanished during the backup, then oh well, there's nothing to backup, it's no error, but can be a warning (just like other cases of fast moving files).
If the file that has vanished is excluded, this is my case for the example above - I have excluded /proc/*, then I think the most appropriate action is to not even warn, just skip over the error.

That lstat() is done on excluded entries possibly uncovers another bug, maybe exclude filter should be more efficient? Pending further investigation...

Thanks for reporting this. I don't understand why this is happening, how did you call restic exactly?

restic backup --exclude-file=/usr/local/etc/restic-exclude.txt /
And exclude file contents are like this:
/mnt/*
/proc/*
/run/*
/sys/*
/tmp/*
...

Interesting, I'll have a look. For now, you can either use restic backup --one-file-system (which will stay on the file systems of the directories to be saved) or remove the * in each line.

What happens here is that restic first reads the entries of /proc (because /proc itself is not excluded, just the contents of it). It then calls lstat() for each entry, and only then consults the filtering rules. When the entry /proc/4906 vanishes between the first and the second step, the observed error occurs.
Do you have any suggestion what restic can do to prevent this from happening? My only idea is to instruct users to exclude /proc instead of /proc/*, but since those have slightly different semantics (the latter will backup the directory /proc itself, just without the content) there's nothing restic can do automatically...

You are right that I use /proc/* nomenclature to keep /proc directory itself. This allows disaster recovery, without needed to recreate missing directories after the restore.
I already suggested what I think is the right solution. If lstat(/somedir/somefile) returns a "no such file" error AND /somedir/somefile is excluded, just don't print the error. From the standpoint of the user, it's the expected behaviour. If I don't want to backup some file, I also don't care whether it exists or not. * means ALL files (not starting with .).

Hm, I can see where you're coming from. This however requires changing the way the archiver/exclude logic works, quite a lot.

This has been implemented in restic 0.9.3 by checking excludes before calling lstat, see #1912.


Snackbar link is wrong in readme

Snackbar link points to this link which is for MaterialCircularProgressIndicatorComponent
https://github.com/vinaygaba/Learn-Jetpack-Compose-By-Example/blob/master/app/src/main/java/com/example/jetpackcompose/material/MaterialActivity.kt#L323

Thanks for pointing this out. Yeah it's been a constant battle between adding new code/comments and keeping the README up-to-date. Will update it shortly!


implementation of stats service

Implementation of stats service

Coverage decreased (-3.7%) to 95.122% when pulling bcb0eba8793c0b89c1d65d825a797e67df639a58 on stats-service into 8fffd60986c930c87f19f81ce297d74d5e77cc0b on master.

Coverage increased (+0.1%) to 98.891% when pulling 34d084965c47c2bea100f58ee8089dcddc8fbfc3 on stats-service into 8fffd60986c930c87f19f81ce297d74d5e77cc0b on master.

Coverage increased (+0.3%) to 99.049% when pulling d10a2c7b304ae4a9c7405ce9c43a73282a519d8a on stats-service into 8fffd60986c930c87f19f81ce297d74d5e77cc0b on master.


Make weave deploy more robust

Sometimes we try to await the weave pods before any of them are ready.
This fails due to 1, so in the meantime implementing this workaround
makes deploying with weave much more robust (and stops wasting time
trying to redeploy).
Signed-off-by: Mike Kolesnik<EMAIL_ADDRESS>

Sometimes we try to await the weave pods before any of them are ready.

Would

Sometimes we try to await the weave pods before any of them have been created.

not be more accurate? The overall goal is to wait for the pods to be ready, but the failure addressed here occurs when we start waiting before any of them have been created.

Sometimes we try to await the weave pods before any of them are ready.

Would

Sometimes we try to await the weave pods before any of them have been created.

not be more accurate? The overall goal is to wait for the pods to be ready, but the failure addressed here occurs when we start waiting before any of them have been created.

@skitt sure, I've updated the commit message to reflect that


Update docs/network-requirements.md

Add the network requirement about feature BGPPolicy.
Merge the PR after #6447 and #6203.

/skip-all


add global enable/disable toggle

This PR:

adds a toggle to enable/disable all chart resources

Checklist

[x] Update changelog in CHANGELOG.md.
[x] Make sure values.yaml and values.schema.json are valid (more info on the values schema can be found here).

small addition to fix up templating of priorityclass values. using type int is a bad idea as it produces the following manifest:
value: 1e+09

merging this in, tested it locally with help template


Test Representation

I'm going to put the refinemask to the task of building extraction, but there exists a problem when presenting the test results. Obviously, many predicted boxes are overlay so I debug the code and find that the a nms operation is missed to process the bounding boxes. Besides, masks are not given in some masks and I still cannot find a reason to explain.

I'm looking forward to your responses since I'm not sure whether some details of the code are missed by myself.

I think it can be ascribed to the quality of the dataset!,I change the dataset and then the results are better!

I think it can be ascribed to the quality of the dataset!,I change the dataset and then the results are better!

Sorry for replying so late.
Yeah, the better the dataset quality, the better the segmentation results.
In our paper, the improvements of RefineMask w.r.t Mask R-CNN across three datasets: Cityscapes > LVIS > COCO.


Docs: Updated README with usage information (fixes #2)

Coverage remained the same at 100.0% when pulling 3c7d004a572216df713b6b3604583e77ff4f4dcf on usage into e412b431f5c11617e19ba8acbd5c4dd24dc64383 on master.


Flutter compute and network requests

I am building an application that has its own high level protocol that runs over TCP, thus I am using RawSocket and RawServerSocket to handle TCP communications. I have a static class that handles the communications and the logic of which message should I respond to first (Used various messaging queues to handle that). With flutter being Single Threaded, in order to not hang the main UI I created a Peridic Timer that checks if there are new messages in the message queue every 2.5 seconds (the messages enter the queue thanks to the event listener of the socket), then I handle the messages and the UI seems to run smooth.
I had the feeling that if I were to send a large amount of data such as an image or a song, I would hang up the Event looper due to it reading from the socket. So I tried to create a callback function to handle read/write events and call it up using the compute method so that it'll run on its own Isolate and return me the data once finished.
Unfortunately, I encountered the exception : flutter Illegal argument in isolate message object extends Native Wrapper...
This is obviously caused due to me attempting to send the RawSocket as it is, if I were to be able to encode it to a json string or some binary representation of it and then decode it inside the callback function this would work, but I don't seem to find an actual way to establish that.
My question is: How can I somehow send the socket over to the callback function while using compute? And, is the Read/Write operation of the socket managed in its own Isolate ?, because if they are, then I really don't need to use compute at all. I was unable to find information about this, apart from flutter stating that compute can send primative types only. Creating an Isolate and applying complex logic in it's send/recv methods seems like an overkill to establish such a simple thing. I really don't understand how the Flutter team excpects us to create applications that run smoothly with one thread (yes, they support async operations, but that is still managed on one single thread which makes large network operations really painful, that is if the RawSocket Read/Write operations are NOT run on a different Isolate)
Steps to Reproduce

create a callback function
call the compute function and pass the callback and a map that includes a socket or just a socket

Uint8List readFromTcpSocketCallback(Map<String, dynamic> m){
  return (m[ConstantValues.tcpSocketDefinitionForMap.toString()] as RawSocket).read(m[ConstantValues.amountReadDefinitionForMap.toString()]);
}

class Communications{
...
static Future<Uint8List> _readAllFromTcpSocket(RawSocket socket, int length)async{
    Uint8List finalBufferReceived;
    Uint8List buffer;
    int amountRead = 0;
    do
    {
      buffer = await compute(readFromTcpSocketCallback, {ConstantValues.tcpSocketDefinitionForMap.toString() : socket,
      ConstantValues.amountReadDefinitionForMap.toString() : length - amountRead});
      amountRead += buffer.length;
      finalBufferReceived.isEmpty ? finalBufferReceived = buffer : finalBufferReceived.addAll(buffer);
    }
    while(amountRead < length);
    return finalBufferReceived;
  }
}

Logs
[√] Flutter (Channel stable, v1.12.13+hotfix.5, on Microsoft Windows [Version 10.0.18362.535], locale en-IL)
    • Flutter version 1.12.13+hotfix.5 at C:\flutter
    • Framework revision 27321ebbad (4 weeks ago), 2019-12-10 18:15:01 -0800
    • Engine revision 2994f7e1e6
    • Dart version 2.7.0

[√] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
    • Android SDK at C:\Users\eitan\AppData\Local\Android\sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-29, build-tools 29.0.2
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b03)
    • All Android licenses accepted.

[!] Android Studio (version 3.5)
    • Android Studio at C:\Program Files\Android\Android Studio
    X Flutter plugin not installed; this adds Flutter specific functionality.
    X Dart plugin not installed; this adds Dart specific functionality.
    • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b03)

[√] VS Code (version 1.41.1)
    • VS Code at C:\Users\eitan\AppData\Local\Programs\Microsoft VS Code
    • Flutter extension version 3.7.1

[√] Connected device (1 available)
    • GM1900 • ******** • android-arm64 • Android 10 (API 29)

This sounds like a question that should be asked on one of our other community channels, e.g. StackOverflow. See https://flutter.dev/community for more information.

Hey,
I did not get a proper solution from SO. I'd like to reopen that here or get further info in order to redesign my project.
I am currently trying to understand if I even need to be worried about this situation:
I realized that there are serveral main Isolates in dart.
Are RawSocket and RawServerSocket operations blocking the main UI Isolate or are the Read/Write operations being performed on a different Isolate (I/O maybe?)
If they are blocking - for example if I READ 50 GB right now would the UI thread be hung?
if it does, I don't understand why it isn't pointed out, flutter stands to be a fast and reactive framework, which I believe it is, but if that is the situation why don't we have an option to pass sockets to Isolates??
Thanks in advance.