Reintroduce compatibility for PHP 5.4

Q
A

Fixed Tickets

License
MIT

This actually turned out to be very simple :)

:+1:

::+1::

Lots of unused imports now.

See StyleCI's diff.

Reintroduce compatibility for PHP 5.4

:-1: It's already EOL.

This was never a good idea :-1:

Decision to upgrade the PHP version on it's developer machine is up to each developer individually. Forcing Gush users to install newer PHP version just because is like forcing people to install Windows 8 even though app works on Windows 7 without problems.

Forcing Gush users to install newer PHP version just because is like forcing people to install Windows 8 even though app works on Windows 7 without problems.

I'm fine with that. :trollface:

I haven't used PHP 5.4 in a while (I stopped using it the day 5.5 was released). But not all developers upgrade their development environment frequently (I actually know developers still using PHP 5.3).
But 5.5 doesn't provide any useful functionality that we can use at the moment. This is a small change in order to please a wider range of developers that want to use Gush. Maintaining 5.4 compatibility isn't a hard thing to do, and when we want to start using more of the features in 5.5 (generators etc) then the minimum requirement can be bumped. But until that happens it doesn't make sense to require >= 5.5 just for the class constant and limit the project to a smaller number of users

i am convinced now it is a simple change. I am reviewing it and will merge after that.

done. That done and said.
I have to leave something very clear. Gush is a beloved project and being so it express the emotions and passion of the thriving spirit for good development of its creators and maintainers. So in the future case where there is a conflict where we have at stake the upgrading to gain enhancements or simplicity or readability etc, there can be a change of mind. I always wanted to navigate on bleeding edge because it helps you see new stuff and do things better. That said also, we are now happier letting other devs join and hopefully upgrade on their time.
I also supported old projects, but you can use tools to switch php versions nowadays. I even switch by hand if need be. But gush is ok to let it run on the latest for my case. In any case, we are now happy.

thanks @pierredup for shedding sober light and convince me. :+1:


adjusted typo in README and reinstated flixpatrol into config_schema

Not sure how I feel about "redacted" being accepted as valid URL input.

Not sure how I feel about "redacted" being accepted as valid URL input.

so I guess it was a quick "hack" to remove the false positives from the parsed yml file that is pulled by the bots when someone drops in a meta.log. These lines were coming up as problems and wanted to reduce the noise from people asking why the red squigglies and us answering its normal because we don't need to see your api keys, tokens, and urls.

Yeah, i understand that, but if the point of this schema to validate an actual config.yml, then explicitly accepting broken input seems counter to that goal.

genre_mapper isn't a string, is it?

genre_mapper isn't a string, is it?

not sure what it is to be fair... to properly allow this. Apologies if this is messing things up for you... not my intentions at all

genre_mapper isn't a string, is it?

not sure what it is to be fair... to properly allow this. Apologies if this is messing things up for you... not my intentions at all

That's why it isn't in there.  Setting this to accept a string will only accept invalid values and will reject valid values, so I don't understand what the point of adding it is.

HEre's the problem with these wide-ranging PRs.  I don't want to accept either the redacted URL thing or the broken genre-mapper.  I'm of two minds about the flixpatrol thing, since it's not yet in a release.

release.

I will remove those two additions. Flixpatrol is back in nightly21. I presume your mention of release is for master only?

I've cherry-picked changes from here, so rebase.
Yes, I'm referring to master.  My personal opinion is that master here should track master there.

I've cherry-picked changes from here, so rebase.
Yes, I'm referring to master.  My personal opinion is that master here should track master there.

Ok, so I did understand. I guess the idea would likely be that we create a master, develop, and nightly.... then push to nightly all the time?

Yeah, probably eventually the same structure.

Looks like the only things left here are things I don't want to accept.

Yeah, probably eventually the same structure.

So wouldn't we introduce this to pmm's nightly branch and hence we should follow that? So that it eventually ends up in master?

Looks like the only things left here are things I don't want to accept.

I'll close it.

I've cherry-picked changes from here, so rebase.
Yes, I'm referring to master.  My personal opinion is that master here should track master there.

Ok, so I did understand. I guess the idea would likely be that we create a master, develop, and nightly.... then push to nightly all the time?

There are now three branches here.


Fixes: #648 teams.json ordered

Fixes: #648

Fixed: contributorId 33 and 34 repetitions.
Fixed: contributorId 14 and 16 missing.
Fixed: Some team members were not ordered properly by contributorId.
Reassigned new contributorId to contributors whose previous contributorId were greater than 13.

Account:
0f92e975101eb96cea80dce430d74efd3172fa229377818d467ded85dcf2ab6c

@thesanjeevsharma even though this PR resolves the numbering, I feel that the data structure for the object could have been like in openings. Here we have segregated teams as per title and then so each object has one title and respective contributors and then we have array of such title objects.
Could this be made simple by adding category as a property like we have in openings ? Let me know your thoughts on this. For now I think the changes are okay and can be merged.

@lapstjup I checked the files. The last PR that was merged introduced those duplicate IDs. Let's fix only those and leave everthing as it is.
I am closing this.

@thesanjeevsharma Just need to assign new id to duplication of 33 and 34?


Support DestinationRule (beyond subsets) in waypoint

This PR implements full DestinationRule support in waypoints. Prior to this, only subsets were supported.
As part of this change, some of the sidecar TLS logic is refactored to avoid duplication. Aside from that, the changes should be scoped only to waypoints. Testing coverage includes e2e tests of applying various policies to waypoints

Skipping CI for Draft Pull Request.
If you want CI signal for your change, please convert it to an actual PR.
You can still manually trigger a test run with /test all

/test all

@howardjohn: The following test failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name
Commit
Details
Required
Rerun command

lint_istio
cb959753de3f57f18497d770ba8db4fc5e60c92b
link
true
/test lint

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

@howardjohn: The following tests failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name
Commit
Details
Required
Rerun command

lint_istio
cb959753de3f57f18497d770ba8db4fc5e60c92b
link
true
/test lint

integ-ambient-ipv6_istio
cb959753de3f57f18497d770ba8db4fc5e60c92b
link
true
/test integ-ambient-ipv6

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

@howardjohn: The following tests failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name
Commit
Details
Required
Rerun command

lint_istio
cb959753de3f57f18497d770ba8db4fc5e60c92b
link
true
/test lint

integ-ambient-ipv6_istio
cb959753de3f57f18497d770ba8db4fc5e60c92b
link
true
/test integ-ambient-ipv6

unit-tests-arm64_istio
cb959753de3f57f18497d770ba8db4fc5e60c92b
link
true
/test unit-tests-arm64

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

@howardjohn: The following tests failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name
Commit
Details
Required
Rerun command

integ-ambient-ipv6_istio
cb959753de3f57f18497d770ba8db4fc5e60c92b
link
true
/test integ-ambient-ipv6

unit-tests-arm64_istio
cb959753de3f57f18497d770ba8db4fc5e60c92b
link
true
/test unit-tests-arm64

unit-tests_istio
cb959753de3f57f18497d770ba8db4fc5e60c92b
link
true
/test unit-tests

lint_istio
40d87114e50065d12f986bb6f16c69c3a00c955e
link
true
/test lint

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

@howardjohn: The following tests failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name
Commit
Details
Required
Rerun command

integ-ambient-ipv6_istio
cb959753de3f57f18497d770ba8db4fc5e60c92b
link
true
/test integ-ambient-ipv6

unit-tests_istio
cb959753de3f57f18497d770ba8db4fc5e60c92b
link
true
/test unit-tests

lint_istio
40d87114e50065d12f986bb6f16c69c3a00c955e
link
true
/test lint

unit-tests-arm64_istio
40d87114e50065d12f986bb6f16c69c3a00c955e
link
true
/test unit-tests-arm64

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

@howardjohn: The following tests failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name
Commit
Details
Required
Rerun command

unit-tests_istio
cb959753de3f57f18497d770ba8db4fc5e60c92b
link
true
/test unit-tests

lint_istio
40d87114e50065d12f986bb6f16c69c3a00c955e
link
true
/test lint

unit-tests-arm64_istio
40d87114e50065d12f986bb6f16c69c3a00c955e
link
true
/test unit-tests-arm64

integ-ambient-ipv6_istio
40d87114e50065d12f986bb6f16c69c3a00c955e
link
true
/test integ-ambient-ipv6

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

@howardjohn: The following tests failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name
Commit
Details
Required
Rerun command

lint_istio
40d87114e50065d12f986bb6f16c69c3a00c955e
link
true
/test lint

unit-tests-arm64_istio
40d87114e50065d12f986bb6f16c69c3a00c955e
link
true
/test unit-tests-arm64

integ-ambient-ipv6_istio
40d87114e50065d12f986bb6f16c69c3a00c955e
link
true
/test integ-ambient-ipv6

integ-ambient_istio
40d87114e50065d12f986bb6f16c69c3a00c955e
link
true
/test integ-ambient

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

@howardjohn: The following tests failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name
Commit
Details
Required
Rerun command

integ-ambient_istio
40d87114e50065d12f986bb6f16c69c3a00c955e
link
true
/test integ-ambient

integ-ambient-ipv6_istio
4d08f11904407ec3e4df43829b1f423800109daf
link
true
/test integ-ambient-ipv6

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

/retest


[BUG]

问题描述
无法添加集成
环境信息:
Home Assistant 2023.1.7
前端版本： 20230110.0 - latest
添加集成时提示
无法加载配置向导: {"message":"Invalid handler specified"}

日志补充：
此错误来自自定义集成。
Logger: homeassistant.loader
Source: custom_components/haier/core/attribute.py:31
Integration: Haier (documentation, issues)
First occurred: 22:37:39 (1 occurrences)
Last logged: 22:37:39
Unexpected exception importing platform custom_components.haier.config_flow
Traceback (most recent call last):
File "/Users/homeserver/Documents/HomeAssistant/lib/python3.9/site-packages/homeassistant/loader.py", line 744, in get_platform
cache[full_name] = self._import_platform(platform_name)
File "/Users/homeserver/Documents/HomeAssistant/lib/python3.9/site-packages/homeassistant/loader.py", line 761, in _import_platform
return importlib.import_module(f"{self.pkg_path}.{platform_name}")
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/importlib/init.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 1030, in _gcd_import
File "", line 1007, in _find_and_load
File "", line 972, in _find_and_load_unlocked
File "", line 228, in _call_with_frames_removed
File "", line 1030, in _gcd_import
File "", line 1007, in _find_and_load
File "", line 986, in _find_and_load_unlocked
File "", line 680, in _load_unlocked
File "", line 850, in exec_module
File "", line 228, in _call_with_frames_removed
File "/Users/homeserver/.homeassistant/custom_components/haier/init.py", line 12, in
from .coordinator import DeviceCoordinator
File "/Users/homeserver/.homeassistant/custom_components/haier/coordinator.py", line 8, in
from .core.device import HaierDevice
File "/Users/homeserver/.homeassistant/custom_components/haier/core/device.py", line 5, in
from .attribute import HaierAttribute, V1SpecAttributeParser
File "/Users/homeserver/.homeassistant/custom_components/haier/core/attribute.py", line 9, in
class HaierAttribute:
File "/Users/homeserver/.homeassistant/custom_components/haier/core/attribute.py", line 31, in HaierAttribute
def unit(self) -> str | None:
TypeError: unsupported operand type(s) for |: 'type' and 'NoneType'

我本地没有复现，调整了一下代码，重新拉一下代码试试

重新部署了python3.11和ha2023.7.2的core，已可以登陆


[fix][broker] fix the incorrect swagger response parameter type

Motivation
modify  the incorrect swagger response parameter type in ClustersBase.class
Modifications
modify  the incorrect swagger response parameter type.

[X] doc-not-needed

@HQebupt PTAL, Thx.

@merlimat In the PR #10818 you changed the API return type but ignore change the swagger response class type. This PR will fix it, please take a look, Thx.

@merlimat In the PR https://github.com/apache/pulsar/pull/10818 you changed the API return type but ignore change the swagger response class type. This PR will fix it, please take a look, Thx.

@merlimat In the PR https://github.com/apache/pulsar/pull/10818 you changed the API return type but ignore change the swagger response class type. This PR will fix it, please take a look, Thx.

@merlimat In the PR https://github.com/apache/pulsar/pull/10818 you changed the API return type but ignore change the swagger response class type. This PR will fix it, please take a look, Thx.


(PUP-8213) Handle certmismatch error in legacy networking code

The Net::HTTP library in ruby 2.4 and up will automatically verify the
server's hostname and cert when VERIFY_PEER is enabled due to changes in
SSLSocket#connect. Ruby's openssl bindings will call our verify callback with
preverify_ok=false and store_context.error=0.
The Puppet::SSL::Verifier class already handles this error correctly. It
detects if the current cert causing the error is the leaf cert in the server's
chain, and if the hostname doesn't match the cert.
This commit applies the same logic to the legacy DefaultValidator class so it
behaves the same way. This behavior change will only affect legacy code calling
the old Puppet::Network::HttpPool.http_instance or .ssl_http_instance
methods, as the newer .connection method uses the newer Verifier.

jenkins please test this with windows2012r2-64a

CLA signed by all contributors.


Add backtrace option to errors

When debugging it can be difficult to know where an error occurred if  it is created in numerous places. For example, today if there's an error in expression eval and you run dump-table, you might simply see:
Error(Arrow(InvalidArgumentError("Incorrect number of arrays for StructArray fields, expected 2 got 3"))

But where in the numerous places arrow errors occur did this happen? Tracking this down can be tricky.
It turns out thiserror (the crate we use to create our Error class) does have support for backtrace capture (see the fourth code-block here). However, it relies on a nightly only api (provide which relies on error_generic_member_access), so we can't use it.
This PR adds manual backtrace capture to our error type. We do this by:

Adding a method to wrap an existing error in a Backtraced variant, which captures the error and a backtrace
Manually implementing the From trait for errors where we want the backtrace.
Right now this is only done for Arrow errors, which are all over the place in our client code. But in the future, when debugging an issue, it will be easy to move other error types to do this as needed.

This means that for errors we add this manual From, a backtrace will be captured at the point they are converted into a deltakernel::Error. This is usually via a ? somewhere in the kernel, so it is useful for debugging.
We also ensure that we only do this wrapping if backtracing is enabled (usually via RUST_BACKTRACE=1). Otherwise the wrapping method is a no-op, so this should have minimal perf impact.
Finally, we augment the dump-table command to pretty-print any errors it gets, which makes the backtrace more readable.
Now, we can get a nice error like this:
$ RUST_BACKTRACE=1 cargo run -- -- file:///home/nick/databricks/delta-kernel-rs/kernel/tests/data/basic_partitioned/
     Running `/home/nick/databricks/delta-kernel-rs/target/debug/dump-table -- 'file:///home/nick/databricks/delta-kernel-rs/kernel/tests/data/basic_partitioned/'`
Reading file:///home/nick/databricks/delta-kernel-rs/kernel/tests/data/basic_partitioned/
Backtraced {
    source: Arrow(
        InvalidArgumentError(
            "Incorrect number of arrays for StructArray fields, expected 2 got 3",
        ),
    ),
    backtrace: Backtrace [
        { fn: "deltakernel::error::Error::with_backtrace", file: "/home/nick/databricks/delta-kernel-rs/kernel/src/error.rs", line: 132 },
        { fn: "<deltakernel::error::Error as core::convert::From<arrow_schema::error::ArrowError>>::from", file: "/home/nick/databricks/delta-kernel-rs/kernel/src/error.rs", line: 146 },
        { fn: "<core::result::Result<T,F> as core::ops::try_trait::FromResidual<core::result::Result<core::convert::Infallible,E>>>::from_residual", file: "/rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/result.rs", line: 1963 },
        { fn: "deltakernel::client::arrow_expression::evaluate_expression", file: "/home/nick/databricks/delta-kernel-rs/kernel/src/client/arrow_expression.rs", line: 170 },
        { fn: "<deltakernel::client::arrow_expression::DefaultExpressionEvaluator as deltakernel::ExpressionEvaluator>::evaluate", file: "/home/nick/databricks/delta-kernel-rs/kernel/src/client/arrow_expression.rs", line: 271 },
        { fn: "deltakernel::scan::Scan::execute", file: "/home/nick/databricks/delta-kernel-rs/kernel/src/scan/mod.rs", line: 249 },
        { fn: "dump_table::try_main", file: "./src/main.rs", line: 72 },
        { fn: "dump_table::main", file: "./src/main.rs", line: 41 },
        { fn: "core::ops::function::FnOnce::call_once", file: "/rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/ops/function.rs", line: 250 },
        { fn: "std::sys_common::backtrace::__rust_begin_short_backtrace", file: "/rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/sys_common/backtrace.rs", line: 154 },
        { fn: "std::rt::lang_start::{{closure}}", file: "/rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/rt.rs", line: 167 },
        { fn: "core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once", file: "/rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/ops/function.rs", line: 284 },
        { fn: "std::panicking::try::do_call", file: "/rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/panicking.rs", line: 552 },
        { fn: "std::panicking::try", file: "/rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/panicking.rs", line: 516 },
        { fn: "std::panic::catch_unwind", file: "/rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/panic.rs", line: 142 },
        { fn: "std::rt::lang_start_internal::{{closure}}", file: "/rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/rt.rs", line: 148 },
        { fn: "std::panicking::try::do_call", file: "/rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/panicking.rs", line: 552 },
        { fn: "std::panicking::try", file: "/rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/panicking.rs", line: 516 },
        { fn: "std::panic::catch_unwind", file: "/rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/panic.rs", line: 142 },
        { fn: "std::rt::lang_start_internal", file: "/rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/rt.rs", line: 148 },
        { fn: "std::rt::lang_start", file: "/rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/rt.rs", line: 166 },
        { fn: "main" },
        { fn: "__libc_start_main" },
        { fn: "_start" },
    ],
}

We should be able to revert back to automatic backtracing via thiserror when error_generic_member_access stabilizes.

this looks awesome - i ran into the same issues when debugging myself! so should we have a macro do a bunch of the From<ErrorType> for Error so we get backtraces for all our error types?

So, I think we'll have to undo some of the work when thiserror just allows us to do this, so I was sort of leaning to just doing the ones we need. it also requires changes in the error enum, so i was going to limit it just to the ones that are raised in lots of places, and/or those we encounter as we go and want to and.

LGTM - i like that we have a good plan for removing this once error_generic_member_access stabilizes. One nit: maybe we should open an issue to track that and just call it blocked until stabilization?

Good call: https://github.com/delta-incubator/delta-kernel-rs/issues/157


Clear data before app launch

Due to various conditions (race, user interaction between test runs, etc) the app isn't always in a clean state on launch with noClearData=false. Adding a data clear before the app is launched.

@lukeis @JasnoWa Other issues/questions:

can we also remove clearing the data after releasing the device? It always happens pre starting the app now anyway.
can we update the docs here: https://github.com/selendroid/selendroid/blob/ec538326ccf930b9d981ec9cfdb555b795b4dc9a/selendroid-standalone/src/main/java/io/selendroid/standalone/SelendroidConfiguration.java#L106

ping @JasnoWa @lukeis

ping @JasnoWa @lukeis

Hey @asm89, Sorry for the super late delayed response (github email notifications were off). I left the clear data afterwards since I thought it should attempt to restore the app to the state it was at the start of the test.
I can create another pull request for the doc update if that's still desired.


gcr Image Tag v0.5.0 is missing bash and other binaries

With the latest release it looks like the base image may have changed and some binaries are no longer packaged. Most custom plugin scripts depend on bash, and as a result those are no longer working for me.
Image tag v0.5.0 details on gcr
Refs #160

@chadswen I have downloaded the v0.5.0 image from gcr.io and run docker run -it --entrypoint=sh gcr.io/google-containers/node-problem-detector:v0.5.0. The output of cat /etc/os-release is:

PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

So, it seems that the base image has not been changed.
What is the indeed problem for you? @chadswen

@chadswen I have prepared a PR to add bash to the debian-base image in https://github.com/kubernetes/kubernetes/pull/65949

@andyxning Thanks!


Audio engine

Self explanatory, I'll add a todo-list later on.

Finished (surprisingly fast and easy :p).


Material UI v5

This updates material UI from v3 to v5.
Because the new material contains various breaking changes and dependencies, the PR also servers for:

React from v16 to v17 (I avoided v18)
allowSyntheticDefaultImports is set to true to be compatible with material UI
@types/prop-types as required by material UI
Couple of CSS tweaks to fit the new UI

@LunaticMuch I rebased your PR and pushed some changes on top.
Can you please review them?

I made a couple of changes, padding is back as it used to be and the button is grey.
Ideally, we should make few tweaks to the entire way MUI is used, but not mandatory for sorting this PR.
I rebased from you and also changed the branch default to main on my fork as well. I see some jobs still failing, need to look at them.


login fail

Describe the bug
Bad request using --login
To Reproduce
instaloader --login=usernamehere
Error messages and tracebacks
Fatal error: Login error: JSON decode fail, 400 - Bad Request.
Instaloader version
4.4.1
Additional context
I have checked the code and it seems to be using the web request and the password there is somehow encrypted, the post data is not the password itself.
I have the mobile api in case you need it!

Yes, I'm also having this issue.

Same here. First time using, though.

Same here.

For me it was working fine till yesterday but now its not even tried uninstalling simplejson mpdule in python but it didnt help

Yep, can confirm - Had this sometimes starting with Version 4.4.but am getting this seemingly 100% of the time here.

Yes same here

Ohhh! Not again!

I felt that the response from instagram is a little bit slower than usual in console.

Login error: JSON decode fail, 400 - Bad Request.

I analyzed what happens within a normal login procedure on instagram.com using chrome console.
Instagram is loading encryptionUtils.js, encrypts the password, and sends it as enc_password in FormData.
It is possible to use Instaloader when using the enc_password instead of the normal password as used before.
I hope this information can help the developer to find a solution to the issue.

Just started using this today, also getting this bug - is it out of the usual?

Yes, very. I've been running it a bit more than a year, and a few times I've missed stories, but that was because I forgot to run it. Guess I get to do an overlapping highlights scan of everything once it works again. You can't get everything, even if you're me.

I started to having this issue since yesterday:
user@user-mycomputer:~/ig$ instaloader --version
4.4.1
user@user-mycomputer:~/ig$ instaloader profile xxxxxxxx --fast-update --login myigusername
Session file does not exist yet - Logging in.
Enter Instagram password for myigusername:
Traceback (most recent call last):
File "/home/marcelo/.local/bin/instaloader", line 8, in
sys.exit(main())
File "/home/marcelo/.local/lib/python3.6/site-packages/instaloader/main.py", line 435, in main
storyitem_filter_str=args.storyitem_filter)
File "/home/marcelo/.local/lib/python3.6/site-packages/instaloader/main.py", line 104, in _main
instaloader.interactive_login(username)
File "/home/marcelo/.local/lib/python3.6/site-packages/instaloader/instaloader.py", line 1222, in interactive_login
self.login(username, password)
File "/home/marcelo/.local/lib/python3.6/site-packages/instaloader/instaloader.py", line 462, in login
self.context.login(user, passwd)
File "/home/marcelo/.local/lib/python3.6/site-packages/instaloader/instaloadercontext.py", line 221, in login
resp_json = login.json()
File "/home/marcelo/.local/lib/python3.6/site-packages/requests/models.py", line 898, in json
return complexjson.loads(self.text, **kwargs)
File "/usr/lib/python3/dist-packages/simplejson/init.py", line 518, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 370, in decode
obj, end = self.raw_decode(s)
File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 400, in raw_decode
return self.scan_once(s, idx=_w(s, idx).end())
simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

I started to having this issue since yesterday (05-14-2020):
user@user-mycomputer:~/ig$ instaloader --version
4.4.1
user@user-mycomputer:~/ig$ instaloader profile xxxxxxxx --fast-update --login myigusername
Session file does not exist yet - Logging in.
Enter Instagram password for myigusername:
Traceback (most recent call last):
File "/home/user/.local/bin/instaloader", line 8, in
sys.exit(main())
File "/home/user/.local/lib/python3.6/site-packages/instaloader/main.py", line 435, in main
storyitem_filter_str=args.storyitem_filter)
File "/home/user/.local/lib/python3.6/site-packages/instaloader/main.py", line 104, in _main
instaloader.interactive_login(username)
File "/home/user/.local/lib/python3.6/site-packages/instaloader/instaloader.py", line 1222, in interactive_login
self.login(username, password)
File "/home/user/.local/lib/python3.6/site-packages/instaloader/instaloader.py", line 462, in login
self.context.login(user, passwd)
File "/home/user/.local/lib/python3.6/site-packages/instaloader/instaloadercontext.py", line 221, in login
resp_json = login.json()
File "/home/user/.local/lib/python3.6/site-packages/requests/models.py", line 898, in json
return complexjson.loads(self.text, **kwargs)
File "/usr/lib/python3/dist-packages/simplejson/init.py", line 518, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 370, in decode
obj, end = self.raw_decode(s)
File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 400, in raw_decode
return self.scan_once(s, idx=_w(s, idx).end())
simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

there is a problem about instagram because i coded a script without instaloader and it gets same "bad request"

Same here 😢 https://github.com/pgrimaud/instagram-user-feed/issues/65

import datetime
import base64
import numpy
from Crypto import Random
from Crypto.Cipher import AES
from nacl.public import PrivateKey, PublicKey, SealedBox
def encryptPassword(app_id, key_id, public_key, password, time):
def parsePkey(key):  # function n(t) {
    n = []  # const n = [];
    for o in range(0, len(key), 2):  # for (let o = 0; o < t.length; o += 2)
        n.append(int(key[o:o + 2], 16))  # n.push(parseInt(t.slice(o, o + 2), 16));
    return n  # return new Uint8Array(n)

def js_set(list1, arr, pos):
    list1[pos:pos + len(arr)] = arr

o = 100
u = o + len(password)

if 64 != len(public_key):
    print("Invalid Public Key")

public_key = parsePkey(public_key)
y = numpy.frombuffer(bytearray(u), dtype=numpy.uint8)
f = 0
y[f] = 1
f += 1
y[f] = int(key_id)  # Sets 2nd byte to key_id
f += 1  # Parsed public_key and Array y match with Javascript at this point

key = Random.get_random_bytes(32)  # = subtle.generateKey 256 bits
iv = Random.get_random_bytes(12)
tag_length = 16
aes = AES.new(key, AES.MODE_GCM, mac_len=tag_length, nonce=iv)
cipher_text, cipher_tag = aes.encrypt_and_digest(bytearray(password, 'utf-8'))
cipher_text = cipher_text + cipher_tag
public_key_seal = PublicKey(bytes(public_key))

tmp_sealed = SealedBox(public_key_seal)
sealed = numpy.frombuffer(tmp_sealed.encrypt(bytes(key)), dtype=numpy.uint8)
y[f] = len(sealed)  # y[f] = 255 & sealed.length
y[f + 1] = 0  # y[f + 1] = sealed.length >> 8 & 255
f += 2
js_set(y, sealed, f)  # y.set(sealed, f)
f += 32
f += 48

s = numpy.frombuffer(cipher_text, dtype=numpy.uint8) # const s = new Uint8Array(ciphertext)
c = s[-16:]  # const c = s.slice(-16)
h = s[0:-16]  # const h = s.slice(0, -16)
js_set(y, c, f)  # y.set(c, f)
f += 16
js_set(y, h, f)  # y.set(h, f)

enc_pass = str(base64.b64encode(y).decode('utf-8')) # let t = btoa(y)

return '#PWD_INSTAGRAM_BROWSER' + ':' + app_id + ':' + time + ':' + enc_pass

def main():
APP_ID = '6'
KEY_ID = '89'
PUBLIC_KEY = '2e5b022acd391257cec16e261ea9e1c9a4f1680a364e94748f7a9a9905e94c13'
PASSWORD = 'password'
time = str(int((datetime.datetime.now().timestamp() * 1000)))
enc_password = encryptPassword(APP_ID, KEY_ID, PUBLIC_KEY, PASSWORD, time)
print(enc_password)

import datetime
import base64
import numpy
from Crypto import Random
from Crypto.Cipher import AES
from nacl.public import PrivateKey, PublicKey, SealedBox
def encryptPassword(app_id, key_id, public_key, password, time):
def parsePkey(key):  # function n(t) {
    n = []  # const n = [];
    for o in range(0, len(key), 2):  # for (let o = 0; o < t.length; o += 2)
        n.append(int(key[o:o + 2], 16))  # n.push(parseInt(t.slice(o, o + 2), 16));
    return n  # return new Uint8Array(n)

def js_set(list1, arr, pos):
    list1[pos:pos + len(arr)] = arr

o = 100
u = o + len(password)

if 64 != len(public_key):
    print("Invalid Public Key")

public_key = parsePkey(public_key)
y = numpy.frombuffer(bytearray(u), dtype=numpy.uint8)
f = 0
y[f] = 1
f += 1
y[f] = int(key_id)  # Sets 2nd byte to key_id
f += 1  # Parsed public_key and Array y match with Javascript at this point

key = Random.get_random_bytes(32)  # = subtle.generateKey 256 bits
iv = Random.get_random_bytes(12)
tag_length = 16
aes = AES.new(key, AES.MODE_GCM, mac_len=tag_length, nonce=iv)
cipher_text, cipher_tag = aes.encrypt_and_digest(bytearray(password, 'utf-8'))
cipher_text = cipher_text + cipher_tag
public_key_seal = PublicKey(bytes(public_key))

tmp_sealed = SealedBox(public_key_seal)
sealed = numpy.frombuffer(tmp_sealed.encrypt(bytes(key)), dtype=numpy.uint8)
y[f] = len(sealed)  # y[f] = 255 & sealed.length
y[f + 1] = 0  # y[f + 1] = sealed.length >> 8 & 255
f += 2
js_set(y, sealed, f)  # y.set(sealed, f)
f += 32
f += 48

s = numpy.frombuffer(cipher_text, dtype=numpy.uint8) # const s = new Uint8Array(ciphertext)
c = s[-16:]  # const c = s.slice(-16)
h = s[0:-16]  # const h = s.slice(0, -16)
js_set(y, c, f)  # y.set(c, f)
f += 16
js_set(y, h, f)  # y.set(h, f)

enc_pass = str(base64.b64encode(y).decode('utf-8')) # let t = btoa(y)

return '#PWD_INSTAGRAM_BROWSER' + ':' + app_id + ':' + time + ':' + enc_pass

def main():
APP_ID = '6'
KEY_ID = '89'
PUBLIC_KEY = '2e5b022acd391257cec16e261ea9e1c9a4f1680a364e94748f7a9a9905e94c13'
PASSWORD = 'password'
time = str(int((datetime.datetime.now().timestamp() * 1000)))
enc_password = encryptPassword(APP_ID, KEY_ID, PUBLIC_KEY, PASSWORD, time)
print(enc_password)

Hello, thanks for reply. I will try this. Is it worked on you?

I'm not sure about the coding part yet but is it possible to incorporate the login flow from instabot because its still working fine

Instabot is warning people not to use any scripts, for fear of getting banned.
The main problem with that is: Without bots, Instagram isn't worth using.
I only want the videos. That would have been slow enough on the web site, but having to see the pictures too makes the whole site a waste of my time.
I can just expand my Youtube operations or make a script for Likee, Tik Tok or something.

Having the same issue when attempting to login

import datetime
import base64
import numpy
from Crypto import Random
from Crypto.Cipher import AES
from nacl.public import PrivateKey, PublicKey, SealedBox
def encryptPassword(app_id, key_id, public_key, password, time):
def parsePkey(key):  # function n(t) {
    n = []  # const n = [];
    for o in range(0, len(key), 2):  # for (let o = 0; o < t.length; o += 2)
        n.append(int(key[o:o + 2], 16))  # n.push(parseInt(t.slice(o, o + 2), 16));
    return n  # return new Uint8Array(n)

def js_set(list1, arr, pos):
    list1[pos:pos + len(arr)] = arr

o = 100
u = o + len(password)

if 64 != len(public_key):
    print("Invalid Public Key")

public_key = parsePkey(public_key)
y = numpy.frombuffer(bytearray(u), dtype=numpy.uint8)
f = 0
y[f] = 1
f += 1
y[f] = int(key_id)  # Sets 2nd byte to key_id
f += 1  # Parsed public_key and Array y match with Javascript at this point

key = Random.get_random_bytes(32)  # = subtle.generateKey 256 bits
iv = Random.get_random_bytes(12)
tag_length = 16
aes = AES.new(key, AES.MODE_GCM, mac_len=tag_length, nonce=iv)
cipher_text, cipher_tag = aes.encrypt_and_digest(bytearray(password, 'utf-8'))
cipher_text = cipher_text + cipher_tag
public_key_seal = PublicKey(bytes(public_key))

tmp_sealed = SealedBox(public_key_seal)
sealed = numpy.frombuffer(tmp_sealed.encrypt(bytes(key)), dtype=numpy.uint8)
y[f] = len(sealed)  # y[f] = 255 & sealed.length
y[f + 1] = 0  # y[f + 1] = sealed.length >> 8 & 255
f += 2
js_set(y, sealed, f)  # y.set(sealed, f)
f += 32
f += 48

s = numpy.frombuffer(cipher_text, dtype=numpy.uint8) # const s = new Uint8Array(ciphertext)
c = s[-16:]  # const c = s.slice(-16)
h = s[0:-16]  # const h = s.slice(0, -16)
js_set(y, c, f)  # y.set(c, f)
f += 16
js_set(y, h, f)  # y.set(h, f)

enc_pass = str(base64.b64encode(y).decode('utf-8')) # let t = btoa(y)

return '#PWD_INSTAGRAM_BROWSER' + ':' + app_id + ':' + time + ':' + enc_pass

def main():
APP_ID = '6'
KEY_ID = '89'
PUBLIC_KEY = '2e5b022acd391257cec16e261ea9e1c9a4f1680a364e94748f7a9a9905e94c13'
PASSWORD = 'password'
time = str(int((datetime.datetime.now().timestamp() * 1000)))
enc_password = encryptPassword(APP_ID, KEY_ID, PUBLIC_KEY, PASSWORD, time)
print(enc_password)

Hello, thanks for reply. I will try this. Is it worked on you?

I tried using this, It didnt work for me.

There have been changes regarding the login on Instagram's side and Instaloader's login functionality is currently broken. As long as there does not exist any solution, we can only present the following advice:

The workaround described in Troubleshooting - Login Error, which creates the sessionfile from the Firefox cookie database, still works.
Always keep your sessionfile. I have never seen a sessionfile expire. If you have your sessionfile, no login is required, and thus, no login can fail.

The snippet posted in this issue to allegedly fix the login error does not seem to work. As always, we are very open to discuss ideas in Pull Requests.

How do you run a snippet in Firefox?

@jqdoumen that is a python snippet, save it to your computer and run python script.py
If you are on windows just replace the path inside the script with the path to your profile.
 I had to use python3 rather than python, turn Firefox off Private Browsing mode and set the script to use *.default-esr since I'm on Debian. Any stories anyone missed you'll just have to run a highlights scan to cover since it hasn't worked...but if you're a long term user, you figured out that a long time ago anyway.

i always get "sqlite3.OperationalError: database is locked" error

hawks, turn off firefox.

i got through it but caught up in the exception Cookie import failed. Are you logged in successfully in Firefox?

Always keep your sessionfile. I have never seen a sessionfile expire. If you have your sessionfile, no login is required, and thus, no login can fail.

Would it be possible to create session file e.g. in homedir instead of in /tmp by default? I know there is a option but it would be better to use some persistent location by default. /tmp is deleted on boot in Debian and Termux (and probably other distros). A few times I was already stressed about to login again but no such big problem for me, at least I can refresh my password :-) But for such case it would be great if the session file can stay between reboots. I have done login on FF 76.0.1 now exported the cookies to instaloader session file using the python code and the session file works now. I have created the session file in my homedir and set -f SESSIONFILE options for every instaloader run.
As akatreyt writes, for FF 76.0.1 there is no baseDomain column in sqlite cookies file, there is host field instead so correct execute is, thank you akatreyt
 execute("SELECT name, value FROM moz_cookies WHERE host='.instagram.com'")
there is apostrophe and then quotes at the end before parenthesis - akatreyt has only quotes - just forgotten apostrophe for host='...'.

Is this fixed yet?

Is this fixed yet?

https://github.com/instaloader/instaloader/issues/615#issuecomment-629699078

What if we create session manually

@seisdr
it works

@seisdr I can confirm, Login in FF 76.0.1, using the python code from Troubleshooting - Login Error page (replace baseDomain='instagram.com' with host='.instagram.com' for "newer" FF e.g. 76.0.1 if you get no such column: baseDomain error) generate instaloader session file, then use option -f SESSIONFILE together with -l USERNAME reports logged in as USERNAME without password asking. The keep this session file and you can access IG forever :+1:

@duckyb Thanks ! Seems that the script doesn't know where to find instaloader:
Traceback (most recent call last):
File "instafix.py", line 5, in
from instaloader import ConnectionException, Instaloader
ModuleNotFoundError: No module named 'instaloader'
instaloader installed with "pip3 install instaloader"
I'm on a Mac, so already adapted the location of the cookies file ...

I said before you need to use python3. I ran into that same problem.
python3 instafix.py

Would it be possible to create session file e.g. in homedir instead of in /tmp by default?... I have done login on FF 76.0.1 now exported the cookies to instaloader session file using the python code and the session file works now. I have created the session file in my homedir and set -f SESSIONFILE options for every instaloader run.

You can define an alias to always add the -f argument in your .bashrc or wherever you like to do it:
alias instaloader='instaloader -f ~/{name_of_your_session_file}

Would it be possible to create session file e.g. in homedir instead of in /tmp by default?...
You can define an alias to always add the -f argument in your .bashrc or wherever you like to do it:
alias instaloader='instaloader -f ~/{name_of_your_session_file}
Yes, I know, I can define alias or function or even wrapper shell script. But this has to be done on all hosts. In fact, I have updated my "wrapper" and added this option as default. I could do it earlier, but I was too lazy and it wasn't for me crucial to enter the password after reboot. But now it's important to keep the session file. Users maybe would prefer, if this would be as default and this issue would probably never be created :smile: But take my question as proposal.

Yeah, I agree that that would be a nice option.

I followed the same steps described here: Troubleshooting - Login Error i got successfully the sessionfile with the fix from here

@seisdr I can confirm, Login in FF 76.0.1, using the python code from Troubleshooting - Login Error page (replace baseDomain='instagram.com' with host='.instagram.com' for "newer" FF e.g. 76.0.1 if you get no such column: baseDomain error) generate instaloader session file, then use option -f SESSIONFILE together with -l USERNAME reports logged in as USERNAME without password asking. The keep this session file and you can access IG forever

BUT... it still fails. Instaloader loads the sessionfile but asks for the password, entered the password with the same result: Fatal Error: Login error: JSON decode fail, 400 - Bad Request.
I used my laptop to get the sessionfile from FF and transfered the sessionfile to my NAS (file permissions are ok), that shouldn't matter, right? Since i got the sessionfile successfully extracted and no other dependencies are on the sessionfile

I followed the same steps described here: Troubleshooting - Login Error i got successfully the sessionfile with the fix from here

@seisdr I can confirm, Login in FF 76.0.1, using the python code from Troubleshooting - Login Error page (replace baseDomain='instagram.com' with host='.instagram.com' for "newer" FF e.g. 76.0.1 if you get no such column: baseDomain error) generate instaloader session file, then use option -f SESSIONFILE together with -l USERNAME reports logged in as USERNAME without password asking. The keep this session file and you can access IG forever

BUT... it still fails. Instaloader loads the sessionfile but asks for the password, entered the password with the same result: Fatal Error: Login error: JSON decode fail, 400 - Bad Request.
I used my laptop to get the sessionfile from FF and transfered the sessionfile to my NAS (file permissions are ok), that shouldn't matter, right? Since i got the sessionfile successfully extracted and no other dependencies are on the sessionfile

If you log out from Instagram in Firefox the created sessionfile is invalid. You have to create a profile in Firefox and stay logged in.

I followed the same steps described here: Troubleshooting - Login Error i got successfully the sessionfile with the fix from here
BUT... it still fails. Instaloader loads the sessionfile but asks for the password, entered the password with the same result: Fatal Error: Login error: JSON decode fail, 400 - Bad Request.

Check following:

have you changed the filename of firefox cookie sqlite in variable FIREFOXCOOKIEFILE, if you don't have standard profile? Check the output of ls -1 ~/.mozilla/firefox/*.default/cookies.sqlite - do you get just one file? If you get multiple files, it means there are many profiles and you have to cleanup old profiles or change the path to the correct one. If you get one, is it really the one, which your browser use?
have you run python3 SCRIPT and the output was Saved session to /tmp/.instaloader-XXXX/session-USERNAME?
have you copied/moved the /tmp/.instaloader-XXXX/session-USERNAME to some other location and then used -l USERNAME -f SESSION-FILE at instaloader command line?
do you use the same username in browser and instaloader?
and, as Tom1287, I hope you have not logged out or cleared the cookies or exited the browser with auto cleanup.

I have copied the cookies.sqlite from firefox to /tmp and then run the python script with the file in /tmp.

I used my laptop to get the sessionfile from FF and transfered the sessionfile to my NAS (file permissions are ok), that shouldn't matter, right? Since i got the sessionfile successfully extracted and no other dependencies are on the sessionfile

I have used notebook to generate the session file and copied to android phone with termux and it works. So there has to be one incorrect step.

I don't suppose there exists a workaround for those of us using the windows standalone client?

Seguí los mismos pasos descritos aquí: Solución de problemas - Error de inicio de sesión Obtuve el archivo de sesión con la solución aquí.

@seisdr puedo confirmar, Entrar en FF 76.0.1, utilizando el código de pitón de resolución de problemas - Error de sesión página (sustituir baseDomain='instagram.com'con host='.instagram.com'de "nuevo" FF por ejemplo 76.0.1 si se obtiene tal columna: baseDomain error) generan instaloader archivo de sesión, luego use la opción -f SESSIONFILEjunto con los -l USERNAMEinformes logged in as USERNAMEsin solicitar la contraseña. Mantenga este archivo de sesión y podrá acceder a IG para siempre

PERO ... todavía falla. Instaloader carga el archivo de sesión pero solicita la contraseña, ingresó la contraseña con el mismo resultado: Error grave: Error de inicio de sesión: error de decodificación JSON, 400 - Solicitud incorrecta.
Utilicé mi computadora portátil para obtener el archivo de sesión de FF y transferí el archivo de sesión a mi NAS (los permisos de archivo están bien), eso no debería importar, ¿verdad? Desde que obtuve el archivo de sesión extraído con éxito y no hay otras dependencias en el archivo de sesión

I followed the same steps described here: Troubleshooting - Login Error i got successfully the sessionfile with the fix from here

@seisdr I can confirm, Login in FF 76.0.1, using the python code from Troubleshooting - Login Error page (replace baseDomain='instagram.com' with host='.instagram.com' for "newer" FF e.g. 76.0.1 if you get no such column: baseDomain error) generate instaloader session file, then use option -f SESSIONFILE together with -l USERNAME reports logged in as USERNAME without password asking. The keep this session file and you can access IG forever

BUT... it still fails. Instaloader loads the sessionfile but asks for the password, entered the password with the same result: Fatal Error: Login error: JSON decode fail, 400 - Bad Request.
I used my laptop to get the sessionfile from FF and transfered the sessionfile to my NAS (file permissions are ok), that shouldn't matter, right? Since i got the sessionfile successfully extracted and no other dependencies are on the sessionfile

You now need to load the created session
L.load_session_from_file(USER)

BUT... it still fails. Instaloader loads the sessionfile but asks for the password, entered the password with the same result: Fatal Error: Login error: JSON decode fail, 400 - Bad Request.
I used my laptop to get the sessionfile from FF and transfered the sessionfile to my NAS (file permissions are ok), that shouldn't matter, right? Since i got the sessionfile successfully extracted and no other dependencies are on the sessionfile

Do you load the created session ?
L.load_session_from_file(USER)

I'm having this problem too.

I try to follow @aandergr 's instruction
FIREFOXCOOKIEFILE = "/Users/wangj3475/Library/Application\ Support/Firefox/Profiles/an8p05xr.default-release/cookies.sqlite-wal"
instaloader = Instaloader(max_connection_attempts=1)
instaloader.context._session.cookies.update(connect(FIREFOXCOOKIEFILE)
.execute("SELECT name, value FROM moz_cookies"
"WHERE host='.instagram.com'"))
Come out with error like this:
File "", line 10, in
instaloader.context._session.cookies.update(connect(FIREFOXCOOKIEFILE)
sqlite3.OperationalError: unable to open database file
Anyone knows what's happening? I am sure the FIREFOXCOOKIEFILE is correct.

@tom1380 have you tried the workaround mentioned in this comment by aandergr? it works really
@muertq IMHO the workaround should work for all platforms, have you tried workaround mentioned in this comment by aandergr? for windows you have to update profile path - this comment show example . for newer FF then ESR, you have to update execute command as described in this comment (here is missing apostrophe behind instagram.com) or this comment . did it work? are you able to update script to you needs?

to summarize the workaround:

login to instagram using firefox
create python script igsession.py from Troubleshooting - Login Error Page
if you are not on Linux or you don't use standard Firefox profile location, update FIREFOXCOOKIEFILE (I have copied the cookies.sqlite from FF profile to /tmp, so I have used FIREFOXCOOKIEFILE = '/tmp/cookies.sqlite')
if you use newer FF then ESR (e.g. 76.0.1) or if you get in step 6 the error no such column: baseDomain, update the SQL in execute command. The old FF use baseDomain, but newer FF use host, so it should look like instaloader.context._session.cookies.update(connect(FIREFOXCOOKIEFILE).execute("SELECT name, value FROM moz_cookies WHERE host='.instagram.com'"))
if you don't have instaloader on this host, install instaloader here first
run script python3 igsession.py - it should report Saved session to /tmp/.instaloader-LOCALUSERNAME/session-IGUSERNAME
if you are running instaloader on other host, copy the session file to the target host, where do you want to use instaloader. You can copy this file to the /tmp/... location (see description for option -f from instaloader --help for correct location) or you can copy this file to homedir or other persistent location to use this session file forever(?)
run instaloader -l IGUSERNAME -f SESSIONFILE .... and instaloader should report
Loaded session from SESSIONFILE.
Logged in as IGUSERNAME.

If you get any error, please copy the error.
I hope it will help you to stay logged in to IG :smiley:

@roboshim I use linux & Firefox 76 ,would you please explain how could I make instaloader's session file wanna download story & post

@gnu-like have you tried the steps from my previous post? I can try to help you, but I need to know, what have you already done and what did not work. Have you done step1? have you done step2 - created the script from the Troubleshooting page? Do you use standard Firefox profile path or have you "played" with FF profiles? More info please :grin:

Step 2 got Server not found

@gnu-like Huh, your Firefox cannot access this URL https://instaloader.github.io/troubleshooting.html#login-error ? OK, the copy of the code from my summarized workaround post.

Refined cookie-copying snippet that ought to work on Windows and MacOS (cannot test those myself though), and with newer firefox cookie-sql files.
It takes optional arguments -c for specific cookie-file and '-f' for output sessionfile.
from glob import glob
from os.path import expanduser
from sqlite3 import connect, OperationalError
from argparse import ArgumentParser
import platform

try:
	from instaloader import ConnectionException, Instaloader
except ModuleNotFoundError:
	print("Instaloader module not found.")
	print("  pip install [--user] instaloader")
	exit(1)

p = ArgumentParser()
p.add_argument('-c', '--cookiefile')
p.add_argument('-f', '--sessionfile')
args = p.parse_args()

if args.cookiefile is None:
	default_cookiefile = {
		'Windows': '~/AppData/Roaming/Mozilla/Firefox/Profiles/*/cookies.sqlite',
		'Darwin': '~/Library/Application Support/Firefox/Profiles/*.default/cookies.sqlite'
	}.get(platform.system(), "~/.mozilla/firefox/*.default/cookies.sqlite")
	try:
		args.cookiefiles = glob(expanduser(default_cookiefile))[0]
	except:
		print("No firefox cookiefile found")
		exit(1)

conn = connect(args.cookiefile)
try:
	cookie_data = conn.execute("SELECT name, value FROM moz_cookies WHERE baseDomain='instagram.com'")
except OperationalError:
	cookie_data = conn.execute("SELECT name, value FROM moz_cookies WHERE host LIKE '%instagram.com'")

instaloader = Instaloader(max_connection_attempts=1)
instaloader.context._session.cookies.update(cookie_data)

try:
    username = instaloader.test_login()
    if not username:
        raise ConnectionException()
except ConnectionException:
    raise SystemExit("Cookie import failed. Are you logged in successfully in Firefox?")

instaloader.context.username = username
instaloader.save_session_to_file(args.sessionfile)

instaloader -l USERNAME --sessionfile=/tmp/.instaloader/USERNAME_SESSION
ask password
Enter Instagram password for
after giving password got same error
@roboshim

@e5150 Thank you :grin: :+1:

@gnu-like hmmm, there are few users reporting this problem. So you have logged in FF - do you use normal window or private window? I am not sure, if private window saves the cookies to sqlite file. Or maybe some special anonymity cookie settings? Can you try to login in firefox and then list cookies direct in sqlite?
sqlite3 /tmp/cookies.sqlite "SELECT name, value FROM moz_cookies WHERE host LIKE '%instagram.com';"
do you see something like this?
mid|XXXXXXXXXXXXXXXXXXXXXXXXXXXX
ig_cb|X
ig_did|XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
sessionid|XXXXXXXXXX%3AXXXXXXXXXXXXXX%3AXX
shbid|NNNN
shbts|NNNNNNNNNN.NNNNNN
csrftoken|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
ds_user_id|NNNNNNNNNN

@roboshim yeah I see this sqlite3 /tmp/cookies.sqlite "SELECT name, value FROM moz_cookies WHERE host LIKE '%instagram.com';"but
When I logout FF password is gone I should login again and remake session file

@gnu-like Oh I understand now. You log in, create session file, then logout in FF and the session is destroyed! OK, you don't have to logout the session in FF! You can delete cookies for instagram or you can delete all cookies or delete whole history in FF, but you don't have to logout, otherwise IG removes the session from server.

Here is my revision of the snippet workaround code to use if you are getting a login error -- I am on a Windows machine, but this program checks for those who are on a POSIX system.  You will need to manually add the cookiefile path into the 'FIRFOXCOOKIE' variable.
import os
from glob import glob
from os.path import expanduser
from sqlite3 import connect
from instaloader import ConnectionException, Instaloader
Check if on Windows machine or Linux machine
if (os.name == 'nt'):
FIREFOXCOOKIE = ('/Users/your_name_here/AppData/Roaming/Mozilla/Firefox/Profiles/your_profile_here/cookies.sqlite')
elif (os.name=='posix'):
FIREFOXCOOKIE = ("~/.mozilla/firefox/*.default/cookies.sqlite")  # you will need to modify this to your path
instaloader = Instaloader(max_connection_attempts=1)
instaloader.context._session.cookies.update(connect(FIREFOXCOOKIE)
.execute("SELECT name, value FROM moz_cookies "
"WHERE host ='.instagram.com'"))
try:
username = instaloader.test_login()
if not username:
raise ConnectionException()
except ConnectionException:
raise SystemExit("Cookie import failed. Are you logged in successfully in Firefox?")
instaloader.context.username = username
instaloader.save_session_to_file()

-- coding: utf-8 --
#net_worm
from PyQt5 import QtCore, QtGui, QtWidgets
from glob import glob
from os.path import expanduser
from sqlite3 import connect
from instaloader import ConnectionException, Instaloader
import qdarkstyle
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(792, 533)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.p_make = QtWidgets.QPushButton(self.centralwidget)
self.p_make.setGeometry(QtCore.QRect(350, 210, 111, 23))
self.p_make.setObjectName("p_make")
self.link = QtWidgets.QLineEdit(self.centralwidget)
self.link.setGeometry(QtCore.QRect(50, 50, 721, 51))
self.link.setClearButtonEnabled(True)
self.link.setObjectName("link")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(550, 30, 221, 20))
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(596, 110, 171, 20))
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(50, 125, 691, 31))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.label_3.setFont(font)
self.label_3.setObjectName("label_3")
self.log = QtWidgets.QTextBrowser(self.centralwidget)
self.log.setGeometry(QtCore.QRect(80, 270, 671, 192))
self.log.setObjectName("log")
self.label_4 = QtWidgets.QLabel(self.centralwidget)
self.label_4.setGeometry(QtCore.QRect(700, 240, 47, 20))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.label_4.setFont(font)
self.label_4.setObjectName("label_4")
self.label_5 = QtWidgets.QLabel(self.centralwidget)
self.label_5.setGeometry(QtCore.QRect(200, 170, 351, 20))
font = QtGui.QFont()
font.setPointSize(9)
font.setBold(False)
font.setUnderline(False)
font.setWeight(50)
self.label_5.setFont(font)
self.label_5.setObjectName("label_5")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 792, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
    self.retranslateUi(MainWindow)
    self.p_make.clicked.connect(self.cookimaker)
    QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):
    _translate = QtCore.QCoreApplication.translate
    MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
    self.p_make.setText(_translate("MainWindow", "COOKI MAKEr"))
    self.link.setText(_translate("MainWindow", "C:/Users/*YournamePC*/AppData/Roaming/Mozilla/Firefox/Profiles/9tf43wmy.default-release/cookies.sqlite"))
    self.label.setText(_translate("MainWindow", "لینک آدرس کوکی فایرفاکس را وارد کنید."))
    self.label_2.setText(_translate("MainWindow", "نمونه مسیر کوکی فایر فاکس"))
    self.label_3.setText(_translate("MainWindow", "C:/Users/ EhSaN/AppData/Roaming/Mozilla/Firefox/Profiles/9tf43wmy.default-release/cookies.sqlite"))
    self.label_4.setText(_translate("MainWindow", "گزارش"))
    self.label_5.setText(_translate("MainWindow", "نکته : ابتدا باید با اکانت اینستاگرام در مرورگر فایرفاکس لاگین کنید."))

def cookimaker(self):
    app.processEvents()
    link_=self.link.text()

    FIREFOXCOOKIEFILE = glob(expanduser(link_))[0]

instaloader = Instaloader(max_connection_attempts=1)
instaloader.context._session.cookies.update(connect(FIREFOXCOOKIEFILE)
.execute("SELECT name, value FROM moz_cookies "
"WHERE baseDomain='instagram.com'"))
app.processEvents()
try:
username = instaloader.test_login()
if not username:
raise ConnectionException()
except ConnectionException:
raise SystemExit("Cookie import failed. Are you logged in successfully in Firefox?")
    app.processEvents()
    instaloader.context.username = username
    instaloader.save_session_to_file()
    self.log.append('COOKIE Baray aacoount '+instaloader.context.username + ' '+' Sakhte Shod :>')

if name == "main":
import sys
app = QtWidgets.QApplication(sys.argv)
app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())

-- coding: utf-8 --
#net_worm
from PyQt5 import QtCore, QtGui, QtWidgets
from glob import glob
from os.path import expanduser
from sqlite3 import connect
from instaloader import ConnectionException, Instaloader
import qdarkstyle
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(792, 533)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.p_make = QtWidgets.QPushButton(self.centralwidget)
self.p_make.setGeometry(QtCore.QRect(350, 210, 111, 23))
self.p_make.setObjectName("p_make")
self.link = QtWidgets.QLineEdit(self.centralwidget)
self.link.setGeometry(QtCore.QRect(50, 50, 721, 51))
self.link.setClearButtonEnabled(True)
self.link.setObjectName("link")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(550, 30, 221, 20))
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(596, 110, 171, 20))
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(50, 125, 691, 31))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.label_3.setFont(font)
self.label_3.setObjectName("label_3")
self.log = QtWidgets.QTextBrowser(self.centralwidget)
self.log.setGeometry(QtCore.QRect(80, 270, 671, 192))
self.log.setObjectName("log")
self.label_4 = QtWidgets.QLabel(self.centralwidget)
self.label_4.setGeometry(QtCore.QRect(700, 240, 47, 20))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.label_4.setFont(font)
self.label_4.setObjectName("label_4")
self.label_5 = QtWidgets.QLabel(self.centralwidget)
self.label_5.setGeometry(QtCore.QRect(200, 170, 351, 20))
font = QtGui.QFont()
font.setPointSize(9)
font.setBold(False)
font.setUnderline(False)
font.setWeight(50)
self.label_5.setFont(font)
self.label_5.setObjectName("label_5")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 792, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
    self.retranslateUi(MainWindow)
    self.p_make.clicked.connect(self.cookimaker)
    QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):
    _translate = QtCore.QCoreApplication.translate
    MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
    self.p_make.setText(_translate("MainWindow", "COOKI MAKEr"))
    self.link.setText(_translate("MainWindow", "C:/Users/*YournamePC*/AppData/Roaming/Mozilla/Firefox/Profiles/9tf43wmy.default-release/cookies.sqlite"))
    self.label.setText(_translate("MainWindow", "لینک آدرس کوکی فایرفاکس را وارد کنید."))
    self.label_2.setText(_translate("MainWindow", "نمونه مسیر کوکی فایر فاکس"))
    self.label_3.setText(_translate("MainWindow", "C:/Users/ EhSaN/AppData/Roaming/Mozilla/Firefox/Profiles/9tf43wmy.default-release/cookies.sqlite"))
    self.label_4.setText(_translate("MainWindow", "گزارش"))
    self.label_5.setText(_translate("MainWindow", "نکته : ابتدا باید با اکانت اینستاگرام در مرورگر فایرفاکس لاگین کنید."))

def cookimaker(self):
    app.processEvents()
    link_=self.link.text()

    FIREFOXCOOKIEFILE = glob(expanduser(link_))[0]

instaloader = Instaloader(max_connection_attempts=1)
instaloader.context._session.cookies.update(connect(FIREFOXCOOKIEFILE)
.execute("SELECT name, value FROM moz_cookies "
"WHERE baseDomain='instagram.com'"))
app.processEvents()
try:
username = instaloader.test_login()
if not username:
raise ConnectionException()
except ConnectionException:
raise SystemExit("Cookie import failed. Are you logged in successfully in Firefox?")
    app.processEvents()
    instaloader.context.username = username
    instaloader.save_session_to_file()
    self.log.append('COOKIE Baray aacoount '+instaloader.context.username + ' '+' Sakhte Shod :>')

if name == "main":
import sys
app = QtWidgets.QApplication(sys.argv)
app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())

@netmannet @ELR12 you have to use three back-apostrophes to create code block

Hi there,
is there a solution for this bug for the ones that use command line queries? I can't log in.
best

Hi, bcuz the workaround didn't help for my usecase I ported the given javascript solution into python.
Maybe it helps someone else. I didn't make a pullrequest but I think this should be also integrated into instaloader.
def encrypt_password(app_id, key_id, public_key, password):
   timestamp = str(int(dt.datetime.now().timestamp()))

   # create a random key of length 32 bytes (for AES 256)
   key = Random.get_random_bytes(32)
   # create a buffer of length 12 bytes filled with 0
   iv = bytearray(12)

   aes = AES.new(key, AES.MODE_GCM, nonce=iv)
   aes.update(bytearray(timestamp, 'utf-8'))
   ciphertext, tag = aes.encrypt_and_digest(bytearray(password, 'utf-8'))

   # get a byte array of the given public key
   public_key_seal = PublicKey(bytes.fromhex(public_key))
   sealed_box = SealedBox(public_key_seal)
   sealed = sealed_box.encrypt(key)

   enc_password = bytearray()
   enc_password += bytearray(
       [1, int(key_id), len(sealed) & 255, (len(sealed) >> 8) & 255]) + sealed + tag + ciphertext

   return '#PWD_INSTAGRAM_BROWSER' + ':' + app_id + ':' + timestamp + ':' +
               str(base64.b64encode(enc_password), 'utf-8')

greetz a kind user

Fixed with Version 4.4.2 – thanks to @Infinitay and @pgrimaud with pgrimaud/instagram-user-feed@96ad4cf!
Also thanks to @roboshim and @e5150 for your assistance with the Firefox cookie import workaround!

Always keep your sessionfile. I have never seen a sessionfile expire. If you have your sessionfile, no login is required, and thus, no login can fail.

Would it be possible to create session file e.g. in homedir instead of in /tmp by default? I know there is a option but it would be better to use some persistent location by default. /tmp is deleted on boot in Debian and Termux (and probably other distros). A few times I was already stressed about to login again but no such big problem for me, at least I can refresh my password :-) But for such case it would be great if the session file can stay between reboots.

I think that's a good idea. As an implementation idea, to maintain backwards compatibility, with no session filename given, Instaloader.load_session_from_file() could first try to access the session file in the new path in the user's home directory, then in the old path; Instaloader.save_session_to_file() could save directly to the new path in the user's home directory. I'm unsure what a good path could be, maybe expanduser("~/.instaloader/session-IGACCOUNT") or expanduser("~/.config/instaloader/session-IGACCOUNT"), but the latter one might not be good on Windows (or is it?).

Refined cookie-copying snippet that ought to work on Windows and MacOS (cannot test those myself though), and with newer firefox cookie-sql files.
It takes optional arguments -c for specific cookie-file and -f for output sessionfile.

May we update our docs with your new Firefox cookie import script?

Hi, bcuz the workaround didn't help for my usecase I ported the given javascript solution into python.
Maybe it helps someone else. I didn't make a pullrequest but I think this should be also integrated into instaloader.

Pull Requests are always the most easy way to try out and discuss code suggestions. The following method returns (key_id, app_id, public_key). Did you test that solution?
class InstaloaderContext:
    ...

    def get_encryption_data(self) -> Tuple[Optional[str], Optional[str], Optional[str]]:
        resp = self._session.get("https://www.instagram.com/accounts/login/")
        return (resp.headers.get("ig-set-password-encryption-web-key-id"),
                resp.headers.get("ig-set-password-encryption-web-key-version"),
                resp.headers.get("ig-set-password-encryption-web-pub-key"))

@pgrimaud @Infinitay @aandergr thank you for making it work again ! :+1:
@twitter-79 thank you for JS to Python conversion of encryption

expanduser("~/.config/instaloader/session-IGACCOUNT")

On unix-ish I'd prefer os.path.join(os.getenv('XDG_CONFIG_HOME') or os.path.expanduser('~/.config'), 'instaloader', 'session-IGACCOUNT') over hardcoded ~/.config.

May we update our docs with your new Firefox cookie import script?

Sure, would be good if it could be confirmed to work on win/mac though. Maybe also allowing --csrftoken and --sessionid to be explicitly passed manually, for people with odd setups and non-firefox users.
What about including such related code, and other examples from the docs, in somthing like examples/ in the actual repo?

Pull Requests are always the most easy way to try out and discuss code suggestions. The following method returns (key_id, app_id, public_key). Did you test that solution?
class InstaloaderContext:
    ...

    def get_encryption_data(self) -> Tuple[Optional[str], Optional[str], Optional[str]]:
        resp = self._session.get("https://www.instagram.com/accounts/login/")
        return (resp.headers.get("ig-set-password-encryption-web-key-id"),
                resp.headers.get("ig-set-password-encryption-web-key-version"),
                resp.headers.get("ig-set-password-encryption-web-pub-key"))

I used your get_encryption_data method and it worked fine :thumbsup:
thanks for the fast update :-)

Still having this issue.

Still not working, anyone have any fixes?

Still not working, anyone have any fixes?

Pip3 install instaloader --upgrade

Still not working, anyone have any fixes?

Pip3 install instaloader --upgrade

Doesn't work

@RinuxLee @beskhu3epnm
I have tested native instaloader login now and it really works.
what you get if you write instaloader --version? You should get 4.4.3 - do you have version 4.4.3 (or at least 4.4.2)? If not, then you have to install this version first.

do you have pip3 installed? check with pip3 --version or  - you should get some output as pip A.B.C from ..../python.../dist-packages (python 3.X).
If you already have pip installed, try to update it pip3 install -U pip or python3 -m pip install -U pip
if you do not have pip3, install pip3 first from your package management (or according to some guide for your platform)
then try pip3 install instaloader or python3 -m pip install instaloader and as last line you should see Successfully installed instaloader-4.4.3. If you see Requirement already satisfied: instaloader... then instaloader is already installed and then try pip3 install -U instaloader or python3 -m pip install -U instaloader and you should get Successfully installed instaloader-4.4.3
then you should be able run instaloader -l USERNAME PROFILE and it should ask for USERNAME's password and if the password is correct, there should be successfull login and session file creation

If you have any problem with any step, then copy the last few lines with any error.

@RinuxLee @beskhu3epnm
I have tested native instaloader login now and it really works.
what you get if you write instaloader --version? You should get 4.4.3 - do you have version 4.4.3 (or at least 4.4.2)? If not, then you have to install this version first.

do you have pip3 installed? check with pip3 --version or  - you should get some output as pip A.B.C from ..../python.../dist-packages (python 3.X).
If you already have pip installed, try to update it pip3 install -U pip or python3 -m pip install -U pip
if you do not have pip3, install pip3 first from your package management (or according to some guide for your platform)
then try pip3 install instaloader or python3 -m pip install instaloader and as last line you should see Successfully installed instaloader-4.4.3. If you see Requirement already satisfied: instaloader... then instaloader is already installed and then try pip3 install -U instaloader or python3 -m pip install -U instaloader and you should get Successfully installed instaloader-4.4.3
then you should be able run instaloader -l USERNAME PROFILE and it should ask for USERNAME's password and if the password is correct, there should be successfull login and session file creation

If you have any problem with any step, then copy the last few lines with any error.

Unfortunately, still getting the same Fatal error: Login error: JSON decode fail, 400 - Bad Request even after following all these steps.

The problem no longer persists for me since updating. Thanks.

After upgrading instaloader to 4.4.3 version, this issue is fixed.

@RinuxLee sorry, I cannot help you more, until you provide the version of instaloader. Run instaloader --version to get your version.


Added OnRatingBarChange annotation.

@JakeWharton Ping.

@JakeWharton : Friendly ping. Is there any reason that prevents this PR from getting merged?


Add in IPv6 Dualstack Validation of Rancher Tooling

This is a placeholder ticket for the feature request that we add in the IPv6 Dualstack Validation of Rancher tooling. We can fill this out with more details later.

Steps:

Set up an RKE 2 Control Plane with IPv6 Dualstack enabled
Deploy one RKE2 downstream cluster with IPv6 Dualstack enabled
All tests should pass - minimum: Monitoring and Logging

We should be seeing a PRD on this soonish.

The only deliverable for 2.6.4 is the ERD and P0 validation. No development work is expected for 2.6.4.

https://confluence.suse.com/display/EN/IPv6+Validation+on+Rancher+-+ERD


Display with i2s "backpack"

It would be nice if we could use a display module with a i2s "backpack" so that we have to wire up only 4 wires for the display instead of many.

Agree that would be nicer.
Have recently added I2C support to the SDK "Platform". Having quickly looked up an I2C 16x2 LCD can see that, unsurprsingly, the internal register set looks the same as the parallel LCD devices. So the work would be...

Write a new version of MTL/Lcd.h ripping out the raw GPIO use and putting in an instance of MTL::I2C MTL/rp2040/I2C.h
Add another hardware target to the build with some conditional compilation in picoX7.cpp to select the I2C LCD driver.

Might buy one to play with when I next order some bits.

Have completed the trivial parts here 721a3eb
Remaining work is to complete implementation of Platform/MTL/AlphaNumLcd_I2C.h

Support completed. Works for me with an AiP31068L based I2C 16x2 LCD from Waveshare via the I2C1 on pins 19 and 20. Thankyou for the suggestion that's a nice improvement. See the latest release v0.18

Support completed. Works for me with an AiP31068L based I2C 16x2 LCD from Waveshare via the I2C1 on pins 19 and 20. Thankyou for the suggestion that's a nice improvement. See the latest release v0.18

Which address does your display use?

See Platform/MTL/AlphaNumLcd_I2C.h. The address is passed as the only argument to the display driver constructor. But has a default value that matches the display I use which is 0x3E. This values is masked with 0x7F and written unshifted into the RP I2C peripherals IC_TAR (target address) register. So if you need a different address add { <addr } to the instantiation of the LCD driver in picoX7.cpp e.g.
static MTL::AlphaNumLcd<MTL::I2C1_P19_P20,
                        /* COLS */ 16,
                        /* ROWS */ 2> lcd { 0xHH };

I notice in the official SDK that similar devices use an address of 0x27 so that might be worth trying.  Maybe the device I have, a "Waveshare LCD 1602 I2C" is unusual. To be honest I struggled to find this rather important information for the display I have, on either the PiHut or Waveshare web pages. Until eventually I saw this line in a micro python example they published ...
#Device I2C Arress
LCD_ADDRESS  = (0x7C>>1)

Which, obviously, is a rather cryptic way of writing 0x3E.

... will post a patch making the I2C address clearer in picoX7.cpp

... see https://github.com/AnotherJohnH/picoX7/commit/d2f77267cb0e3e65a20598f3285e89cd395b69f4

Thanks @AnotherJohnH. Indeed all the generic displays I have use 0x27, so I will try that.

All that really happens now is that the backlight on the display (the one from the original post) gets switched off, around the time when # 001 NAME BRASS   1  ALG 22 FBK 7 SYNC on  PMS 3 TRN 0 appears on the serial console:
Program  : picoX7 (WaveShare Rev2.1 I2C LCD)
Author   : Copyright (c) 2023 John D. Haughton
Version  : 0.18
Commit   : 2a2902ada41b07839b052e695fa4de73233b510b
Built    : 07:49:14 Sep 30 2024
Compiler : 9.2.1 20191025 (release) [ARM/arm-9-branch revision 277599]

# 001 NAME BRASS   1  ALG 22 FBK 7 SYNC on  PMS 3 TRN 0
LFO WAV sin SPD 37 DLY 00 PMD 05 AMD 00 SYNC off
OP AMS FREQ    DET R1 R2 R3 R4  L1 L2 L3 L4  BPT   CURVE    DEPTH RTE OUT KVS
6   0  R  1.00  0  49 99 28 68  98 98 91 00  39  -exp -exp  54 50  4   82  2
5   0  R  1.00  1  77 36 41 71  99 98 98 00  39  +lin +lin  00 00  0   98  2
4   0  R  1.00  0  77 36 41 71  99 98 98 00  39  +lin +lin  00 00  0   99  2
3   0  R  1.00 -2  77 76 82 71  99 98 98 00  39  +lin +lin  00 00  0   99  2
2   0  R  0.50  7  62 51 29 71  82 95 96 00  27  +lin -exp  00 07  0   86  0
1   0  R  0.50  7  72 76 99 71  99 88 96 00  39  +lin +lin  00 14  0   98  0
PITCH EG           84 95 95 60  50 50 50 50

Ugg :-( I guess that means the I2C address is working but the I2C interface in the Waveshare device I have is not the same as the "generic displays" that usually live at 0x27. Will dig into this a bit further when I get a chance. Do you know the part number of the I2C device on your display?

I think they are all using various 8574 compatible chips. Mine says "8574T".

So seems there are (at least) two types of I2C 16x2 LCD....

The one you have uses a generic I2C bridge chip (the PCF8574) to drive the parallel interface to the old style HD44780 LCD display driver. I guess back-pack was the clue I missed. I2C 16x2 Arduino LCD display module
The device I have, which uses an all in one I2C LCD driver chip.  LCD 1602 I2C module

Could it be that you forgot to push Platform d6af84a04098e0b8219930b8238eb8fdf3f17c61? I am currently getting
Fetching submodules
  /usr/bin/git submodule sync
  /usr/bin/git -c protocol.version=2 submodule update --init --force
  Submodule 'Platform' (https://github.com/AnotherJohnH/Platform.git) registered for path 'Platform'
  Cloning into '/home/runner/work/picoX7/picoX7/Platform'...
  Error: fatal: remote error: upload-pack: not our ref d6af84a04098e0b8219930b8238eb8fdf3f17c61
  Error: fatal: Fetched in submodule path 'Platform', but it did not contain d6af84a04098e0b8219930b8238eb8fdf3f17c61. Direct fetching of that commit failed.
  Error: The process '/usr/bin/git' failed with exit code 128

This kind of error could be caught easily if continuous integration would be merged:

https://github.com/AnotherJohnH/picoX7/pull/9

Oh, sorry about that have pushed the missing Platform patch.

Moving in the right direction, but not quite yet there.
When I power cycle the display, I immediately see a blinking square over a _ character. Then the screen shows the string "NTERND" followed by blanks, and the blinking square over a _ character is in the 4th from the right on the second line.
I would not be entirely surprised if some "waits" were missing, or something small along those lines.

After a reset the display should be....
*    picoX7    *
*  SYNTHESIZER *

and then after 2.5 seconds...
INTERNAL VOICE
INT 1 BRASS   1

so yep, seems close. I'll double check the code and the timings in particular.

Guessing it's got through the initialisation ok-ish.  So the general byte send code is possibly the broken part.
I'd copied the delays that I'd used in the parallel version of the driver which are (setup) 10us and (hold) 38us. The Python you linked had no delays in this area, but then Python is going to be so slow that it probably covers the requirement without trying. Looking at the C in the official pico-example can see some massive 600us delays and also the code takes time to setup the data nibble before asserting the E pin, again with a 600us delay.
The data sheet does not support the need to setup the data before asserting E, it is clear that the data is captured on the falling edge of E, which makes me suspicious of the 600us too. TBH to follow the data sheet all these drivers (mine included) should be sampling the busy flag pin instead of delays.
Have posted a patch which updates the timings to 600us. If I was able to test would have tuned this down until it was just working and then doubled it.

Sorry to be a pain, but now I get strange special characters on the screen. I do see that the display content changes after 2.5 seconds (so it's alive), but unfortunately nothing is readable. The characters being shown seem to be entirely reproducible across reboots.
If you can give me instructions on what to change/test, I can do it.


Add more free hostings.

Add more types of free hosting servers or sites have you ever seen. It may be anything app hosting, serverless, database hosting, etc.
If you are a beginner to open source this repository gives you a great learning experience. Please contribute more related documents. Please reach out if you find any inconvenience.

spam


Fetching external posts from medium.com: connection error

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
Describe the solution you'd like
A clear and concise description of what you want to happen.
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Additional context
Add any other context or screenshots about the feature request here.

- name: medium.com
rss_url: https://medium.com/@al-folio/feed
in _config.yml
it's ok

You can just comment out or remove the following lines from _config.yml:
https://github.com/alshedivat/al-folio/blob/30e51bc90005f8bf36a4e1d59423531b04b22c30/_config.yml#L120-L122


Crescent upgrade

2022-12-14 06:41:20
https://github.com/crescent-network/launch/blob/main/mainnet/crescent-1/upgrades/v3.md

Cosmovisor is ready.


Support the use of dev containers for reproducible dev environment

This would allow having the dev environment automatically set up and allow using code spaces.
https://code.visualstudio.com/docs/devcontainers/containers

#721 seems to be same request


Zwolle, Netherlands Addresses

http://gisservices.zwolle.nl/ArcGIS/rest/services/Nabijheid_voorzieningen_WWZ38/MapServer/1

Not available anymore... suggest to close.

@emacgillavry I think this is the new source:
http://opendata-zwolle.opendata.arcgis.com/datasets/c3e6a2ef5fc2459f8f2b458f730c8e84_1
Could you verify?  Thanks!!

New link points to a temporary (tijdelijke) service created by students of the local polytech. It's based on an extract of the national address database (BAG) clipped on the boundaries of the Zwolle municipality. Hence does not provide additional records or attributes beyond what's already available.

Thanks for your help @emacgillavry


Unknown CMake command "idf_link_components". (IDFGH-1294)

Environment

Development Kit:      ESP32-Wrover-Kit
Module or chip used:  ESP32-WROOM-32D
IDF version: v4.0-dev-722-g045aaf6fb
Build System:        CMake
Compiler version: 1.22.0-80-g6c4433a
Operating System:     macOS
Power Supply:         USB

Problem Description
I used to compile another version of my firmware with following CMakeLists.txt code:
    add_library(renamed_main.elf renamed_main/main.cpp)
    idf_link_components(renamed_main.elf "${components}")

But after todays git pull it looks like idf_link_components function no longer exists in the toolchain. I checked docs briefly but didn't find anything on this.
What should I use as a replacement?

Hi @tntclaus. We've revamped using ESP-IDF as a library for 4.0 to allow for more flexibility with linking component libraries with external executables/libraries. The API is documented at https://github.com/espressif/esp-idf/blob/master/docs/en/api-guides/build-system-cmake.rst#esp-idf-cmake-build-system-api.
The example build_system/cmake/idf_as_lib has also been updated to reflect this change.

@renzbagaporo thank you. I figured out what to do and it really seems to be more flexible now.
For those who want to build multiple versions of the same project here is what you can add to CMakeLists.txt:
add_executable(renamed_main.elf renamed_main/main.cpp)
target_link_libraries(renamed_main.elf "${components}")


added txt file with college name

Colleges official website: https://bayamon.inter.edu/
Information and Technology programs at Inter Bayamon: https://www.inter.edu/course/informatica-y-tecnologia/

@nordiel Thank you for your patience while waiting for a review and processing your request. Pull request merged. Please start applying for JetBrains educational subscription at https://www.jetbrains.com/shop/eform/students in an hour, to allow the changes to propagate through JetBrains systems.


Data augmentation methods

Why not use Mixup and CutMix data augmentations in your implementation?

Hi,
Because of limited resources, we can train the models for 80 epochs.
To Mixup and CutMix be effective, We should train it more than 100 epochs.
I mention this problem in section 3.2 of the report.

``


Flake8 consistency

If you are ok with these kind of changes, I will fix the rest and make sure they don't come back.

Please fix the issue above. Otherwise it's OK. Thank you again :-)

@igalex any issue? Thanks

Merged with a modification in codechecker_lib/host_check.py. Thanks for the patch :-)


How do I install ffmpeg on Windows 10 (via Python) if I installed YT-DL also via Python? I did pip install ffmpeg and it seemed fine but yt-dl still says ffmpeg not installed

Checklist

[x] I'm asking a question
[x] I've looked through the README and FAQ for similar questions
[x] I've searched the bugtracker for similar questions including closed ones

Question

Even after restarting the shell (cmd.exe). Windows 10 Pro 1909 and Python 3.8.3.

@dstftw, what's this a duplicate of? I'm not sure what else to search for other than 'windows ffmpeg' (although I admit I wasn't more specific with the exact error) and nothing that stood out to me came up. Also pardon my question since I'm Github beginner.


Windows keybindings are wrong on README

Hello,
I have just installed this package. This is great :) Works like a charm with git-bash on Windows 10.
I found that the keybindings that are shown on the README are wrong. They show that most keybindings are ctrl-something, but the keymap source file shows that some of them are actually alt-something.
I can submit a PR to fix the README if you want to.

Thank you for your ticket, all features and fixes are now solely a user generated contribution.


Bars Questions

@yaronn I am looking into making some improvements to the bars and I wanted to open a thread for discussion.
First question. Why is height and width not dynamic based on the underlying canvas? If there are no objections I am ready to submit a PR for this.

I can't check the code till tomorrow but please send the pr if it's already
ready.
On Feb 10, 2015 11:42 PM, "Jacob Tomaw"<EMAIL_ADDRESS>wrote:

@yaronn https://github.com/yaronn I am looking into making some
improvements to the bars and I wanted to open a thread for discussion.
First question. Why is height and width not dynamic based on the
underlying canvas? If there are no objections I am ready to submit a PR for
this.
—
Reply to this email directly or view it on GitHub
https://github.com/yaronn/blessed-contrib/issues/28.