Credit Card Accounts don't work

client.MsgGetKontoUmsaetze does not work when the "konto" is from a credit card and the object does not have the "sepa_data" property. When giving the full konto object as property, I get:

MalformedMessage: HIRMG is mandatory but missing.

The documentation is somewhat unspecific in this case ("konto  - Das Konto für das die Umsätze geladen werden sollen") – what exactly is needed in that object? Or is the client.MsgGetKontoUmsaetze function generally not able to get transactions for credit cards?

What bank are you connecting to? I learned that e.g. DKB does not provide such information for credit card accounts.

http://www.linuxwiki.de/OpenHBCI/GetesteteBanken/DKB states, that DKB uses some different infrastructure for credit card, which is not supported.
Also StarMoney uses a page parser instead of HBCI for credit card.

I had the same error and did some debugging.
First, because sepa_data is null in this case, I created it myself. DKB only supports v5 here in the relevant code part, so it's sufficient to pass an object with konto_nr, unter_konto, ctry_code and blz here. These are all the fields I could find that are used in MsgGetKontoUmsaetze in this case.
The misleading HIRMG error happens because of an over-eager exception handler that masks the actual error.
The actual error is that getEl in Exceptions.OrderFailedException is not defined. And indeed, the msg parameter there is a simple array:
[ '9050', '', 'Die Nachricht enthält Fehler.' ]

This of course is super helpful.
I'd be happy to help debugging this further if anyone's interested. Sadly, I do not know HBCI enough to even start guessing what to try here. But at least that over-eager exception handler and the getEl call should probably be fixed, I guess.

+1
would love to see credit card transactions from DKB

I've an account at DKB as well, but credit cards don't use the HBCI standard, but the reference account for the credit card should work.
HBCI is a german standard, maintained by the ZKA. Credit cards are using an international standard (SET and others).


Smart config works unreliably. (IDFGH-3206)

IDF version: v4.1-dev-281-g96b96ae24
Running the smartconfig example alone works reliably. However when adapting my system to add the smart config functionality, the SC task seems not to run. I observed the debug output of the uC and the messages that the event handler (left as in the example) should output when the SC events are recognized (Scan done, found channel, got SSID PWD) are never shown. During this time no matter how many attempts are done with the ESP Touch app, the uC will not get the WiFi credentials.
A little bit of background, my system is running several tasks along the SC task and among them, there is a HW timer configured to trigger an ADC sampling task every 100 ms. If I don't start this HW timer, the SC task runs without problems (output messages are observed and the WiFi credentials can be set via the app).
This timer has proven problematic in the past with my system (causing problems in the execution of other tasks or even not allowing them to run) and back then my "solution" was to increase the timer period (originally set to 300 us). 100 ms is a period I can still accept (although the original would be much better) but more than that would not be acceptable.
A couple of questions:
1.- Is this SC problem related to the HW timer? How could it be solved? I tried pinning the WiFi driver's and SC's tasks to core 1 as well as increasing the task's priority with no avail.
2.- Is the behavior of the HW timer expected as is? I understand that in order to keep track of the time accurately, it has to have a very high priority, but interfering with other tasks seems to make the use of the HW timer not so attractive.
3.- If the HW timer causes the aforementioned issues and there is no way to circumvent this, what other options are available to trigger fast acquisition of ADC samples?
Thanks
Alfonso

@alfonsohera Thanks for reporting, we will look into.

Similar issue, not running the ADC though.  Never seems to get the SSID and password.
With logging turned on. IDF v4.2 and latest ESPTouch from the Play store:
D (00:00:01.166) WIFI: WIFI_EVENT_STA_START
I (2511) smartconfig: SC version: V2.9.0
I (5651) wifi:ic_enable_sniffer
I (5651) smartconfig: Start to find channel...
I (23611) smartconfig: T|once 1 80
I (23611) smartconfig: save rssi:-83 ,bssid:1c:b7:2c:c1:0a:60
I (23611) smartconfig: iCh lock
I (27991) smartconfig: confirm rssi:-83, bssid:1c:b7:2c:c1:0a:60
I (27991) smartconfig: TYPE: ESPTOUCH
I (27991) smartconfig: T|sniffer on ch:2,width:0
I (27991) smartconfig: T|AP MAC: 1c:b7:2c:c1:0a:60
I (27991) smartconfig: T|Head Len:80
I (28001) smartconfig: Found channel on 2-0. Start to get ssid and password...
I (28001) smartconfig: T|SYNC STATUS
I (62421) smartconfig: T|e-12
I (63611) smartconfig: T|e-22
I (73991) wifi:ic_disable_sniffer
I (73991) smartconfig: smartconfig restart
I (74041) smartconfig: SC version: V2.9.0
I (77181) wifi:ic_enable_sniffer
I (77181) smartconfig: Start to find channel...

Your issue might be different @howroyd than the one I reported. In my case the log messages from the smartconfig task are never seen if the HW timer is running (meaning that the task is probably being perpetually blocked). In your case, the task is running as seen in your debug output. Are you trying to share the credentials of a network configured to 5GHz? According what I have read, the sniffer can't get the credentials from such a network (only the 2.4 GHz band works).

Ah ok.
Nope, I am using 2.4G for the ESP.
I have an event handler for SC_EVENT_GOT_SSID_PSWD which seems to never get called:
esp_event_handler_register(SC_EVENT, SC_EVENT_GOT_SSID_PSWD, _sc_event_handler, NULL);

void Wifi::_sc_event_handler(void *arg, esp_event_base_t base, int32_t event_id, void *data)
{
    smartconfig_event_got_ssid_pswd_t *evt = (smartconfig_event_got_ssid_pswd_t *)data;
    uint8_t ssid[33] = { 0 };
    uint8_t password[65] = { 0 };
    uint8_t cellphone_ip[4];
    esp_err_t err = ESP_OK;

    memcpy(ssid, evt->ssid, sizeof(evt->ssid));
    memcpy(password, evt->password, sizeof(evt->password));
    memcpy(cellphone_ip, evt->cellphone_ip, sizeof(evt->cellphone_ip));

    ESP_LOGD(LOG_TAG, "SSID:%s", ssid);
    ESP_LOGD(LOG_TAG, "PASSWORD:%s", password);
    ESP_LOGD(LOG_TAG, "Phone ip: %d.%d.%d.%d\n", cellphone_ip[0], cellphone_ip[1], cellphone_ip[2], cellphone_ip[3]);

    err = sc_send_ack_start(evt->type, evt->token, evt->cellphone_ip);
    if (err != ESP_OK) {
        ESP_LOGE(LOG_TAG, "Send smartconfig ACK error: %d", err);
    }

    memcpy(wifi_config.sta.ssid, ssid, sizeof(ssid));
    memcpy(wifi_config.sta.password, password, sizeof(password));

    xEventGroupSetBits(event_group, WIFI_SC_DONE_BIT);
}

I've opened a separate issue for my case, since it seems different to yours.  Apologies for hijacking!
https://github.com/espressif/esp-idf/issues/5243

No worries, I think there are many SC-related issues that in the end should be investigated as a whole. Good luck with your problem!

HI @alfonsohera, please help to provide following info:

Which ADC are you using? 1 or 2?
What's the priority of ADC sampling task?
Does the problem still exist if disable ADC sampling but still keep the hardware timer and sampling task (but NOT do real ADC sampling)?

HI @alfonsohera, please help to provide following info:

Which ADC are you using? 1 or 2?
What's the priority of ADC sampling task?
Does the problem still exist if disable ADC sampling but still keep the hardware timer and sampling task (but NOT do real ADC sampling)?

Hi @liuzfesp.
The used ADC is 1, the priority of the sampling task (which just blocks until the ADC interruption is triggered and unblocks it) when I created this issue was 11. I don't remember disabling just the sampling task, but I imagine that could be problematic since the used queue had just space for one element, and the delay used when sending the queue was the maximum.

@alfonsohera Can you please pin the HW timer task  and SC's task to different core, then have a test?

@alfonsohera
I have tested locally using ADC1 and smartconfig example, it works well.
The test code and logs in the attachment.
code and log.tar.gz
You said you will trigger an ADC sampling task every 100 ms, how long the sampling will take every time？

Thanks for reporting, will close due to short of feedback, feel free to reopen with more update, thanks.


Update to pyacvd 0.3.1

Checklist

[x] Used a personal fork of the feedstock to propose changes
[x] Bumped the build number (if the version is unchanged)
[x] Reset the build number to 0 (if the version changed)
[x] Re-rendered with the latest conda-smithy (Use the phrase @conda-forge-admin, please rerender in a comment in this PR for automated rerendering)
[x] Ensured the license file is being packaged.

Closes #3, #5, #7

This PR updates

Hi! This is the friendly automated conda-forge-linting service.
I wanted to let you know that I linted all conda-recipes in your PR (recipe/meta.yaml) and found some lint.
Here's what I've got...
For recipe/meta.yaml:

❌ Non noarch packages should have python requirement without any version constraints.
❌ This recipe is using a compiler, which now requires adding a build dependence on {{ stdlib("c") }} as well. Note that this rule applies to each output of the recipe using a compiler. For further details, please see https://github.com/conda-forge/conda-forge.github.io/issues/2102.

@akaszynski It'd be great if you could take a look at this!

Hi! This is the friendly automated conda-forge-linting service.
I just wanted to let you know that I linted all conda-recipes in your PR (recipe/meta.yaml) and found it was in an excellent condition.


Blank editor group close icon missing

VSCode Version: 1.39.0-insider
OS Version: Windows_NT x64 10.0.18990

Confirmed.

Fixed:


[Feature request] User Registration control

Can we have a feature to disable user registration and only allow manually registered users?

Hey @MarioGK-AutoSystem, thank you for your feedback :)
You can already do that today by starting Gitness with the following environment variable:
GITNESS_USER_SIGNUP_ENABLED=false

The the first user on the system can sign-up as normal. Any further user signup will be blocked, and they have to be added manually by an administrator.

We'll also add this to our documentation, soon.


dev-cmd/contributions: Fix single-user handling; be more verbose

[x] Have you followed the guidelines in our Contributing document?
[x] Have you checked to ensure there aren't other open Pull Requests for the same change?
[x] Have you added an explanation of what your changes do and why you'd like us to include them?
[ ] Have you written new tests for your changes? Here's an example.
[ ] Have you successfully run brew style with your changes locally?
[ ] Have you successfully run brew typecheck with your changes locally?
[ ] Have you successfully run brew tests with your changes locally?

brew contributions --user=issyl0 was taking forever because it went through all maintainers first, because the conditionals were in the wrong order.
This was too quiet, far too quiet, for something that takes so long.
Now verbose mode tells you what repos it's scanning for a user.

Before:
❯ time brew contributions --user=issyl0
Moisan contributed 785 times in all time.
Error: Not Found
brew contributions --user=issyl0  144.56s user 168.30s system 25% cpu 20:42.88 total

After:
❯ time brew contributions --user=issyl0 --verbose
Determining contributions for issyl0 on homebrew/brew...
Determining contributions for issyl0 on Homebrew/homebrew-core...

Review period skipped due to critical label.


Loading 1100 clickEl's is very slow

I have a list of 1100 users and I tried to make a button for each one (using clickEl) that returned the userId to a parent element, which I would use to jump to a new route. But it's extremely slow loading that many click elements. It could handle a couple hundred well, but approaching 1000 the performance really plummets. Once they load up, it's pretty responsive, but loading them take at least 10 seconds.
For now I just made a fake button function that uses a href instead of Concur's events machinery:
linkButton :: String -> String -> Widget HTML ()
linkButton label url =  el_ E.a [ A.href . JS.pack $ url ]
                        $ el E.button [ A.class_ "pure-button" ] [ text label ]

which is really fast and fine for now since I'm just jumping to an URL, but at some point I'm sure it would be nice/essential to be able to use clickEl's or some other event listener for a big list.

Thanks for reporting this. 10 seconds is just unacceptable! Is it possible for you to share the code?

Thanks, I'll make a simplified version that demos it and paste it here later today.

Ok here's a widget that will just load a bunch of buttons:
import Concur.VDOM ( HTML, button, el, el_ )

slowList :: [Int] -> Widget HTML Int
slowList = el E.div [] . fmap buttonize
  where
    buttonize n = el_ E.div [] $ do
      button $ show n
      return n

If I call it with slowList [0..500] it takes a couple seconds to load, but if I do slowList [0..2000] Chrome will eventually crash like the page is unresponsive, but if you click "Wait" it will eventually load.

Randomly listening to the conversation. What all is concur doing behind the
scenes here?
On 21-Oct-2017 5:30 AM, "Matt Parker"<EMAIL_ADDRESS>wrote:

Ok here's a widget that will just load a bunch of buttons:
import Concur.VDOM ( HTML, button, el, el_ )
slowList :: [Int] -> Widget HTML Int
slowList = el E.div [] . fmap buttonize
where
buttonize n = el_ E.div [] $ do
button $ show n
return n
If I call it with slowList [0..500] it takes a couple seconds to load,
but if I do slowList [0..2000] Chrome will eventually crash like the page
is unresponsive, but if you click "Wait" it will eventually load.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/ajnsit/concur/issues/6#issuecomment-338347901, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AABu0SBXhu5jE3rQ9THllh68ET0STCxZks5suTQGgaJpZM4P__F6
.

@mpdairy I added the benchmark code here - https://github.com/ajnsit/concur-benchmarks/blob/master/src/ClickList.hs
To get another data point - Which browser are you on? From my quick testing, there seems to be a massive performance difference among browsers - Firefox (I use nightly) was able to load [0..5000] widgets in 1-2 seconds with performance becoming inconsistent beyond that. Chrome and Safari were both extremely slow in comparison (though neither froze).
@saurabhnanda There are a whole bunch of things happening because of the highly abstracted interface for Concur. Here's what I see as areas of potential improvement -

String packing/unpacking (JSS.String <-> String)

A button can have arbitrary children which may have their own events. So each button is effectively a <button> wrapper over a list of child widgets. We capture the events generated by the top level button and wrap them in a Left, and all the events from the child widgets in a Right. In this case, we only have static text as the contents of the button, but it's still treated as a full widget. Then the Left and Right events are joined with <|>. All this has some (non-trivial) overhead. I went ahead and removed this abstraction from text only buttons - https://github.com/ajnsit/concur/commit/4dbf7dc735ad79018ac97b3e0dce8b7bbec8e764.

The largest benefit would definitely come from optimising the render cycle. All the button widgets are orrd together sequentially, and their DOM views populated . This currently has no batching, and rapidly and repeatedly modifying the DOM has known performance implications.

There are a lot of STM threads created which may or may not have a significant performance impact.

There does not seem to be excessive thunking or memory leaks. But it's still an area to look into.

Okay I'm pretty certain I understand why this is happening. Will push a fix soon-ish.

@mpdairy I just pushed a change that fixes this in concur-core and then specifically for concur-vdom text button widgets. Please try it and let me know if that fixes the issue for you. I'll soon push fixes for other inbuilt widgets (it's a trivial, but tedious change).

Keeping this open until all the widgets are converted.

I uploaded the benchmark demos here - https://ajnsit.github.io/concur-benchmarks/

@saurabhnanda BTW I added another benchmark where I pretty much copied your JS benchmark code for miso, and tweaked it a bit to get it to compile with concur. You can check the source and demo.

Hey thanks! That update made my button list really fast. Even the list with 4500 users loaded quickly. I didn't measure it, but the new buttons seem just as fast as the fake linkButton button I pasted at the top of this thread. What was the change you made to speed them up so much?

Hah well, it's really a new feature, and I'm glad it solved your problem! The changes are all here - https://github.com/ajnsit/concur/commit/78ac2b224d1d2454ad4ddb014bc48950cc46481a.
Gist
Basically I added support for blocking IO to Concur. Then used it for a very common use case where async io was a bottleneck.
Background
All actions like liftIO and liftSTM are run async, and are effectively full widgets.
A common pattern with a lot of widgets (like button) was to use liftSTM to procure a Notify (a very quick operation), and then used the Notify to link the view click and the handler. This means that a single Button was effectively a sequence of two widgets, liftSTM and then the actual button UI.
Also all widgets are encapsulated and run async, and any changes to the widget tree causes a full dom render cycle (albeit with virtual-dom diffing).
Problem
So when a button is first added to the widget tree, it actually renders the liftSTM widget (i.e. no UI), which quickly finishes, and then renders the actual button UI.
When you add two buttons in quick succession, the first liftSTM widget renders and finishes, then the second liftSTM widget renders and finishes, and then the first button UI renders, and then the second button UI renders. The order can vary depending on how long it takes for a liftSTM to finish.
You see where this is going.
With 1100 button widgets, you have 1100 quick dom rerender cycles in a row which takes ~10 seconds on your machine, including the overhead for all the rapid widget sequencing.
Solution
I added a special function called awaitViewAction which provides a Notify to a widget, but does so with blocking IO. Blocking IO prevents DOM updates so cannot be used for long running IO actions, and hence I am reluctant to make it available to clients. However this specific use case of constructing a Notify in STM is guaranteed to be extremely short and can safely be exposed to client widgets.
With this change, on adding 1100 button widgets, the IO actions are quickly run in succession without touching the DOM, and finally each widget constructs its own UI which is populated into the DOM at once (one render total for all 1100 buttons). The same as what happens with your "fake" linkButton code.

Just reading this out of curiosity—I'm looking for a framework to do some work in and Concur is looking amazingly straightforward to use—it's either too good to be true or @ajnsit is a world-class API designer! ;)
At any rate, you can probably close the issue?

Appreciate the positive words! The API really is that good. I'm yet to find a usecase where it doesn't do a better job than any other general purpose UI lib. I wish more people would use it and provide feedback so I can make it better. Please use it, and I would be happy to help out with any issues you might encounter.

Oh and I don't want to close the issue until I have fixed similar performance issues with all the widgets in the library. Unfortunately I got a bit sidetracked with the purescript bindings for Concur, but I plan to come back and work on this lib more.

I'm definitely keen on using it. I need to write a small app for someone and am planning to use concur if I can make it work.

Sounds good 👍

Concur is great and makes it easy to do what would otherwise be really complicated. Though one pain point for me, last time I used it, was in making text input boxes that updated some state at every keystroke. I had to make some hacky thing that used an IOref to hold the form state and then make special text input widgets that mutated the state as the user typed, because if a widget returns anything they get re-rendered and the input focus is lost. It would be nice if focus somehow remained after a widget returned a value, if it was still there, though I don't know how it could done, or determined that it was the same widget.

Oh yeah, that was a problem with ghcjs-vdom, but react solves it pretty nicely now. In purescript-concur (which also uses a react backend) the text widgets return values without losing the input focus. For example look at the color demo here - https://ajnsit.github.io/purescript-concur/. And the source - https://github.com/ajnsit/purescript-concur/blob/master/examples/Test/Color.purs.
I'm surprised I haven't already created nice text widgets for concur-react. I will add that to my todo list!

Oh wow, that color demo is great! Adding that to concur-react would be really helpful.


Bench-marking at the op level

Tensorflow lite provides benchmarking at the op level in their cpp example with --enable_op_profiling flag.
How can this be done for models run on an edgetpu?

How can we test the TOPS performance of edgetpu? According to this table, the inference time are provided, however I didn't know how many ops they have for calculating TOPS. How do I know if my system actually runs at somewhere around 4TOPS as it claims?

@jk78346
There is no formal TOPs tool at this time.   To make a rough estimate, you can run an inference several times to measure the loading time vs. inference time.  Then compare that against the inference time of models with different sizes.  Use a neural network visualization tool to see how many operations of what size are done on the model, and you can estimate the number of operations that were executed in that inference time.  Each multiply and each add will count as a separate operation, and most TFlite instructions are dispatching huge numbers of multiply/add in parallel.   Give it a try.  Many people would be interested to see the results of your experiments.


Rotate pie charts

It would be nice to add a tools that rotates pies charts (e.g. if users would click right on the border of an haplotype they could rotate it - for enhanced aesthetic effect).

Actually need:

Rotate pie charts
Parts with the highest percentage first
Parts should be ordered clockwise vs anticlockwise
...


Update find_object

When find_object is called, we expect more information than just the cid of the requested pid. Update the HashStore client to print out:

the absolute path to the object
the absolute path to the cid refs file
the absolute path to the pid refs file
the absolute path to the object's sysmeta document

Also update the HashStore interface for find_object to return a Map of the content, and the method itself accordingly.

This has been completed via Feature-72: findObject Update


Merge to live!

Broken table.

:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

VBA/Language-Reference-VBA/articles/goto-statement.md
:white_check_mark:Succeeded

VBA/Outlook-VBA/articles/about-the-object-environment.md
:white_check_mark:Succeeded

VBA/Outlook-VBA/readme.md
:white_check_mark:Succeeded

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

:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

VBA/Language-Reference-VBA/articles/goto-statement.md
:white_check_mark:Succeeded

VBA/Outlook-VBA/articles/about-the-object-environment.md
:white_check_mark:Succeeded

VBA/Outlook-VBA/readme.md
:white_check_mark:Succeeded

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


0.9.2

Aws key and secret should not be printed to log.

@jacob-koren thanks for contribution. Could you please make a PR against master, not 0.9.2 branch? We don't support old branches anyway.

@jacob-koren it's important to retain the job properties in the json, otherwise they cannot be sent down to the cluster. Perhaps a better approach would be masking known sensitive properties, like GuiceRunnable does when the CLI starts up.

Note that if you do a PasswordProvider for your aws secret, then you don't have to print anything delicate in logs. Also hadoop should be able to pull from classpath site xml's


add search functionality

I modified the site to have search functionality
I am unfamiliar with grunt and the build system generally so the implementation isn't the best however for my personal usage it has been working well enough.
This uses pagefind which is entirely local and works for statically generated sites.
Demo
https://github.com/user-attachments/assets/156e81e8-e7df-497f-9329-facb524f879e
Thank you for making the website :)

@greggman I noticed that https://github.com/webgpu/webgpufundamentals has a very similar structure. If you would like I can open up a PR there as well.
Alternatively feel free to close if search isn't wanted.

Closed due to inactivity.


Dependency issues when using unimock

Hi there, a couple of issues with dependencies I noticed. Thanks for this elegant library, I searched high and low for a solid dependency injection in Rust and this is the only one I think makes sense.
I use cargo build --tests to build.
Using the unimock option for the entrait macro
Given this cargo.toml
[package]
name = "entrait-issue"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
entrait = "0.5.3"

and this main.rs
use entrait::entrait;

#[entrait(Foo, unimock, mock_api=FooMock)]
fn foo<D>(_: &D) -> i32 {
    unimplemented!()
}

#[entrait(MyMod, unimock, mock_api=mock)]
mod my_mod {
    pub fn bar<D>(_: &D) -> i32 {
        unimplemented!()
    }
}

fn main(){}

I get the error error[E0433]: failed to resolve: could not find `__unimock` in `entrait
Using the unimock feature
When I switch to the unimock feature in cargo.toml things get better.
[package]
name = "entrait-issue"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
entrait = { version = "0.5.3", features = ["unimock"] }

[dev-dependencies]
unimock = "0.5.3"

Here is the main.rs for this case
use entrait::entrait;

#[entrait(Foo, mock_api=FooMock)]
fn foo<D>(_: &D) -> i32 {
    unimplemented!()
}
#[entrait(MyMod, mock_api=mock)]
mod my_mod {
    pub fn bar<D>(_: &D) -> i32 {
        unimplemented!()
    }
}

fn my_func(deps: &(impl Foo + MyMod)) -> i32 {
    deps.foo() + deps.bar()
}

fn main() {}

#[cfg(test)]
mod tests {
    use super::*;
    use unimock::*;

    #[test]
    fn test() {
        let mocked_deps = Unimock::new((
            FooMock.each_call(matching!()).returns(40),
            my_mod::mock::bar.each_call(matching!()).returns(2),
        ));

        assert_eq!(42, my_func(&mocked_deps));
    }
}

Still, the compiler complains no method named `each_call` found for struct `FooMock` in the current scope
What I did to work around this problem was to import entrait::__unimock::* instead of use unimock::*;.
Am I overlooking something (quite likely) or are these bugs?

Just realized this is an issue with Rust Analyzer. Any idea on how to get Rust Analyzer to build this correctly?

Closing this as this is not an issue with unimock/entrait

Sorry, I was on vacation when this bug was filed, and I didn't get the notification.
The thing is, entrait is a little out of date, and still uses unimock 0.4.x. I've planned for some time to release a new major version of entrait with better ergonomics for mocking. The fix for now is to depend on unimock 0.4!

Hi, thanks for the reply. Good to see that there is still activity here. Looking forward to the next version then. Is there a roadmap for entrait/unimock?

I don't really have a roadmap. It's mostly ergonomic improvements and small tweaks I think, I haven't planned any major features. Lately I've focused more on Unimock, and when I think the 0.5 branch is in a good state, I'll publish a new major entrait version. I'm working on this in my spare time when I have time, development has slowed down a bit because it's now more busy on my day job.

OK, that is understandable. I am fine with entrait as it is, still looking
forward to improvement with unimock. Thanks for this fine piece of software.
On Fri, 15 Sep 2023 at 12:41, Audun Halland @.***>
wrote:

I don't really have a roadmap. It's mostly ergonomic improvements and
small tweaks I think, I haven't planned any major features. Lately I've
focused more on Unimock, and when I think the 0.5 branch is in a good
state, I'll publish a new major entrait version. I'm working on this in my
spare time when I have time, development has slowed down a bit because it's
now more busy on my day job.
—
Reply to this email directly, view it on GitHub
https://github.com/audunhalland/entrait/issues/26#issuecomment-1721058988,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAAQNG2BKMD7NDNJZYKAPGTX2QWENANCNFSM6AAAAAA2QR4AL4
.
You are receiving this because you modified the open/close state.Message
ID: @.***>

entrait 0.6.0 has been released with the only breaking change being the unimock 0.5 bump.

Closing this as fixed.


cockroachdb: 20.1.8 -> {20.1.17, 20.2.14, 21.1.7}

Motivation for this change
v21 is the current major stable version, v20.1 is EOL by upstream, but is kept here for the sake of clean upgrades.
Things done

[x] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
Built on platform(s)

[ ] NixOS
[ ] macOS
[x] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[x] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[x] Tested execution of all binary files (usually in ./result/bin/)
[ ] Added a release notes entry if the change is major or breaking
[ ] Fits CONTRIBUTING.md.

I'm somewhat anxious about nixpkgs skipping v20.2, as the upgrade documentation recommends against it.

We should probably have the major/minor versions that they recommend for an upgrade path available on nixpkgs

Yeah ideally we'd have something like postgres, with multiple explicitly versioned packages. I didn't want to totally refactor this package, but I guess this has to be done.
BTW, cockroach <v21 officially doesn't support building with go >1.13, but that has been dropped from nixpkgs already. It does build though, they were just concerned with some timer performance issues.

Can't we have cockroach_20 which will be on the 20.2 version line?

Or, rather introduce a cockroach_21 and only bump cockroach to 20.2. Then when upstream announces EOL for 20.2, deprecate it, and then later move cockroach to 21.

@implr do you want to continue working on this? Otherwise I'd pick it up.

Oh, sorry, I didn't have time for this earlier. I pretty much have the packages written (we use them in a private repo), they just need to be adapted to nixpkgs. I should be able to do this later this week.

Sorry for the delay.
gopkg.nix does the old-style buildGoPackage build for 20.1 - the package is unmodified from current master except for the .8 -> .17 bump. The other versions use the same approach as we have for postgres.
Another thing I'd like to do is add support for building the CCL licensed version (requires just changing the make target and some paths), but that can be a separate PR.

As far as naming goes, I think we need to keep two components, see https://www.cockroachlabs.com/docs/releases/index.html#release-naming

A major release is produced twice a year indicating major enhancements to product functionality. A change in the YY.R component denotes a major release.

So a 21.2 when it comes it should be a separate package IMO to allow users to upgrade when they want.
Unsure about keeping 20.1. It is EOL, so it would need a deprecation warning and keeping it as a default is bad, but I don't know what to do about people who use it right now. What is the policy for postgres?

postgresql has major versions 9 to 14 and then sets the "default" version to 13. Old versions (e.g. 9.6, released 5 years ago) get dropped as soon as they have no upstream maintenance anymore.
nextcloud (server) on the other hand does not have a default version, it only has major versions and old (unmaintained) versions first get deprecated, then removed.
It's definitely the right approach to drop versions that are declared EOL/unmaintained upstream. Users need to stop using unmaintained software, and nixpkgs can't be burdened with keeping these versions around. If we offer them a range of supported versions such that they can go through the update process at their own pace. My personal opinion is that deprecation notices are an additional service to users, giving them a grace period.
So we could mark 20.1.17 as deprecated on November 12th (https://www.cockroachlabs.com/docs/releases/v20.1.17) and remove it some time later.

So we could mark 20.1.17 as deprecated on November 12th (https://www.cockroachlabs.com/docs/releases/v20.1.17) and remove it some time later.

Or rather mark it as deprecated now and remove it on November 12th.

Ah, I thought about one more thing. Not sure about the commit message. Some people find it important to use specifically worded commit messages. Possibly it is better to have several commits, with messages:
cockroachdb: 20.1.8 -> 20.1.17
cockroachdb_20_2: init at 20.2.14
cockroachdb_21_1: init at 21.1.7

But I'm not sure whether that's worth splitting the commit up into three.

@implr Ping, any progress? :)

Ah, I conflated maintenance support with assistance support, they're still providing security fixes.

So we could mark 20.1.17 as deprecated on November 12th (https://www.cockroachlabs.com/docs/releases/v20.1.17) and remove it some time later.

Or rather mark it as deprecated now and remove it on November 12th.

Done.

Ah, I thought about one more thing. Not sure about the commit message. Some people find it important to use specifically worded commit messages. Possibly it is better to have several commits, with messages:

Can do, but maybe as the very last thing (after all other comments are resolved).
@SuperSandro2000 re: all the style fixes - the package was like that before, I just left it as is, I guess I can change that.

OK then, thanks. I need somebody else to merge though, don't have access.

@ofborg eval

First ofborg needs to be green before we can merge anything.

Rebased. I'd like to finish this, has been dragging for a while.
Given the deprecation warning we agreed to above, ofborg will never be green, so unsure what to do with that.
Also it's an unfree package, does ofborg even eval those?

Looking at the list of open review comments, it seems that they're all code style concerns. While keeping code quality high is important, I think that a bit of leniency on code style makes sense for this change; CockroachDB v20.1 will be deprecated before NixOS 21.11 gets released, and it would be best for the users who stay on stable to have a supported, if not maintained, version of CockroachDB available.

Has there been any movement on this? I would be happy to try and fix things up as needed.

20.1 is indeed already deprecated. To me it feels that this PR is actually great work, but has been slowed down with many code improvement details. It would be great to move forward soon so we can start maintaining the supported versions.

additional changes can be done in another PR. Waiting for ofborg to show green, then merge after building the packages.

@implr I think the only necessary change is to change the deprecation warning to an entry of cockroachdb_20_1 to pkgs/top-level/aliases.nix. I'd merge after that.
@ankhers It would be great if you can add the code improvements after merging this PR :)

Has there been any movement on this? I would be happy to try and fix things up as needed.

Sorry everyone, I no longer have time to work on this, and I don't run cockroach at work anymore. Feel free to take over.
If you want to add the capability of building the commercial licensed versions, the changes I had in my package were adding perl yacc to deps and removing the oss suffix in build scripts.

@ankhers fancy taking over? (Otherwise I can have a look middle of next year.)

Closing in favour of https://github.com/NixOS/nixpkgs/pull/152626


[BUG] types found but incorrect when using moduleResolution: "Bundler"

Describe the bug
typings for zustand-middleware-yjs cannot be imported, see the error message

⚠ Error (TS7016)  | Could not find a declaration file for module  "zustand-middleware-yjs"  . /project/node_modules/.pnpm/zustand-middleware-yjs@1.3.1_@types+react<EMAIL_ADDRESS>implicitly has an  any  type.
  | There are types at /project/node_modules/zustand-middleware-yjs/dist/index.d.ts', but this result could not be resolved when respecting package.json "exports". The zustand-middleware-yjs' library may need to update its package.json or typings.
-- | --

To Reproduce
Steps to reproduce the behavior:

configure your tsconfig with compilerOptions.moduleResolution: "Bundler"
import zustand-middleware-yjs

Expected behavior
typings are expected to be imported correctly like when I set moduleResolution to node
Versions (please complete the following information):
yjs v1.3.1
solution seems to be to change how the exports are referenced in package.json, see https://github.com/microsoft/TypeScript/issues/52363#issuecomment-1659179354

running into the same issue

Repro
https://stackblitz.com/edit/zustand-middleware-yjs-ts?file=src%2Fmain.ts

Workaround is to create "zustand-middleware-yjs.d.ts" and have it in the "include" section of you ts config.
declare module 'zustand-middleware-yjs' {
  import { StateCreator, StoreMutatorIdentifier } from 'zustand';
  import * as Y from 'yjs';

  type Yjs = <
    T extends unknown,
    Mps extends [StoreMutatorIdentifier, unknown][] = [],
    Mcs extends [StoreMutatorIdentifier, unknown][] = [],
  >(
    doc: Y.Doc,
    name: string,
    f: StateCreator<T, Mps, Mcs>,
  ) => StateCreator<T, Mps, Mcs>;

  const _default: Yjs;
  export default _default;
}


FFI Pointers Hooks

Shit, I just realized, this PR isn't going to work as-is because it introduces a new GC root that we're not processing correctly. I'll get theo to make an easy way to add new GC roots, but we shouldn't merge this yet.

The module definition is essentially IMP with added pointer functions. The test used is the following:
int x; pointerAlloc(1, 4) x = 0; while (x <= 5000) {   x = x + 1; } pointerFree(1)


build: fix automake warnings about the use of INCLUDES

While we're at it, reduce the use of LIBS as well. This makes dependencies
explicit.
Fixes building with (the not-yet-merged) libsecp256k1 as well.

Tested that before the PR went in, travis happy too.


Redesign book theme to match with latest game theme

Find the StarkLudo book here

Hi @princeibs , can I be assigned this please? I’m an experienced ui/ux designer and I’m up for the task.
Kindly assign me please I’m ready to work


[New Feature]: To add the navbar to every page

🎮 feature Request
In every page ending, there is the "back to home" button.
Should i remove that and add the navbar instead????
Point down the features
Navbar in every page
Select program in which you are contributing
GSSoC24
Code of Conduct

[X] I follow CONTRIBUTING GUIDELINE of this project.

@ayush-t02 please check this

no need of nav in every page


Translate storage limit page into Bahasa Indonesia

This PR addresses #13929
/language id
/assign @irvifa

Thank you 🎉 It's already good.
/lgtm
/approve


Masking Strategies: Handle Null Values and Non-Strings

Closes: Unticketed
Code Changes

[ ] Hash, Hmac, and AES Encrypt masking strategies adjusted to better handle null values and non-strings (here we try to coerce to a string instead of failing)

Steps to Confirm

[ ] list any manual steps for reviewers to confirm the changes

Pre-Merge Checklist

[ ] All CI Pipelines Succeeded
Documentation:

[ ] documentation complete, PR opened in fidesdocs
[ ] documentation issue created in fidesdocs

[ ] Issue Requirements are Met
[ ] Relevant Follow-Up Issues Created
[ ] Update CHANGELOG.md

Description Of Changes
Several of our masking strategies are set up to expect values to be strings.  There are some early exits if the input value is None, but since most inputs are now a list of values, even a list of one value, so that's not likely to be True.
If an array of values are passed in, if the original index is None, do nothing to that index.  Also try to coerce the original value to a string.

@adamsachs wanted to get your thoughts on the strategy here


accounts: add endpoint for updating status

Codecov Report

Merging #85 into master will decrease coverage by 0.61%.
The diff coverage is 39.68%.

@@            Coverage Diff             @@
##           master      #85      +/-   ##
==========================================
- Coverage   60.33%   59.71%   -0.62%
==========================================
  Files          24       27       +3
  Lines        2047     2110      +63
==========================================
+ Hits         1235     1260      +25
- Misses        622      656      +34
- Partials      190      194       +4

Codecov Report

:exclamation: No coverage uploaded for pull request base (master@6837d2e). Click here to learn what that means.
The diff coverage is 39.68%.

@@            Coverage Diff            @@
##             master      #85   +/-   ##
=========================================
  Coverage          ?   59.71%
=========================================
  Files             ?       27
  Lines             ?     2110
  Branches          ?        0
=========================================
  Hits              ?     1260
  Misses            ?      656
  Partials          ?      194


Develop en test simultaneously

What problem does this feature solve?
Testing your Vue components while developing.
What does the proposed API look like?
yarn serve --test-unit

Use https://github.com/mysticatea/npm-run-all

Or use the UI to run multiple tasks simultaneously. 😸

@Akryum Thanks! works perfectly within the UI. Is there an option to add -w flag in the ui to test?


Executable.execute() should not call Executable.onExecuteAsync()

Problem
The SDK currently generates all the variants of execute which include the async versions with callbacks, timeoutes, and the sync version. The issue is the sync version is massively slowed down by the fact it calls the async version since the async version uses completable futures.
Solution
To get around this we should extract all the sync code from onExecuteAsync into other methods. Then we can implement a sync version that simply calls those extract methods.
Alternatives
No response

I'm interested in this as well as we'd like to use our own threads to schedule.


Implement ingress control distinguishing between GET and POST to eoapi/stac/collections

We want to try out how we can use the IAM building block to add authorization to relevant methods in the STAC API Transaction Extension.

#101

The first step is to achieve the following behavior on the eoapi/stac/collections endpoint, using the tools available in the IAM building block (KeyCloak, API Gateway, policies):

GET requests are allowed anonymously
POST requests require some form of authentication and authorization

Acceptance criteria

[x] A route has been created in the IAM building block that implements the above behavior

OK @j08lue , let's continue the Slack discussion here.
Can you confirm that the GET route I configured at https://eoapi.apx.develop.eoepca.org/stac/ works basically as expected? If so, I'd add the two missing endpoints (/raster and /vector) and remove the redundant route at /.
I assume that the POST routes for /raster and /vector need to be configured in the same way as for /stac. Is this true?
When accessing https://eoapi.apx.develop.eoepca.org/stac/ I still get a self link with port number 9443: https://eoapi.apx.develop.eoepca.org:9443/stac/
When accessing the "old" URL https://eoapi.develop.eoepca.org/stac/ however, I get a correct self link.

Can you confirm that the GET route I configured at https://eoapi.apx.develop.eoepca.org/stac/ works basically as expected?

The route returns correctly formatted JSON from the upstream service, so that is ok.
But the garbled self links break clients that want to traverse the STAC object graph, like STAC Browser: https://radiantearth.github.io/stac-browser/#/external/eoapi.apx.develop.eoepca.org/stac/. I ticketed the issue here:

https://github.com/EOEPCA/resource-discovery/issues/103

But I think that is a STAC API specific thing and should not affect /raster and /vector, so please move forward.

I assume that the POST routes for /raster and /vector need to be configured in the same way as for /stac. Is this true?

No, all methods should remain open for /raster and /vector - no changes there. Thanks for checking.

Hi @j08lue. I just added /vector and /raster to the route configuration as completely unrestricted endpoints.
For completeness, I also added an open route from / to the doc-server-eoapi service as in the old ingress.

Excellent, thank you! 💯
Let us know when there is any auth we can test for POST.
https://eoapi.apx.develop.eoepca.org/stac/api.html#/Transaction Extension

The route config had a typo in the client name that broke the POST subroute.
I fixed this, and now the route is working for POST if you present a valid JWT (tested with GET vs POST to /stac/search). It currently accepts any user.
I have not configured a group yet. BTW, what would be an appropriate name for a group of users who are allowed to perform POST, PUT and DELETE on the eoAPI? Maybe "eoAPI Admin"?

"STAC editor"

I think the most natural choice would be to create a "Data Access Admin" group and an associated "STAC Editor" role. This allows adding, removing or restructuring relevant groups without touching the ingress/ route and authZ configuration. I'll try to create an example setup this afternoon.

I created a group called "Data Access Admin" and added user "eric" to it. I also created a client role named stac_editor on the eoapi client. I associated the group with the role and made the role a prerequisite for accessing the STAC API by other methods than GET. I tested this with users "eric" and "bob", and as expected, Eric was able to send a POST request to the STAC API while Bob wasn't.
Currently the configuration on Keycloak side is not limited to the STAC API, but applies to the "default resource", which spans the whole eoAPI. The route configuration, however, only requires authN/authZ for /stac/*, so the restriction effectively only applies to the STAC API. This is not really clean and may have to be adapted as the protection config evolves.

This sounds great, thanks!
Btw, I realized that "Data Access Admin" is not accurate, since STAC administration is perhaps even more closely related to the Resource Discovery building block. So maybe "Resource Admin" would be better. But what you set up is fine for now.
The next question is: What authN/authZ mechanisms are currently available to enable a user to POST to STAC API?
There are two services that already want to try out connecting to the protected service - or at least plan how to do that:

an interactive STAC editing web application we are developing where users should be able to log in and then POST their updates https://github.com/EOEPCA/resource-discovery/issues/105
workflows in the Resource Registration building block - probably a different auth flow, since it is non-interactive / machine-to-machine, I assume. Perhaps @mario-winkler can link to a ticket describing their target service architecture?

Let us discuss this further on the relevant tickets.
Are you planning to make any more changes to the current setup or will you document it anywhere, @w-scho? Otherwise, I'd consider this done!

Well, and another next step would be to expand this auth to more routes and methods on the same /stac/collections endpoint:

For reference, these are the endpoints and their http methods we want to protect:
https://eoapi.develop.eoepca.org/stac/collections, POST
https://eoapi.develop.eoepca.org/stac/collections/{collection_id}, PUT, PATCH, DELETE
https://eoapi.develop.eoepca.org/stac/collections/{collection_id}/items, POST
https://eoapi.develop.eoepca.org/stac/collections/{collection_id}/items/{item_id}, PUT, PATCH, DELETE
https://eoapi.develop.eoepca.org/stac/collections/{collection_id}/bulk_items, POST

I'll open a separate ticket for that.

The current status is that everything under the /stac directory except GET requests requires a JWT with role stac_editor. E.g., this also includes POST /stac/search, though this is probably not a modifying operation.  So at present the scope of the protection is probably too wide and needs to be narrowed in a next step.
I renamed the group "Data Access Admin" to "Resource Admin."
Regarding authentication:
For the interactive STAC editing web application I assume that users will login via Keycloak using the Standard Flow and that you will be able to pass the resulting access token (JWT) to the STAC API from the web frontend. Authentication can be handled by APISIX or by  your application itself, at your option. Passing the JWT will probably have to be implemented into your application, depending on how it actually uses the API.
For pure machine-to-machine access we can configure a dedicated Keycloak client for the calling party that they can authenticate as (like the Workspace BB does) to obtain a JWT. I think @achtsnits knows better how to handle this that I do.

everything under the /stac directory except GET requests requires a JWT

Right, yes, that needs to be more fine-grained to match the routes mentioned in the above ticket.

For the interactive STAC editing web application I assume that users will login via Keycloak using the Standard Flow and that you will be able to pass the resulting access token (JWT) to the STAC API from the web frontend.

Yes, that OIDC / Authorization Code Flow sounds straightforward (for example here and here). Can we get permissions to register our client in KeyCloak, when our app is ready?
Is the KeyCloak URL still https://iam-auth.apx.develop.eoepca.org?

What should happen to the URIs beneath /stac that are not listed in the ticket (like /stac/search)

All open, please.

For the paths listed in the ticket: what shall happen to the methods not listed there? Should they be rejected, or is it OK to let them through?

Yes, let them through, the API will reject unsupported methods.

Pls let us continue these threads on the follow-up tickets - even if those mean we will change the current approach (e.g. using OPA instead of APISIX):

https://github.com/EOEPCA/resource-discovery/issues/106
https://github.com/EOEPCA/resource-discovery/issues/105
https://github.com/EOEPCA/resource-discovery/issues/103


Mount a reactComponent to a UIKit View

I want use a React component which as:
  _topConfigCell(event) {
    const cell = (
      <View
        ref={(textMenu) => this.textMenu = textMenu}
      >
        <Text>
          hello world
        </Text>
      </View>
    )

    const cellNode = React.findNodeHandle(this.textMenu);
    CollectionViewManager.updateCellContentView(2, cellNode, {secion: 1, item: 2})
  },

Here i am not using it in render() method, just a method of a React component(_topConfigcell).
But the cellNode could not be found which is null.
Is there any possible I could find the cellNode which later I will use in OC method adUIBlock:

@facebook-github-bot stack-overflow


real?

/*@ x :: real? */
var x = null

fails with
rsc: src/Language/Nano/Types.hs:(490,1)-(499,29): Non-exhaustive patterns in function tconCode

Thanks, fixed by cb65b5e9618a49b15431ace272431d2abf0b1907


Fix bug when shrinking the container in Yarn service

update unit test
update requestedContainerCountMap
Dear Gobblin maintainers,
Please accept this PR. I understand that it will not be reviewed until I have checked off all the steps below!
JIRA

[ ] My PR addresses the following Gobblin JIRA issues and references them in the PR title. For example, "[GOBBLIN-1643] My Gobblin PR"

https://issues.apache.org/jira/browse/GOBBLIN-1643

Description

[ ] Here are some details about my PR, including screenshots (if applicable):
There's a bug in "requestTargetNumberOfContainers" method in YarnService when shrinking the container size: it incorrectly updates the requestedContainerCountMap which cause the container count result in wrong number.

Tests

[ ] My PR adds the following unit tests OR does not need testing for this extremely good reason:
Passed unit tests and also tested in cluster.

Commits

[ ] My commits all reference JIRA issues in their subject lines, and I have squashed multiple commits if they address the same issue. In addition, my commits follow the guidelines from "How to write a good git commit message":

Subject is separated from body by a blank line
Subject is limited to 50 characters
Subject does not end with a period
Subject uses the imperative mood ("add", not "adding")
Body wraps at 72 characters
Body explains "what" and "why", not "how"

Codecov Report

Merging #3504 (f6bb4e2) into master (3a49796) will decrease coverage by 3.20%.
The diff coverage is n/a.

@@             Coverage Diff              @@
##             master    #3504      +/-   ##
============================================
- Coverage     46.68%   43.47%   -3.21%
+ Complexity    10405     2039    -8366
============================================
  Files          2078      405    -1673
  Lines         81288    17482   -63806
  Branches       9078     2137    -6941
============================================
- Hits          37947     7601   -30346
+ Misses        39843     9030   -30813
+ Partials       3498      851    -2647

Impacted Files
Coverage Δ

...a/org/apache/gobblin/util/limiter/NoopLimiter.java
40.00% <0.00%> (-20.00%)
:arrow_down:

...lin/util/filesystem/FileSystemInstrumentation.java
85.71% <0.00%> (-14.29%)
:arrow_down:

...a/org/apache/gobblin/cluster/GobblinHelixTask.java
60.21% <0.00%> (-2.16%)
:arrow_down:

...pache/gobblin/iceberg/writer/GobblinMCEWriter.java
76.10% <0.00%> (-1.24%)
:arrow_down:

...main/java/org/apache/gobblin/util/HadoopUtils.java
29.54% <0.00%> (-0.33%)
:arrow_down:

...bblin/iceberg/writer/GobblinMetadataException.java
100.00% <0.00%> (ø)

...main/java/org/apache/gobblin/yarn/YarnService.java

...he/gobblin/records/FlushControlMessageHandler.java

.../apache/gobblin/crypto/EncryptionConfigParser.java

...gobblin/metrics/context/NameConflictException.java

... and 1671 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 3a49796...f6bb4e2. Read the comment docs.


Documented switch not supported.

Hi - the documentation for the installer on the main page suggests --quayStorage is a supported switch, but when specifying it in the latest release (1.2.9), it gives a usage statement error "Error: unknown flag: --quayStorage".

Thank you.  I only see the source bundles, not the mirror-registry-[online|offline].tar.gz bundles as in 1.2.9.

@elfner try v1.3.2 that was released 5 minutes ago :)

I was also surprised by sudden change that moved the storage locations around from 1.3.0 seemingly without any obvious note in release notes in 1.3.0.
As the change requires adding new options to achieve "same results" as before 1.3.0 it would have been nice to mention it somewhere (eg. "due to storage change from 1.3.0 the --quayRoot no longer control location of data and DB storage, use --pgStorage and --quayStorage options for that")
Short summary from what I have seen:

in 1.2.9 version (and probably before)

# mirror-registry install --quayRoot /mnt/registry

# ls -1 /mnt/registry
pg-data
quay-config
quay-rootCA
quay-storage

from 1.3.0 if only --quayRoot is used, the storage for postgres and quay app will default to volumes in podman which are typically at /var/lib/containers/storage/volumes/.

# mirror-registry install --quayRoot /mnt/registry

# ls -1 /mnt/registry
quay-config
quay-rootCA

# ls -1 /var/lib/containers/storage/volumes/
...
pg-data
quay-storage

from 1.3.0 release for results consistent with 1.2.9 behaviour additional options seems to be required

# mirror-registry install --quayRoot /mnt/registry --quayStorage /mnt/registry/quay-storage --pgStorage /mnt/registry/pg-data

# ls -1 /mnt/registry
pg-data
quay-config
quay-rootCA
quay-storage

If above can be in some form included in README that may help the future deployments. Also to stay within what this issue is about - adding 'since 1.3.0' to --quayStorage and --pgStorage documentation might do the trick too.


Enpass 6.x compatibility

Hi,
Thanks for your work on this. I noticed in the README you mentioned that you were looking for a new maintainer. I'd be willing to pitch in there, and would also like to help with the 6.x compatibility. Let me know how to proceed.
Thanks!

@HazCod I can start taking another look at this, but first wanted to check if you have noticed anything new since your last update above? Thanks!

Also, I just spotted this. Wanted to see if you have looked at it yet, whether it has anything useful?

@acrewdson He's using 24000 iterations for the key derivation, which makes me think that code is for the old Enpass.

Any updates here?

@okgolove I haven't made any progress. Are you interested in getting an Enpass CLI working? My recollection is that getting a Python version working might be more viable.

@acrewdson I am, but I'm not sure I will be able to implement something.

Last time I tried I was still stuck at https://github.com/hazcod/enpass-cli/issues/16#issuecomment-458020303 ...

@hazcod I am able to go further with https://github.com/hazcod/enpass-cli/issues/16#issuecomment-458020303 but stuck at decrypting the key in item table
For example, when I try to decrypt the encrypted key in item table with key and iv I get -
# Get params from stream
i = 16 # First 16 bytes are for "mHashData", which is unused
ret["iv"] = bytearray()
salt = bytearray()
while i <= 31:
    ret["iv"].append(info[i])
    i += 1
while i <= 43:
    salt.append(info[i])
    i += 1

ret["iv"]  = bytes(ret["iv"])
ret["key"] = generateKey(identity["Hash"].encode('utf-8'), salt)
c.execute("SELECT * FROM item;")
identity = c.fetchone()
print(decrypt(identity['key'], ret['key'], ret['iv']))

Console -
Traceback (most recent call last):
  File "enpass_cli_hazcod.py", line 81, in <module>
    print(decrypt(identity['key'], ret['key'], ret['iv']))
  File "enpass_cli_hazcod.py", line 19, in decrypt
    return unpad(str(cipher.decrypt(enc), 'utf-8'))
  File "/Volumes/data/venv3/lib/python3.7/site-packages/Crypto/Cipher/blockalgo.py", line 295, in decrypt
    return self._cipher.decrypt(ciphertext)
ValueError: Input strings must be a multiple of 16 in length

I am suspecting that my key and iv is wrong. Could you please help me here ?
Thanks.

@Akasurde It would be great it Enpass could hop in and help us out.. i've tried reaching out, but no response.

Here my attempts at decrypting the contents.
https://github.com/upekkha/enpass6-encryption-details
Basically trying to guess where the key and iv may be stored and looping over these candidates. Unfortunately, so far, no luck in identifying the plaintext in the decrypted strings.

Hi!
Here is how to assemble the master password when somebody uses a key file:
def make_master_password(password: bytes, key_path: Path):
    key_hex_xml = Path(KEY_FILE).read_bytes()
    # no need to use XML lib for such a simple string operation
    cut_key_value = slice(5, -6)
    key_hex = key_hex_xml[cut_key_value]
    key_bytes = binascii.unhexlify(key_hex)
    return password + key_bytes

Thanks @kissgyorgy , were you able to read items with this?

Yes, after this you can do anything, you can even use the database with the sqlcipher binary!

@kissgyorgy Can you please share the details with us? Thanks.

@kissgyorgy Can you please share the details with us? Thanks.

There is no more details, I took the above program and confirmed that by using a key, this works and I can issue any query, see tables and schema, etc...
#!/usr/bin/env python3
import os
import binascii
import hashlib
from pathlib import Path
from pysqlcipher3 import dbapi2 as sqlite
from Crypto.Cipher import AES

# Sources:
#   - https://www.enpass.io/docs/security-whitepaper-enpass/vault.html
#   - https://discussion.enpass.io/index.php?/topic/4446-enpass-6-encryption-details/
#   - https://www.zetetic.net/sqlcipher/sqlcipher-api/
PBKDF2_ROUNDS = 100_000
ENPASS_DB = os.environ["ENPASS_DB"]
KEY_FILE = os.environ["ENPASS_KEY_FILE"]
PASSWORD = os.environb[b"ENPASS_PASSWORD"]

def make_master_password(password: bytes, key_path: Path):
    key_hex_xml = Path(key_path).read_bytes()
    # no need to use XML lib for such a simple string operation
    cut_key_value = slice(5, -6)
    key_hex = key_hex_xml[cut_key_value]
    key_bytes = binascii.unhexlify(key_hex)
    return password + key_bytes

def main():
    master_password = make_master_password(PASSWORD, KEY_FILE)

    # The first 16 bytes of the database file are used as salt
    enpass_db_salt = open(ENPASS_DB, "rb").read(16)

    # The database key is derived from the master password
    # and the database salt with 100k iterations of PBKDF2-HMAC-SHA512
    enpass_db_key = hashlib.pbkdf2_hmac(
        "sha512", master_password, enpass_db_salt, PBKDF2_ROUNDS
    )

    # The raw key for the sqlcipher database is given
    # by the first 64 characters of the hex-encoded key
    enpass_db_hex_key = enpass_db_key.hex()[:64]

    conn = sqlite.connect(ENPASS_DB)

    c = conn.cursor()
    c.row_factory = sqlite.Row
    c.execute(f"PRAGMA key=\"x'{enpass_db_hex_key}'\";")
    c.execute("PRAGMA cipher_compatibility = 3;")
    c.execute("SELECT * FROM Identity;")

    identity = c.fetchone()
    print(identity["Info"].hex())

And using the enpass_db_hex_key you got here, you can connect to the sqlcipher database:
$ sqlcipher my.enpassdb
sqlite> PRAGMA cipher_compatibility = 3;
sqlite> PRAGMA KEY="x'<here comes enpass_db_hex_key>'";
sqlite> SELECT * FROM item;  # works

I think the passwords are not yet visible, you need to implement the password decrypt part too.

@kissgyorgy  I have that part working as wel, but I am failing to decrypt the separate items.

Thanks @kissgyorgy and @hazcod. I was able to successfully decrypt the items in the database.
It turns out they use:

AES-256-GCM for authenticated encryption (AE)
Key length is 32 bytes (obviously)
Nonce length is 12 bytes
As additional authenticated data (AAD) resp. header they use the item's UUID (without the dashes)
(The hash used in itemfield is unsalted SHA-1)

Here is an example with two items in my vault:
sqlite> SELECT uuid, hex(key) FROM item;
a2ec30c0-aeed-41f7-aed7-cc50e69ff506|E13FB959F5CCAFBC94F02BBDA2EF2F086A6942D818E1B1BD2ECE182896712E788E10AAAF51E21C58B1758BFC
d9a5c594-214c-4f24-8e82-981bb5643a30|3537174F6ED41149421D45390334021ACFC0C89286ED15FAC397C2A38CB95AAFB149848FCA0538F032F802BF

and:
sqlite> SELECT item_uuid, value, hash FROM itemfield WHERE type = "password";
a2ec30c0-aeed-41f7-aed7-cc50e69ff506|a9279ed095d6c5f6624bb4863e8283bb501e6f15884209e86bfed86fda7bc28cc32d7476cc|c322e152482986d1caaa73fd0fe8be48c5bb4045
d9a5c594-214c-4f24-8e82-981bb5643a30|d19dde4390f74ab0598a779c09b3b093f4de26ce376f4ccce02cd6299efa6cb50dbf34|38fad679fb5bd255791576234bcc371fd2bbca2a

Let's join the tables together for easier processing later:
sqlite> SELECT i.uuid, hex(i.key), if.value, if.hash FROM item i, itemfield if WHERE if.type = "password" AND i.uuid = if.item_uuid;
a2ec30c0-aeed-41f7-aed7-cc50e69ff506|E13FB959F5CCAFBC94F02BBDA2EF2F086A6942D818E1B1BD2ECE182896712E788E10AAAF51E21C58B1758BFC|a9279ed095d6c5f6624bb4863e8283bb501e6f15884209e86bfed86fda7bc28cc32d7476cc|c322e152482986d1caaa73fd0fe8be48c5bb4045
d9a5c594-214c-4f24-8e82-981bb5643a30|3537174F6ED41149421D45390334021ACFC0C89286ED15FAC397C2A38CB95AAFB149848FCA0538F032F802BF|d19dde4390f74ab0598a779c09b3b093f4de26ce376f4ccce02cd6299efa6cb50dbf34|38fad679fb5bd255791576234bcc371fd2bbca2a

Here is the code snippet for decrypting every row in the joined table (instead of selecting the Identity like @kissgyorgy did it):
c.execute("SELECT i.uuid, i.key, if.value, if.hash FROM item i, itemfield if WHERE if.type = \"password\" AND i.uuid = if.item_uuid;")
for row in c:
    # The key object is saved in binary from and actually consists of the
    # AES key (32 bytes) and a nonce (12 bytes) for GCM
    key = row["key"][:32]
    nonce = row["key"][32:]

    # The value object holds the ciphertext (same length as plaintext) +
    # (authentication) tag (16 bytes) and is stored in hex
    length = len(row["value"])
    ciphertext = bytearray.fromhex(row["value"][:length - 32])
    tag = bytearray.fromhex(row["value"][length - 32:])

    # As additional authenticated data (AAD) they use the UUID but without
    # the dashes: e.g. a2ec30c0aeed41f7aed7cc50e69ff506
    uuid = row["uuid"]
    header = uuid.replace("-", "")

    # Now we can initialize, decrypt the ciphertext and verify the AAD.
    # You can compare the SHA-1 output with the value stored in the db
    cipher = AES.new(key, AES.MODE_GCM, nonce=nonce)
    cipher.update(bytearray.fromhex(header))
    password = cipher.decrypt(ciphertext)
    try:
        cipher.verify(tag)
        h = hashlib.new('sha1')
        h.update(password)
        print("SHA-1(\"" + password.decode("utf-8") + "\")\t= " + h.hexdigest())
    except ValueError:
        print("Key incorrect or message corrupted")

and the output generated is:
ubuntu :: ~ % ./enpass.py
SHA-1("Thank you, kissgyorgy")  = c322e152482986d1caaa73fd0fe8be48c5bb4045
SHA-1("And you too, hazcod")    = 38fad679fb5bd255791576234bcc371fd2bbca2a

You can compare the SHA-1 values with the hashes in itemfield manually.

@jmastr : are you sure about the algo? This is a fresh vault.json which mentions aes-256-cbc:
{
    "creating_device": "laptop",
    "encryption_algo": "aes-256-cbc",
    "have_keyfile": 0,
    "kdf_algo": "pbkdf2",
    "kdf_iter": 100000,
    "last_modified_device": "django",
    "last_modified_time":<PHONE_NUMBER>,
    "last_password_changed_time":<PHONE_NUMBER>,
    "last_password_changing_device": "laptop",
    "vault_att_count": 0,
    "vault_icon": "vault/v2",
    "vault_items_count": 1,
    "vault_name": "Primary",
    "vault_uuid": "primary",
    "version": 6
}

@hazcod yes I am sure. aes-256-cbc is use to encrypt the whole vault (via SQLCipher). This is actually stated on the Security page from Enpass: https://www.enpass.io/docs/security-whitepaper-enpass/vault.html#sqlcipher-and-enpass
CBC does not offer authenticated encryption and therefore no integrity protection. Ok guess that’s why they use GCM on a per item basis.

ubuntu :: ~ % cat enpass.py
#!/usr/bin/env python3
import os
import binascii
import hashlib
import hmac
import base64
from pathlib import Path
from pysqlcipher3 import dbapi2 as sqlite
from Crypto.Cipher import AES

# Sources:
#   - https://www.enpass.io/docs/security-whitepaper-enpass/vault.html
#   - https://discussion.enpass.io/index.php?/topic/4446-enpass-6-encryption-details/
#   - https://www.zetetic.net/sqlcipher/sqlcipher-api/
PBKDF2_ROUNDS = 100_000
ENPASS_DB = os.environ["ENPASS_DB"]
KEY_FILE = os.environ["ENPASS_KEY_FILE"] # can be 'export ENPASS_KEY_FILE=""'
PASSWORD = os.environb[b"ENPASS_PASSWORD"]

def make_digest(message, key):
    message = bytes(message, 'UTF-8')
    digester = hmac.new(key, message, hashlib.sha1)
    signature = digester.hexdigest()
    return signature

def make_master_password(password: bytes, key_path: Path):
    if not key_path:
        return password

    key_hex_xml = Path(key_path).read_bytes()
    # no need to use XML lib for such a simple string operation
    cut_key_value = slice(5, -6)
    key_hex = key_hex_xml[cut_key_value]
    key_bytes = binascii.unhexlify(key_hex)
    return password + key_bytes

def main():
    master_password = make_master_password(PASSWORD, KEY_FILE)

    # The first 16 bytes of the database file are used as salt
    enpass_db_salt = open(ENPASS_DB, "rb").read(16)

    # The database key is derived from the master password
    # and the database salt with 100k iterations of PBKDF2-HMAC-SHA512
    enpass_db_key = hashlib.pbkdf2_hmac(
        "sha512", master_password, enpass_db_salt, PBKDF2_ROUNDS
    )

    # The raw key for the sqlcipher database is given
    # by the first 64 characters of the hex-encoded key
    enpass_db_hex_key = enpass_db_key.hex()[:64]
    enpass_mac_hex_key = enpass_db_key.hex()[64:]

    conn = sqlite.connect(ENPASS_DB)

    c = conn.cursor()
    c.row_factory = sqlite.Row
    c.execute(f"PRAGMA key=\"x'{enpass_db_hex_key}'\";")
    c.execute("PRAGMA cipher_compatibility = 3;")

    c.execute("SELECT i.title, i.uuid, i.key, if.value, if.hash FROM item i, itemfield if WHERE if.type = \"password\" AND i.uuid = if.item_uuid;")
    for row in c:
        # The key object is saved in binary from and actually consists of the
        # AES key (32 bytes) and a nonce (12 bytes) for GCM
        key = row["key"][:32]
        nonce = row["key"][32:]
        # If you deleted an item from Enpass, it stays in the database, but the
        # entries are cleared
        if not nonce:
            continue

        # The value object holds the ciphertext (same length as plaintext) +
        # (authentication) tag (16 bytes) and is stored in hex
        length = len(row["value"])
        ciphertext = bytearray.fromhex(row["value"][:length - 32])
        tag = bytearray.fromhex(row["value"][length - 32:])

        # As additional authenticated data (AAD) they use the UUID but without
        # the dashes: e.g. a2ec30c0aeed41f7aed7cc50e69ff506
        uuid = row["uuid"]
        header = uuid.replace("-", "")

        # Now we can initialize, decrypt the ciphertext and verify the AAD.
        # You can compare the SHA-1 output with the value stored in the db
        cipher = AES.new(key, AES.MODE_GCM, nonce=nonce)
        cipher.update(bytearray.fromhex(header))
        password = cipher.decrypt(ciphertext)
        try:
            cipher.verify(tag)
            h = hashlib.new('sha1')
            h.update(password)
            print(row["title"] + ":\t" + "SHA-1(\"" + password.decode("utf-8") + "\")\t= " + h.hexdigest())
        except ValueError:
            print("Key incorrect or message corrupted")

if __name__ == "__main__":
    main()

@hazcod Does it work now?

@jmastr thank you for your sample, I've updated my test code at https://github.com/hazcod/enpass-cli-test/blob/master/enpasscli/vault.go
However, I always receive a query error file is not a database while the database open works fine.
I've opened up an issue in the meanwhile: https://github.com/mutecomm/go-sqlcipher/issues/21
Can you try attached vault with password mymasterpassword?
enpassvault.zip

@hazcod you mean with my enpass.py:
ubuntu :: ~ % ./enpass.py
mylogin:        SHA-1("mypassword")     = 91dfd9ddb4198affc5c194cd8ce6d338fde470e2

or do you mean with your go code?

@jmastr I would really like to rewrite this in Go for easier support & performance..
If I get to figure this out. :-/

@hazcod There you go :) (pun intended)

@jmastr you're the man ❤
I'll pump out a full cli client tomorrow

FYI @jmastr almost done on https://github.com/hazcod/enpass-cli-test/ , just need to fix a bug.

Please see https://github.com/hazcod/enpass-cli/pull/89, closing.

Amazing! Good job!

Wow! I can't believe the issue was closed!


how to enable optional open sans

Hi! I got your latest stylish update but can't quite figure out how to re-enable the open sans fonts you had in place before?

On the userstyles page select "Open Sans" under the Font Stack setting, and then "Update with Stylish."

@synthtech perfect, thank you! btw i've been using this style since its inception and it's great work.


continue to next server when failing

I made this to backup next VM in the list if a VM backup fails.

Thanks, good idea ;-)


ipa build Fail

I was created a empty project.
I set Run/Archive  Build Configuration is Debug and set Use Debug for command-line builds
ipa build

error
 Configuration was not passed, defaulting to  Debug
 Building "nomad.xcodeproj" with Scheme "nomad" and Configuration "Debug"

     xcodebuild  nomad.xcodeproj
** BUILD FAILED **

The following build commands failed:
Check dependencies
(1 failure)

This an old really old post. But, I'm seeing this error now.
I'm using
ipa  build --embed "iOS Team Provisioning Profile" --verbose

And is showing me this error:
[BEROR]CodeSign error: code signing is required for product type 'Application' in SDK 'iOS 8.1'

Ok, so, if I sign it manually in (Build Settings --> Code Signing) with correct Provisioning  Profile AND Code Signing Identity, creates the ipa without problems. Although, this is not what I would like to do, because I need to automatize this step...
What command should I use? :weary:
Thank you very much for this lib.
Greetings

In general, the ``--embed``` option will not be taken into account by xcodebuild, don't know if that's a bug or by design.
Your project must be correctly configured to use the correct provisioning profile.

So @KrauseFx , is mandatory to assign the Code signing and the Provisioning Profile in XCode IDE...
Running the xcrun command shows the same result, and is .... sad...
xcrun -sdk iphoneos PackageApplication -v ~/XcodeCommandLine/sym.root/Debug-iphonesimulator/MyTarget.app -o some_path

Thanks for the answer.

Yes. That means your project settings are somehow incorrect.

Seeing this too, or something related. I do ipa build and it says "Configuration was not passed, defaulting to Debug", but there seems to be no way of specifying configuration to ipa, I look through help.

Well, I just wanted to say, even if this right now an old post... that I wrote this script to simplify signing when using automated testing (Because I needed to create an ipa and deploy it, without using Xcode while using Jenkins).  https://github.com/phynet/SSCodesigningXcode
Thanks for your help @KrauseFx

So what SSCodesigningXcode does: it modified the Xcode project code signing settings to match the correct ones, right? You'd run this before building using shenzhen.
If so, I implemented something similar integrated into fastlane: update_project_code_signing

Haha, yep, the same thing, didn't know you have this!!. But I'm newbie using Ruby so...I learned a little doing it anyway. :3
I will take a look at your code. Thanks :+1:

Cool. This fastlane action was not officially announced yet, but is already included in the last release. It will only set the correct UDID, as the code signing identity can just be set to default.

Excellent then! good job! I will keep my eye on it.
Although,I will have to change mine later, because I'm using calabash-ios; it creates a new target, so the .pbxprj file changes his format, so I'll have to adjust it to the "new" format. It's already done but not pushed yet; but anyway, this is for a particular use only.
Thank you for sharing, your library looks good!


Add Mackevision to "Who's using Qt.py?" section

 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.


BadImageFormat exception while loading tdjson.dll

Hi!
I've tried to compile and run client under Windows 10 x64 and got BadImageFormat exception here:
services.AddSingleton(p =>
{
  Client.Log.SetVerbosityLevel(5); //<-- here
  Client.Log.SetFilePath(Path.Combine(p.GetService<Storage>().LogDirectory, "tdlib.log"));
  return new Client();
});

Stack trace:
   at TD.Bindings.WindowsBindings.td_set_log_verbosity_level(Int32 level)
   at Egram.Registry.TDRegistry.<>c.<AddTDLib>b__0_0(IServiceProvider p) in C:\Users\terekhin\sources\egram.tel\Egram\Registry\TDRegistry.cs:line 15
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite, ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitSingleton(SingletonCallSite singletonCallSite, ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitSingleton(SingletonCallSite singletonCallSite, ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitSingleton(SingletonCallSite singletonCallSite, ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitSingleton(SingletonCallSite singletonCallSite, ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.<>c__DisplayClass22_0.<RealizeService>b__0(ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService[T](IServiceProvider provider)
   at Egram.Program.Run(IServiceProvider provider) in C:\Users\terekhin\sources\egram.tel\Egram\Program.cs:line 41
   at Egram.Program.Main(String[] args) in C:\Users\terekhin\sources\egram.tel\Egram\Program.cs:line 18

I've tried both x64 and x86 builds but result is the same. I think, some dependency for tdjson.dll is missed and can not be loaded

I confirm that problem is still actual for windows 10 x64.

You need tdlib itself :) See https://github.com/x2bool/tdsharp.

Seems like a broken version of tdjson.dll. I don't have a Windows machine. Could you please help me out? Please try to unpack one of the following libs into https://github.com/x2bool/egram.tel/tree/master/Egram and run it again.
https://yadi.sk/d/4GO4w5-q3VUiWX
https://yadi.sk/d/thBukU4h3VUiaf

@x2bool same error in all 3 cases.

I managed to fix this by building https://github.com/x2bool/tdsharp and replacing existing TDLib in the Egram folder. I also took pre-built tdjson.dll from https://yadi.sk/d/thBukU4h3VUiaf provided by @x2bool.

Alright everyone, sorry for inconvenience. tdjson.dll in the repo is broken. We are going to fix this with proper NuGet packaging.
@schroding3rscat Why had you had to compile https://github.com/x2bool/tdsharp yourself? Is there anything wrong with version from NuGet?

Temporary workaround for Windows: https://github.com/x2bool/egram.tel/commit/5b2385cd7e6775919445af100f36f14c0388d9f9
Please checkout the latest version from master.

It works now, thanks.

Confirm, it works, thanks

@x2bool, I think I had mixed up. My bad.


Removing activeDeadlineSeconds option

Description
When running a full load test this made the
process undergo a forced termination.
Signed-off-by: Vicente Zepeda Mas<EMAIL_ADDRESS>

Codecov Report

:exclamation: No coverage uploaded for pull request base (master@c8e5ca9). Click here to learn what that means.
The diff coverage is n/a.

@@            Coverage Diff            @@
##             master     #708   +/-   ##
=========================================
  Coverage          ?   53.79%
=========================================
  Files             ?        8
  Lines             ?      316
  Branches          ?        0
=========================================
  Hits              ?      170
  Misses            ?      146
  Partials          ?        0

Flag
Coverage Δ

gha
53.79% <0.00%> (?)

python-3.9
53.79% <0.00%> (?)

unit
53.79% <0.00%> (?)

Flags with carried forward coverage won't be shown. Click here to find out 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 c8e5ca9...d204fe3. Read the comment docs.


Is there a .vimrc file somewhere I can configure?

Does vim-mode read a .vimrc or similar config file that I can tweak to my liking?

Not right now; just the options available through this settings button.

You can also specify mode-specific keybindings in keymap.cson. Mine looks like this:
'atom-text-editor.vim-mode:not(.insert-mode)':
  ';': 'ex-mode:open'
  ', t': 'fuzzy-finder:toggle-file-finder'
  ', s': 'pane:split-up'
  ', v': 'pane:split-left'

Or being able to ingest a .vimrc into the new world...

As stated in the README, this package is no longer maintained and is deprecated. We recommend that people use the vim-mode-plus package instead. Because of this, we are archiving this repository and closing all issues and pull requests. Thanks very much for your support and contributions!


fix(deps): update stackit sdk modules

This PR contains the following updates:

Package
Type
Update
Change

github.com/stackitcloud/stackit-sdk-go/core
require
minor
v0.10.1 -> v0.12.0

github.com/stackitcloud/stackit-sdk-go/services/argus
require
minor
v0.9.5 -> v0.10.0

github.com/stackitcloud/stackit-sdk-go/services/authorization
require
minor
v0.1.1 -> v0.2.0

github.com/stackitcloud/stackit-sdk-go/services/dns
require
minor
v0.8.4 -> v0.9.0

github.com/stackitcloud/stackit-sdk-go/services/logme
require
minor
v0.10.1 -> v0.13.0

github.com/stackitcloud/stackit-sdk-go/services/mariadb
require
minor
v0.10.1 -> v0.13.0

github.com/stackitcloud/stackit-sdk-go/services/mongodbflex
require
minor
v0.11.1 -> v0.12.0

github.com/stackitcloud/stackit-sdk-go/services/objectstorage
require
minor
v0.8.6 -> v0.9.0

github.com/stackitcloud/stackit-sdk-go/services/opensearch
require
minor
v0.10.1 -> v0.13.0

github.com/stackitcloud/stackit-sdk-go/services/postgresflex
require
minor
v0.12.0 -> v0.13.0

github.com/stackitcloud/stackit-sdk-go/services/rabbitmq
require
minor
v0.10.0 -> v0.13.0

github.com/stackitcloud/stackit-sdk-go/services/redis
require
minor
v0.10.1 -> v0.13.0

github.com/stackitcloud/stackit-sdk-go/services/resourcemanager
require
minor
v0.7.7 -> v0.8.0

github.com/stackitcloud/stackit-sdk-go/services/secretsmanager
require
minor
v0.6.0 -> v0.7.0

github.com/stackitcloud/stackit-sdk-go/services/serviceaccount
require
minor
v0.3.6 -> v0.4.0

github.com/stackitcloud/stackit-sdk-go/services/ske
require
minor
v0.11.0 -> v0.12.0

Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.

[ ] If you want to rebase/retry this PR, check this box

This PR has been generated by Renovate Bot.

This breaking change was missed on the CHANGELOGs for these services on the SDK, but your fix is correct


_cpools error

Hi,
When I executed test.py without any errors, but when I executed train.py, I encountered the following error:
Traceback (most recent call last):
File "/mnt/pycharm/Duan/train.py", line 203, in
train(training_dbs, validation_db, args.start_iter)
File "/mnt/pycharm/Duan/train.py", line 138, in train
training_loss, focal_loss, pull_loss, push_loss, regr_loss = nnet.train(**training)
File "/mnt/pycharm/Duan/nnet/py_factory.py", line 93, in train
loss.backward()
File "/root/miniconda3/envs/myconda/lib/python3.7/site-packages/torch/tensor.py", line 166, in backward
torch.autograd.backward(self, gradient, retain_graph, create_graph)
File "/root/miniconda3/envs/myconda/lib/python3.7/site-packages/torch/autograd/init.py", line 99, in backward
allow_unreachable=True)  # allow_unreachable flag
File "/root/miniconda3/envs/myconda/lib/python3.7/site-packages/torch/autograd/function.py", line 77, in apply
return self._forward_cls.backward(self, args)
File "/mnt/pycharm/Duan/models/py_utils/_cpools/init.py", line 57, in backward
output = right_pool.backward(input, grad_output.to(torch.bool))[0]
RuntimeError: The output tensor of lt must be a bool, but was Byte (comparison_op_out at /pytorch/aten/src/ATen/native/BinaryOps.cpp:235)
frame #0: c10::Error::Error(c10::SourceLocation, std::string const&) + 0x33 (0x7f519aec5813 in /root/miniconda3/envs/myconda/lib/python3.7/site-packages/torch/lib/libc10.so)
frame #1:  + 0x1950cf1 (0x7f519cc68cf1 in /root/miniconda3/envs/myconda/lib/python3.7/site-packages/torch/lib/libtorch.so)
frame #2:  + 0x41bc418 (0x7f519f4d4418 in /root/miniconda3/envs/myconda/lib/python3.7/site-packages/torch/lib/libtorch.so)
frame #3:  + 0x3b6ee7e (0x7f519ee86e7e in /root/miniconda3/envs/myconda/lib/python3.7/site-packages/torch/lib/libtorch.so)
frame #4: pool_backward(at::Tensor, at::Tensor) + 0x595 (0x7f5191d86135 in /root/.local/lib/python3.7/site-packages/cpools-0.0.0-py3.7-linux-x86_64.egg/right_pool.cpython-37m-x86_64-linux-gnu.so)
frame #5:  + 0x1c651 (0x7f5191d97651 in /root/.local/lib/python3.7/site-packages/cpools-0.0.0-py3.7-linux-x86_64.egg/right_pool.cpython-37m-x86_64-linux-gnu.so)
frame #6:  + 0x1d52a (0x7f5191d9852a in /root/.local/lib/python3.7/site-packages/cpools-0.0.0-py3.7-linux-x86_64.egg/right_pool.cpython-37m-x86_64-linux-gnu.so)
frame #7: _PyMethodDef_RawFastCallKeywords + 0x264 (0x55c8594ea114 in /root/miniconda3/envs/myconda/bin/python3.7)
frame #8: _PyCFunction_FastCallKeywords + 0x21 (0x55c8594ea231 in /root/miniconda3/envs/myconda/bin/python3.7)
frame #9: _PyEval_EvalFrameDefault + 0x4e9d (0x55c85954ea5d in /root/miniconda3/envs/myconda/bin/python3.7)
frame #10: _PyFunction_FastCallDict + 0x10b (0x55c8594a473b in /root/miniconda3/envs/myconda/bin/python3.7)
frame #11: _PyEval_EvalFrameDefault + 0x1e35 (0x55c85954b9f5 in /root/miniconda3/envs/myconda/bin/python3.7)
frame #12: _PyEval_EvalCodeWithName + 0x2f9 (0x55c8594a36f9 in /root/miniconda3/envs/myconda/bin/python3.7)
frame #13: _PyFunction_FastCallDict + 0x1d5 (0x55c8594a4805 in /root/miniconda3/envs/myconda/bin/python3.7)
frame #14: _PyObject_Call_Prepend + 0x63 (0x55c8594bf943 in /root/miniconda3/envs/myconda/bin/python3.7)
frame #15: PyObject_Call + 0x6e (0x55c8594b2b9e in /root/miniconda3/envs/myconda/bin/python3.7)
frame #16: torch::autograd::PyNode::apply(std::vector<torch::autograd::Variable, std::allocatortorch::autograd::Variable >&&) + 0x178 (0x7f51e30339a8 in /root/miniconda3/envs/myconda/lib/python3.7/site-packages/torch/lib/libtorch_python.so)
frame #17:  + 0x3d4ae06 (0x7f519f062e06 in /root/miniconda3/envs/myconda/lib/python3.7/site-packages/torch/lib/libtorch.so)
frame #18: torch::autograd::Engine::evaluate_function(torch::autograd::NodeTask&) + 0x10b7 (0x7f519f05c417 in /root/miniconda3/envs/myconda/lib/python3.7/site-packages/torch/lib/libtorch.so)
frame #19: torch::autograd::Engine::thread_main(torch::autograd::GraphTask) + 0x1c4 (0x7f519f05e424 in /root/miniconda3/envs/myconda/lib/python3.7/site-packages/torch/lib/libtorch.so)
frame #20: torch::autograd::python::PythonEngine::thread_init(int) + 0x2a (0x7f51e302ce6a in /root/miniconda3/envs/myconda/lib/python3.7/site-packages/torch/lib/libtorch_python.so)
frame #21:  + 0xf14f (0x7f51e3b5c14f in /root/miniconda3/envs/myconda/lib/python3.7/site-packages/torch/_C.cpython-37m-x86_64-linux-gnu.so)
frame #22:  + 0x76db (0x7f51f2b466db in /lib/x86_64-linux-gnu/libpthread.so.0)
frame #23: clone + 0x3f (0x7f51f286f88f in /lib/x86_64-linux-gnu/libc.so.6)

torch1.3.1
torchvision0.4.2
CUDA10.0
gcc7.5

I also have this error and my libraries versions are simillar.
Would appreciate an answer to this.
Can someone tell what library versions they used for this to be successful?

I also have this error and my libraries versions are simillar.
Would appreciate an answer to this.
Can someone tell what library versions they used for this to be successful?

This code works for pytorch 1.0.0, if you want to use center pool in pytorch 1.3, you can try to replace kByte to kBool in *_pool.cpp and recompile.
auto gt_mask = torch::zeros({batch, channel, width}, at::device(at::kCUDA).dtype(at::kByte)); change to
auto gt_mask = torch::zeros({batch, channel, width}, at::device(at::kCUDA).dtype(at::kBool));
Hope that works for you.


More decimal points for ingame scoretab leaderboard

As per title.
Add more decimal points for scores that are quads and aaa's.

In addition to this we need to: increase decimal precision for all 99.00%+ scores anyways, add a CCOn filter toggle, and sort the leaderboard by percent strictly when viewing by current rate.

This might do it:
self:settextf("%05.2f%%", hs:GetWifeScore() * 10000 / 100):diffuse(byGrade(hs:GetWifeGrade()))
to
self:settextf((hs:GetWifeScore() > 0.99 and "%05.4f%%" or "%05.2f%%"), hs:GetWifeScore() * 10000 / 100):diffuse(byGrade(hs:GetWifeGrade()))
in
https://github.com/etternagame/etterna/blob/develop/Themes/Til Death/BGAnimations/superscoreboard.lua#L522

mouseover solution, same as eval
02da394ea4bbe9754d50d260df057bc45d9e62dc


[meta] Add WIP bot

We should consider adding https://github.com/wip/app to prevent PRs from getting merged accidentally

Done


http instead of https in the clone-method section in the docs

In https://clue.readthedocs.org/en/latest/inputs_yaml.html#clone-method, http should be changed to https, since the two current choices in git cloning are https and ssh. in addition, the inputs.yaml file also reads https and not http

Fixed


Simplifying creates polygons with holes that in turn are points

Simplify simplifies polygons to arcs that have 2 equal points:
[ 26.3929056, 44.2503541 ],
[ 26.3929056, 44.2503541 ]

which actually is a point. A point in turn cannot be a hole of a polygon. Should callers deal with this, or should topojson's simplify already remove arcs, that became "linestring-points"? Such filtering would match TopoJson's optimzation-greedy design, would it?

I’m pretty sure this is the expected behavior. Simplification and quantization guarantee that arcs have at least two points; see post-quantize.js, for example. There’s some code in filter.js to optionally remove empty rings (and geometries). That’s slightly different than optimizing the generated topology by coalescing degenerate arcs into their neighbors, but the tricky thing there would be to ensure that you preserve the topological relationships between the geometries.
I guess this is a long way of saying that I think the current behavior is reasonable but that it could also be optimized.


MM-44470 - Fix SVG not rendering without width and height in Chrome

Summary
Fix SVG not rendering without width and height in Chrome.
The source of the problem was event.target giving different values depending on the browser when width and height is not set in the SVG image.
Default values if no width and height:
Firefox was returning 0x0. https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox
Chrome was returning 350x154.
The SVG image was rendered in Firefox even if dimensions was 0x0 because a small-image CSS class was added that set the width and height to 48px by 48px.
In Chrome, it was the normal image CSS class that was added because of intrinsic value. But the image was rendered inside the <figure> inline-block with 0 width so the image wasn't show.
Now, the value is the same with each browsers because values is from the database for both and a CSS width is always set when a SVG image is rendered.
Fix SVG not rendering without width and height in preview in both browsers
event.target was also causing SVG without width and height to not render in image_preview.jsx.
Ticket Link
Fix https://github.com/mattermost/mattermost-server/issues/20271
Screenshots
SVG without width and height in Chrome.

before
after

SVG without width and height not rendering in preview
(The SVG hand image have no background color)

before
after

Release Note
Fixed SVG not rendering without width and height in Chrome.

Hello @jbattistispiria,
Thanks for your pull request! A Core Committer will review your pull request soon. For code contributions, you can learn more about the review process here.

On a related note, the Town Square channel on the test server is inaccessible at the moment 😛
Also, thanks for the PR since I forgot to mention that earlier!

This PR has been automatically labelled "stale" because it hasn't had recent activity.
A core team member will check in on the status of the PR to help with questions.
Thank you for your contribution!

Hi @jbattistispiria. Is there anything we could help with on this?

@hmhealey Hi, i'm jbattistispiria but i don't have access to this secondary account anymore. I will recreate a new PR with my main account and add your last changes request.

Heads up that as part of our efforts to move to a monorepo, we're closing out a number of older pull requests like this one to help streamline the effort.
If you'd like to preserve these changes -- even if you're not the original author! -- feel free to resubmit the pull request against the monorepo once it's ready. You can subscribe to mattermost-server-issue-22420 for status updates on this effort.


chore: sidebar update

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 80.079%

Totals

Change from base Build<PHONE_NUMBER>:
0.0%

Covered Lines:
7823

Relevant Lines:
8866

💛  - Coveralls


no reset?

How do I reset the router history once I login ? I dont want to be able to goBack to the login screen once the user is logged in, hence I want to reset the history. Is there a way to do that?

The user can always hit the back button in their browser. No way to prevent that.
If you want to overwrite the location, use replace.


执行计划任务时出现错误

提示这个错误:Fatal error: Interface 'JsonSerializable' not found in /home/wwwroot/ss.panel/vendor/illuminate/support/Fluent.php on line 11
PHP版本:
PHP 5.6.26 (cli) (built: Sep 16 2016 04:36:41)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
安装的模块:
[0] => Core
[1] => date
[2] => ereg
[3] => libxml
[4] => openssl
[5] => pcre
[6] => zlib
[7] => filter
[8] => hash
[9] => pcntl
[10] => readline
[11] => Reflection
[12] => SPL
[13] => session
[14] => standard
[15] => bz2
[16] => calendar
[17] => ctype
[18] => curl
[19] => dom
[20] => mbstring
[21] => fileinfo
[22] => ftp
[23] => gd
[24] => gettext
[25] => iconv
[26] => exif
[27] => mcrypt
[28] => mysqlnd
[29] => PDO
[30] => Phar
[31] => SimpleXML
[32] => sockets
[33] => sqlite3
[34] => tokenizer
[35] => xml
[36] => xmlwriter
[37] => xsl
[38] => mysql
[39] => mysqli
[40] => pdo_mysql
[41] => pdo_sqlite
[42] => wddx
[43] => xmlreader
[44] => json
[45] => phalcon
[46] => mhash
[47] => Zend OPcache
事先有在网上搜过，php-json和php-phalcon都已经安装并启用了，但依旧未能解决问题，CentOS 6.8 LNMP 1.3

计划任务去掉 -n 参数