Status stuck on “Syncing” in iOS 17

Hi, thanks for this package.
I have implemented CloudKit in my app and it’s been working perfectly in iOS 16. However in iOS 17 (Release Candidate) CloudKit sync has been very unreliable, mostly after reinstallation of the app. The sync state is stuck in either “sync not started” or “syncing”. After about 30 minutes, iCloud sync suddenly works until the next time I uninstall and reinstall the app.

I’m really confused as I haven’t faced any problems in iOS 16, only in iOS 17. Is it an iOS bug if it’s stuck on “sync not started” or “syncing” states for long periods of time?
Appreciate your input regarding this matter.

Hi @infinitepower18,
Getting stuck on "sync not started" or "syncing" can either mean that NSPersistentCloudKitContainer isn't sending notifications or that it's not syncing; either way would be an iOS bug unless they've documented some kind of change in their notifications. The fact that it eventually starts working makes me think it's an iOS bug though.
NSPersistentCloudKitContainer does what it wants when it wants, and sometimes that means it doesn't sync. In the early days of NSPersistentCloudKitContainer, we'd see issues with it not syncing for 30 minutes or so pretty frequently. In fact, issues like that were what inspired me to write this package. Unfortunately, I don't have any suggestions to make it sync. CloudKitSyncMonitor just monitors NSPersistentCloudKitContainer so that we know what it's doing - it can't change when syncs happen.
Hopefully the delays are a bug in iOS 17 RC that they'll fix before iOS 17 is released.

Hi @ggruen, thanks for your response.
The last time I reinstalled the app on my iPhone was probably 2 days ago when the RC came out. After the initial sync issues that happen after installation cloudkit was working fine and status was showing Synced with iCloud. Today when I opened the app I noticed the status was stuck on syncing again. However after rebooting my phone, it fixed itself.
I really hope it’s an iOS bug. I posted on the dev forums as well and someone said it may be some bug with the signing and capabilities. https://developer.apple.com/forums/thread/737370

Hi @infinitepower18 ,
I recommend testing with a couple of devices (or a device and icloud.com's developer dashboard) to see if your data is syncing when your status says it's not. If it is, then there could be a bug in the NSPersistentCloudKitContainer notifications, your app, or CloudKitSyncMonitor. But if it doesn't sync, then it's iOS's problem (and unfortunately your app's problem with little you can do about it except file a FB for Apple).
If you do test, please post your results here so others experiencing the issue can see (and we can tell if there's a possible issue in CloudKitSyncMonitor). I put CloudKitSyncMonitor last in the list of probable causes because it's a simple package, so there's not much that can break it except NSPersistentCloudKitContainer not firing the notifications it promises to.

The status shown by CloudKitSyncMonitor is accurate. When it actually doesn't sync, the status either shows Sync not started or Syncing. When CloudKit works, it shows Synced with iCloud.
I will do some more testing and will try to post results here. I have also filed a report with Apple FB13165914. Today I have implemented an Apple Watch app to go alongside the iOS app. My watch is on watchOS 10 RC and it seems to be syncing quite reliably. I haven't added the sync monitor to it yet but will do so tomorrow for troubleshooting purposes in case something goes wrong with it.
For reference, here is the code I use for CloudKit. I think when it doesn't sync I don't see anything logged in the CloudKit console. The same code is used for both iOS app and watch app.
import SwiftUI
import CoreData

class DataController {
    var container: NSPersistentCloudKitContainer
    @AppStorage(wrappedValue:true,"syncEnabled",store:UserDefaults(suiteName: "group.com.ip18.SubManager")) var syncEnabled
    static let shared = DataController()
    init() {
        container = NSPersistentCloudKitContainer(name: "Subscriptions")
        load(syncEnabled: syncEnabled)
    }

    func load(syncEnabled: Bool = true) {
        let url = URL.storeURL(for: "group.com.ip18.SubManager", databaseName: "Subscriptions")
        let storeDescription = NSPersistentStoreDescription(url:url)
        if syncEnabled {
            storeDescription.cloudKitContainerOptions = NSPersistentCloudKitContainerOptions(containerIdentifier: "iCloud.com.ip18.SubManager")
        } else {
            storeDescription.cloudKitContainerOptions = nil
        }
        let remoteChangeKey = "NSPersistentStoreRemoteChangeNotificationOptionKey"
        storeDescription.setOption(true as NSNumber, forKey: remoteChangeKey)
        storeDescription.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
        container.persistentStoreDescriptions = [storeDescription]
        /*
        // Only initialize the schema when building the app with the
        // Debug build configuration.
        #if DEBUG
        do {
            // Use the container to initialize the development schema.
            try container.initializeCloudKitSchema(options: [])
        } catch {
            // Handle any errors.
        }
        #endif
        */
        container.loadPersistentStores(completionHandler: {(storeDescription,error) in
            if let error = error as NSError? {
                fatalError("Unresolved error \(error)")
            }
        })
        container.viewContext.automaticallyMergesChangesFromParent = true
    }
}

Well, just added the sync monitor to the watch app and after deploying it to TestFlight for testing, and uninstalling and reinstalling the watch app, I'm now having the same sync issues as I did on iOS. I checked if it was a problem with the sync monitor by rolling back to the previous build of the watchOS app, which doesn't have the sync monitor and the data still isn't syncing properly. Really strange as it was working quite flawlessly yesterday...

I'm certain it's an iOS bug at this point. Apple responded to my forum post and told me to submit a diagnostic report.
Today 17.0.1 was released but it didn't seem to completely solve the issue. I did however manage to go through multiple app reinstallations (about 20) without CloudKit glitching. However if I uninstall, reboot and reinstall the app the issue happens again. Also later today I tested reinstallation again and it CloudKit was stuck, until I rebooted my device.
Really hope this gets fixed soon...

Managed to solve it, it was because I had both my widget and app syncing to iCloud at the same time. Apple told me to have only the app or the widget handle the syncing. So I let the app handle the syncing and only have the widget read the local data store.
Will go ahead and close this issue now. I hope this helps someone.


Tokeneconomics survey: Post approval changes

Following Changes to a Grant after Approval instructions:
This PR seeks approval for:

Change in scope of the review
Change in delivery timelines
Change in project audience

Change in scope of the review: Scope: Top-6
The existing literature was deeper than expected, but also much narrower than
expected. Unfortunately, this means there are not 10 articles that fit
the grant scope. It has also meant that distilling the analysis has taken
much more time than expected.  An example of a first draft annotation of the simplest article is included below.  Un-distilled annotated entries are 3-5 pages, and some annotated entries will likely run to multiple pages.
I have expanded the scope of published articles from
Dec 2022 to the current date in order to capture one article I judge to be
significant.
The current articles cover bubble-coins, dampened-coins,
breakable-coins and redeemable-coins.
These cover most, if not all, characteristics of existing coins.
Change in delivery timelines
The existing literature was deeper than expected. This meant that distilling
the analysis has taken much more time than expected. I have also had
delays in setting up the legal entities through my accountant - its tax
season right now - hence the delay in submitting the details for the
Milestone payments.
Change in project audience
Substrate is being merged into Polkadot and is now formally and
practically under the rubric of the 'Parity Polkadot SDK ...
(basically, that’s Substrate, Polkadot, Cumulus and XCM)'.
See: https://web.archive.org/web/20230621013047/https://forum.polkadot.network/t/psa-parity-is-currently-working-on-merging-the-polkadot-stack-repositories-into-one-single-repository/2883/13
Polkadot uses one specific coin model.
This project envisions/contemplates token designs that improve on DOT or even
conflict with DOT.
These changes address that broader audience.

 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.

 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.

Why did you replace Substrate? The name change has not happened yet (and won't happen overnight) and

At the time of writing the application I, incorrectly, believed Substrate was the umbrella under which Polkadot sat as the first-mover/PoC of what you could do with Substrate.
I believe the Parity leads were very clear in the forum post I linked to: Substrate serves Polkadot
To be fair to them, as I learned more, I now understand this has always been the case.
I linked to TOW3S to cite some W3F project where users can follow-up, and hopefully find the example implementation I foreshadowed. Such an example does not fit naturally under Polkadot, where we may be exploring/experimenting with things that are considered flaws of Polkadot, and where we might also hope to attract projects that aim to compete with Polkadot, as well a projects that complement Polkadot.
I will remove the references, it doesn't impact the paper.

open-web3-stack is not a particularly well-known name.

True, right now.  This is a chicken-or-egg first problem. However, it does I believe have critical mass.  As mentioned I'll remove references to any particular chain. If the example implementation goes ahead this can be revisited as part of that grant.

IMO, the number of teams using open-web3-stack is sufficiently large to keep the name Substrate in this application.

Such an example does not fit naturally under Polkadot for the reasons outlined.

Also, open-web3-stack has no affiliation with W3F.

Ack. I'll remove those too.


Mcherem docs 4651

This is the final Beta doc review for Tech Pubs and UX. This reflects the current working state of the software.
Please review all or some of the following files:
6 _partials files and 9 regular files - 3 of them about 200 lines and the rest 20-80 lines each.

Please disregard any review requests for this PR, and review https://github.com/mulesoft/docs-partner-manager/pull/23 instead.


How to replace modules

I'm trying to update alamid to<EMAIL_ADDRESS>Our current bundling concept is a bit of a mess, but for now I'm trying to adapt alamid to<EMAIL_ADDRESS>without changing the overall concept (we'll do that in the next step).
We had a resolve-module, that tried to replace server-only module with client modules. I know that webpack has an own mechanism, but ours is a bit different. It works like this:
If a .server.js-file is found, the resolve-module tries to find a .client.js-file and then just a .js-version of the module. If none of this can be found, the loader throws an exception to warn the user that he's about to require a server-only module.
There's additionally a special algorithm for files inside the node_modules/alamid-folder that tries to the same, but with whole directories. If a server-only module inside the /server/- or /core/-directory has been required, it tries to find it in the /client/-directory.
How can I accomplish that with<EMAIL_ADDRESS>Maybe with lib/NormalModuleReplacementPlugin.js?
You can find our implementation in /lib/core/bundle/resolveFilename.js

@sokra
If I want to modify the module contents instead of the module's path , could you tell me when and how to write this plugin ?
I've tried replace the module._source._value in a hook emit, but there are some strange results in the final files. such as:
__webpack_require__M6ule: D:\cmshow\apollo_dev\js\common\qt_compass_js
the right results should be:
//DYNAMIC removed module: D:\cmshow\apollo_dev\js\common\qt_net_js
I can't find out what happened,  maybe using the emit hook is not right ?

@Lynn-cc I met the same problem, did you resolve it?


Refine the command to create Java project

fix #249
fix #206
fix #199

@Eskibear @testforstephen @akaroml
Please take a look when you have time. The A/B testing work will be addressed in another PR, to avoid too much code change in one PR.


[EXPERIMENT] Split up packages using Lerna

Nothing to see here...

Note to self: yarn workspaces might work too


⚠ Bofrost.at has degraded performance

In a6d0af9, Bofrost.at (https://www.bofrost.at) experienced degraded performance:

HTTP code: 200
Response time: 1376 ms

Resolved: Bofrost.at performance has improved in 23173fb after 16 minutes.


add tests to HostInputsChangeTests

Alternative approach https://github.com/project-oak/arcsjs-core/pull/23

Seem like maybe this should have been merged with previous PR? Nbd, just checking.

Seem like maybe this should have been merged with previous PR? Nbd, just checking.

IIRC I should close the previous PR, and we should just look at this one. Sorry for the confusion (I've been struggling with git branches, this is why this happened)


Spark robustness

Fixes some integration tests that were failing.

Part of https://github.com/quasar-analytics/quasar/issues/1907

Codecov Report

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

@@            Coverage Diff            @@
##             master    #1946   +/-   ##
=========================================
  Coverage          ?   64.75%
=========================================
  Files             ?      382
  Lines             ?    18870
  Branches          ?      219
=========================================
  Hits              ?    12219
  Misses            ?     6651
  Partials          ?        0

Impacted Files
Coverage Δ

...in/scala/quasar/frontend/logicalplan/package.scala
63.15% <ø> (ø)

.../scala/quasar/physical/marklogic/qscript/lib.scala
0% <ø> (ø)

sql/src/main/scala/quasar/sql/compiler.scala
90% <ø> (ø)

...nector/src/main/scala/quasar/qscript/MapFunc.scala
63.91% <ø> (ø)

...ar/physical/couchbase/planner/MapFuncPlanner.scala
10.91% <ø> (ø)

...uasar/physical/mongodb/planner/JsFuncHandler.scala
80.86% <ø> (ø)

...cala/quasar/frontend/logicalplan/LogicalPlan.scala
89.02% <ø> (ø)

...ala/quasar/frontend/logicalplan/LogicalPlanR.scala
81.2% <ø> (ø)

frontend/src/main/scala/quasar/std/date.scala
95.42% <0%> (ø)

...n/scala/quasar/physical/sparkcore/fs/CoreMap.scala
50.13% <0%> (ø)

... and 1 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 d81b2af...69fb498. Read the comment docs.

@rabbitonweb Just a ping on this – you haven’t yet addressed my comments and it also overlaps with another PR you submitted that silences logging in the REPL.

@rabbitonweb since this PR already contains a commit to silence logging in REPL, should we just close #1980?

@alissapajer I was leaning toward removing it from this PR, since the approach you suggested in #1980 seems like an improvement. We shouldn’t be duplicating the config.

@sellout removing it from this PR works for me - then we can track the changes to remove the duplication separately in #1980 and don't have to worry about that here.

Updated after review (cc @sellout )

@rabbitonweb can you remove the repl/src/main/resources/log4j.properties per the discussion above?

@sellout done

Forgot the version label. I’ll add and merge. Just a reminder.


documentation is really good

documentation is really good

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 4343ac18-37c1-9a3e-0210-b69bf924db91
Version Independent ID: 19d63151-4d8a-30c6-35de-0c8c277cde25
Content: Classes (C# Programming Guide)
Content Source: docs/csharp/programming-guide/classes-and-structs/classes.md
Service: unspecified
GitHub Login: @BillWagner
Microsoft Alias: wiwagn

Thank you @saineshwar. We appreciate your comments!


when using file order version 1.2 automatically prints sorting order

A line is printed for every file:
sorting with []

Does it happen with the latest version? Because it seems this specific println has been removed.

Closing it, feel free to reopen if it shows up again.


Update to containerd v2

Issue #, if available:
Description of changes:
This PR updates to containerd v2.
Testing performed:
make build and make test pass locally.
Pending further testing into nerdctl.
References to cri api v1alpha could/should be removed obviously, but that might be independently of this I guess.
Lmk your toughts.
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Hey, thanks for the contribution! We don't plan on merging until containerd v2.0.0, but this generally looks like the right direction.
Left a couple of quick questions, but otherwise looks good. Would you like me to run the CI?

Thanks a lot @sondavidb
Having the CI run would be lovely so I can fix any lingering issues with the transition.
Ok of course on merging only after ctd v2 is out - or whenever you folks feel this is ready.
Cheers.

CI looks good, we'll probably end up waiting for the 2.0 release. Thanks again!

Just repushed without the extraneous toolchain statement.
Thanks a lot @sondavidb !

@sondavidb obviously it will drift from main.
Happy to rebase whenever you need it so just ping me here

Yeah, we just had to fix some deprecated packages in #1308 to get past our linting CI, I don't foresee this happening again anytime soon so it might be best to rebase now if you don't mind @apostasie. Anything after this I won't bother you about until 2.0 comes out.

Yup. Done.
Can you get the CI to go brrr?
(that type of rebase with dependencies versions flying all over always make me feel a bit nervous)
Thanks a lot @sondavidb !

Yep, it is hosed.
Damn it.

Repushed. Confirmed working locally. Sorry for the churn.

All good, this work is greatly appreciated on our end! Thanks again!

Hey @sondavidb
Question for you: would you be amenable to merging this PR into an ad-hoc  / dedicated branch (something like experimental-ctdv2)?
That way we could use this branch in nerdctl as we push through for v2 - and then we would switch the dependency back to soci main / your next release, when you folks are ready to have it on main (eg: post containerd v2 release as you said earlier).
Alternatively, we could temporarily disable soci in the first version of nerdctl v2, and re-integrate it later on, but I personally feel it would be better to get public QA / exposure for the entire feature set on nerdctl v2.
Let me know your thoughts.
Cheers!

I'll see what the team thinks and get back to you ASAP. As it's Friday afternoon I'm not expecting a consensus until after the weekend, though.

I'll see what the team thinks and get back to you ASAP. As it's Friday afternoon I'm not expecting a consensus until after the weekend, though.

No rush, really.
Appreciate your help! Thanks a lot and enjoy the week-end :)

Thanks, you too!
One more question — to be clear, we only need a branch, not an entire release, correct?

Thanks, you too!
One more question — to be clear, we only need a branch/commit, not an entire release, correct?

Yep, would be happy with just a branch/commit.

Hey @apostasie, apologies this slipped my mind.
Just created a new branch, upgrade-containerd-v2, you can edit the PR to be against this branch.

Thanks a lot @sondavidb
Really appreciate this!
Closing in favor of #1329


memory 50mb per deployed bot

Hi, i tried to use this bot for langchain through flowise.
each bot deployed uses approx 50mb RAM.
The way we deployed is to have seperate bots for each user. like there are multiple agents you can create in flowise.. so each user is able to create a new bot for a new agent they add in flowise.
however, this is not at all scalable as 100bots would consume 5gb ram.
is there a way to lower the memory if we are just using !lc command for flowise.
or would a serverless deploy option be ideal in this use case
alternative:
we could.i.plement one bot for flowise and the user selects the agent with !agent command.. but that would have to be done for everyroom everytime the user is accessing flowise related bots i guess.
what do you suggest. thanks

I may add a sqlite db to manage users/rooms in matrix.

scope
privileges

user/room
can use command

yay looking forward. thanks

I am refactoring the code and need some time.

I add some lcadmin commands, is it ok?
"""
username: user_id or room_id
- user_id: @xxxxx:xxxxx.xxxxx
- room_id: !xxxxx:xxxxx.xxxxx

agent_name: the name of the agent
api_url: api_endpoint
api_key: api_key (Optional)
permission: integer (can: 1, cannot: 0)
"""

# add langchain endpoint
!lcadmin add {username} {agent_name} {api_url} {api_key *Optional} {permission}

# update api_url
!lcadmin update {username} {agent} {api_url}
# update api_key
!lcadmin update {username} {agent} {api_key}
# update permission
!lcadmin update {username} {agent} {permission}
# update agent name
!lcadmin update {username} {agent}

# delete agent
!lcadmin delete {username} {agent}
# delete all agent
!lcadmin delete {username}

https://github.com/hibobmaster/matrix_chatgpt_bot/releases/tag/v1.3.0

yup thanks. commands are useful and thanks for refactor
. exploring it.


RHIROS-268 - add icons for system states

Screenshot for reference:

adding @karelhala, @terezanovotna and @kuklas into loop for review

Looks good!

Merged, thanks @kgaikwad @karelhala @terezanovotna !


Some small fixes

What is the purpose of this change? What does it change?
Make go vet happy.
Was the change discussed in an issue or in the forum before?
No.
Checklist

[x] I have read the Contribution Guidelines
[x] I have enabled maintainer edits for this PR
[x] I have run gofmt on the code in all commits
[x] All commit messages are formatted in the same style as the other commits in the repo
[x] I'm done, this Pull Request is ready for review

Rebased.

Thanks!


Set class_kind in __init_subclass__ (#167)

I have no idea why there's kind property additionally if there's class_kind already, but this closes #167

Hey @bswck
Well yes, Ig you're right. Thanks for opening this PR!


doFirst and doLast in statically compiled languages gets only Task, not actual task type

With Gradle 6.5.1, I tried this:
fun deleteExternalsFile(task: PackageJsonDukatTask, file: String) {
    task
            .outputs
            .files
            .asFileTree
            .matching { include("**/$file") }
            .forEach { it.delete() }
}

tasks.withType(PackageJsonDukatTask::class) {
    doLast {
<EMAIL_ADDRESS>"@actions/core")
<EMAIL_ADDRESS>"@actions/io")
        deleteExternalsFile(this, "domain.domain.module_node.kt")
    }
}

This did not compile, as this is only of type Task in doLast.
Of course I can either use this@withType or make the method parameter Task in this case as I only use Task properties,
but that's not the point.
doLast closure should know the type of the task it is called for.

This is the function signatures in Task:
interface Task {
    Task doFirst(Action<? super Task> action);
    Task doLast(Action<? super Task> action);
}

A plugin implemented in Java would have the same problem
project.getTasks().withType(JavaCompile.class).configureEach((JavaCompile javaCompile) ->
    javaCompile.doFirst((Task task) -> { })
);

Adding Kotlin extensions such as follows doesn't help because the original functions have precedence:
fun <T : Task> T.doFirst(action: T.() -> Unit) {
    doFirst(action as Action<in Task>)
}

At first sight I don't see a simple way to solve this without changing Task radically. Any idea?

Right now also not really besides adding a type parameter to Task and requiring all task classes to set it to itself or something like that which is probably what you meant with radical change and is probably quite an ugly change and might also make problems when extending tasks.

That's what I had in mind yes. It would be breaking the task api for everyone :shrug:


install or update plugins simutaneously

please take a look vim-plug
plugins are able to install or update parallelly, that feature is pretty cool. i hope neobundle is able to implement it also. needless to say, neobundle is cool and thanks for your effort.

I recently tried vim-plug feature and it is incredibly fast. I use neobundle with vimproc and Unite interface but it takes quite some time to update the plugins. Is there any chance to improve the update speed (i.e implement a parallel install method similar to that in vim-plug)?

You can change g:neobundle#install_max_processes value...

Awesome! I think the default value should be 16. Thank you so much.

Fixed the default value.

So I should set the value to 8 instead of 16? Is max_processes equivalent to threads?

Yes.  I don't want to change the value.
Because, if I change the default value to 16, it will increase github load.
I think vim-plug default threads value is too big.

Ok I see. Thanks


Add form submit event and fix browser reload upon form submission.

This fixes two bad behaviors:

When you hit enter in a form, it may not submit at all.

If it does, it will cause the browser to reload the page and you'll lose state.

By adding a submit event for el-form, the consuming component can run relevant code when the form submits.

When you hit enter in a form, it may not submit at all

When you have more than one input in a form, hitting enter does not trigger submit. That's how native <form> works: https://jsfiddle.net/hqhebLr7/

If it does, it will cause the browser to reload the page and you'll lose state

Also, that's how native <form> works: https://jsfiddle.net/hqhebLr7/1/
As a UI library, Element should not modify native behaviors. If an end user find such behaviors not desirable, he / she can prevent them himself / herself: https://jsfiddle.net/5juyoewh/1/ .
In your issue #5907 :
<el-form @submit="send">
    ...
    <el-button @click="send">Send</button>
</el-form>

The submit event handler's not working because of this. So it should be @submit.native.prevent.

When you have more than one input in a form, hitting enter does not trigger submit. That's how native  works: https://jsfiddle.net/hqhebLr7/

That's true, but (1) you don't always only have one input, (2) it's highly undesirable in any SPA for a form to submit to the server as a traditional HTTP POST for the whole page.
You almost always want enter to validate the form and cause the default action to happen. In any SPA, you assuredly don't want the default browser behavior.
Try for example the github login page. Google login page. Signup page for Githab. Each one submits on enter. If you weren't typing your comment in a multi-line textbox, it too would submit on enter.

The submit event handler's not working because of this. So it should be @submit.native.prevent.

That's an option, but it leaves the default documentation to cause some pretty bad behavior. Here's an example directly from the Element docs:
https://jsfiddle.net/u8sqnofo/
I took out all but one field. If you fill out the form and hit enter, the whole page reloads.
That's native browser behavior, but for a single page app, you'd essentially never want it. And, there are almost no situations where tapping enter shouldn't activate a submit-like action. (I was quite surprised the default form examples didn't submit on enter.)

遇到同样的问题,排查了好久,只有一个el-input时居然会有这种奇怪的bug,表示有点不可思议

@yuyichen , that's because unless there's an  or  widget on the form, enter only triggers a form submission when there's one field.
Either way, a reasonable expectation is that enter should submit the form. A default button is just extra clarity.

What is the status of this? I'm using ^1.4.1 and I can't get the "enter" key to submit the form..

We'll keep the default behavior as is.

@Leopoldthecoder @kkinder

When you have more than one input in a form, hitting enter does not trigger submit. That's how native  works: https://jsfiddle.net/hqhebLr7/

I used to do it the simplest way I think, so I didn't have to write redundant click and keydown handlers. Only one submit handler is fine.
<form @submit.prevent="handleSubmit">
  <input>
  <textarea></textarea>
  <button type="submit">Done</button>
</form>

The browser would help you handle well, including inputs and textareas.

If you hit enter in textarea, it would cause a linebreak in it.
If you hit enter in the other place inside the form, it would just submit, no matter how many inputs are there.

See https://jsfiddle.net/ket34b9h/.
Unluckily, docs of element-ui never consider keydown events when doing form submits:
http://element.eleme.io/#/en-US/component/form
I think it would lead to a better user-experience if we listen on the keyboards.
Now I'm trying this in element-ui:
<el-form @submit.native.prevent="handleSubmit">
  <!-- fields -->
  <el-button type="primary" native-type="submit">Done</el-button>
</el-form>

@fritx thx your answer, it works👏🎉

Maybe the doc's demo  should be improved.

Maybe the doc's demo should be improved.


Renewals improvements

Resolves a few issues with the Acme Manager:

Purges domains if status is failed and is expired
Adds logging to renewals so we don't need to run things manually
Adds pre renewal check Proc which reads a lock file from the system
Upgades puma to resolve critical issues (https://github.com/krystal/acme-manager/security/dependabot)

LGTM 👍


Create interactive boxes to enable clearer user journeys

Still in progress, todo the following:

[x] Add additional description to each of the drop downs to describe what is contained in each of the notebooks
[x] Clear up some of the text surronding
[x] Change title for dropdown section (Not keen on notebook garden - open to suggestions)
[x] Double check notebooks are relevant for each section
[x] Play with formatting in Paperspace

For all of the examples or just for those two? If I'm being honest, I'm not a huge fan of the way the tables look.
 Fine-tune our models on your datasets
Here are our notebooks on how to use datasets to fine-tune HuggingFace checkpoints.

Content
Location

Check out how to fine-tune a pre-trained wav2vec 2.0 model with PyTorch on the IPU.
audio-processing/wav2vec2-fine-tuning-checkpoint.ipynb

This notebook will show you how to preprocess the data and fine-tune a pretrained model on image classification.
image-classification/image-classification.ipynb

Natural Language Processing
Our NLP notebooks will teach you how to fine-tuning your models for a range of different tasks. Show how to preprocess the data and fine-tune a pretrained model on a range of datasets including WMT, SWAG, SQUAD and many more in our NLP notebooks:
    natural-language-processing/
        └───translation.ipynb
        └───other-use-cases/
            └─── multiple_choice.ipynb
            └─── question_answering.ipynb
            └─── text_classification.ipynb
            └─── token_classification.ipynb


Resurection

I am interested in resurrecting this project. Any input would be welcomed.

@colinluthier I am happy to hear it. What are your plans? I could add you as a collaborator if that helps.

Hey! I am willing to help either. However please note that I'm not a developer myself. But I have some coding experience.

As far as I can see there are a few things one could do:
Current Version / Testing / Maintenance

Test if the current version of PicoBrew server still works with Zymatic machines
Make it easier to do spoofing of www.picobrew.com
Test current version of BeerXML recipes from picobrew.com for compatibility

New Features:

Port/Extend the server for the other PicoBrew machines

record/document HTTP communication of other/newer machine with Wireshark
this might not be feasible for all newer PicoBrew machines
newer machines use barcodes for Picopacks. As far as I can tell there is no way to fake them/circumvent them
the new "brew your own recipes" mode might be able to use this code

Extend UI

many things are possible :-)

Upgrade to Python3

I have a Pico C, PicoFerm and a PicoStill. I have captured various sessions using WireShark. The last time I turned on my Pico C, it did a firmware upgrade. The response to the request was in test/plain, but I don't know how it can be decode. I don't think it is base64 encoded. It starts with #155864.0,72168d866990f8a46228df7113cb82ce|f44e0320717a0120697a01206b7a01206f7a01206d7a01206f7a01200...
Anyway, I am a software developer and I would be happy to help.

Here's everything I've gathered so far on the Pico C / Picostill. Hope it helps!
The Picostill was relatively easy to connect to. Once it's powered on it will emit an AP "Picostill_..." with a password of 12345678. Once connected go to <IP_ADDRESS> and enter in your network credentials and the Picostill with join your network. After that you can either enter in the Picostill IP address and be brought to the web UI and turn the pump/sensors on, or send GET requests to the following endpoints:
/sensors : turns the sensors on
/fanon : fan on
/fanoff : fan off
/start : turns the pump on
/end : turns the pump off
/stillstate : state of the still
/data : comma separated data stream in the following format "#coil_inlet_temp, coil_outlet_temp, pot_temp, ambient_temp, PSI, 1, 1, 1, None#"
The data updates every 2 seconds (confirmed by listening on the serial pins) once the /sensors route has been requested.
The Pico itself is much more complicated. The DNS spoofing still works (thanks @hotzenklotz !).
When the Pico joins the network it will send a request to '/API/pico/register?uid=yourUIDhere'
Then after it receives the proper response it will send another request to '/API/pico/picoChangeState?picoUID=yourUIDhere&state=2'
Unfortunately this is where I'm stuck, as I discovered the third endpoint:
'/API/pico/error?uid=yourUIDhere&code=4&rfid=
I read these routes from the serial pins and confirmed they were hitting the spoofed DNS.
I haven't looked at the Picoferm yet, but I'll definitely take a look.

I installed today and tried to take it through a run through on OSX and Windows. In both cases, when I loaded the xml, it bit the dust. I can see that the xml uploaded, so it seems to fail at verification. Might be a changed in the export of the recipe on the Piocbrew site, as I grabbed the file today.

I had the same experience firing this up today. It seems to throw a 500 when invoking the validate after upload (which is successful; the recipe ends up in the recipe folder) or any template page, like recipes.html. The results are the same in the heroku image.

Running on http://<IP_ADDRESS>:5000/
<IP_ADDRESS> - - [15/Apr/2020 23:44:25] "GET / HTTP/1.1" 200 -
<IP_ADDRESS> - - [15/Apr/2020 23:44:25] "GET /static/img/favicon-32x32.png HTTP/1.1" 200 -
<IP_ADDRESS> - - [15/Apr/2020 23:44:31] "POST /upload HTTP/1.1" 302 -
<IP_ADDRESS> - - [15/Apr/2020 23:44:31] "GET /validate HTTP/1.1" 500 -
#me just manually pointing to /recipes
<IP_ADDRESS> - - [15/Apr/2020 23:44:58] "GET /recipes HTTP/1.1" 500 -

@vfrdirk @fotoapparat Thanks for letting me now. Do you mind sharing your recipes to see what is going on?

OBK Belgian Table_recipe_xml.xml.zip
See attached:

I used a recipe of my own, that recipe with a  tag set encapsulating the actual instruction set (as seen in the Wiki FAQ), a sample recipe I found in your pybeerxml repo, and a fake xml file I made consisting only of FARTFART and the results were exactly the same each and every time. No parsing error or anything like that, just instant 500 error.
It has me thinking that maybe one of the dependency programs has changed in the intervening years and no longer responds to your code in the same way, but I'm an API and DevOps automation guy and not a Python/Software guy.

I'll have a look at the system tomorrow and see what I needs updating / fixing.

Thanks! You're the obvious expert here, but I've been fiddling with it as an exercise to learn more Python. A colleague suggested a logging module, so I added 'import logging' to server.py and was suddenly greeted with an exception error after uploading a (real) recipe file. Maybe this will help. I really appreciate you taking a look. --Dirk
ERROR:main:Exception on /validate [GET]
Traceback (most recent call last):
File "/home/dirk/.local/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/home/dirk/.local/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/dirk/.local/lib/python2.7/site-packages/flask_cors.py", line 272, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "/home/dirk/.local/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/dirk/.local/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/home/dirk/.local/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functionsrule.endpoint
File "/home/dirk/picobrew-server/blueprints/frontend.py", line 58, in validate
recipe = get_recipe(file)[0]
File "/home/dirk/picobrew-server/blueprints/frontend.py", line 33, in get_recipe
return parser.parse(file)
File "/home/dirk/picobrew-server/beerxml/picobrew_parser.py", line 11, in parse
recipes = super(PicoBrewParser, self).parse(xml_file)
File "/home/dirk/.local/lib/python2.7/site-packages/pybeerxml/parser.py", line 95, in parse
self.nodes_to_object(mash_node, mash)
File "/home/dirk/.local/lib/python2.7/site-packages/pybeerxml/parser.py", line 18, in nodes_to_object
assert(len(list(node)) > 1)
AssertionError

I looked into it. Looks like PicoBrew made some changes to the BeerXML files. Earlier version had a PROGRAM tag outlining the heating/timing steps required for the machine operation. This tag was renamed to ZYMATIC in all the recipes that I could find. (Not sure if this is machine dependent or equal for all PicoBrew machines):
<ZYMATIC>
      <MASH_TEMP>67</MASH_TEMP>
      <MASH_TIME>120</MASH_TIME>
      <BOIL_TEMP>97</BOIL_TEMP>
      <STEP>
        <NAME>Heat to Dough In</NAME>
        <TEMP>39</TEMP>
        <TIME>0</TIME>
        <LOCATION>PassThrough</LOCATION>
        <DRAIN>0</DRAIN>
      </STEP>
...

I also update the program to Python 3, updated all dependencies and fix some bugs. The changes are still on separate branch: py3 See this https://github.com/hotzenklotz/picobrew-server/pull/3
@vfrdirk @fotoapparat Do you mind testing this version?
I also created a proper API documentation on Postman:
https://documenter.getpostman.com/view/234053/Szf54VEX?version=93783194-dcee-4bb2-8f19-f25ab6c6d411
I have only done API testing on laptop yet. I am hoping to do a proper system test with my Zymatic machine. (Perhaps see if there are any differences with a more up-to.date firmware)

I've been looking at it since I saw the PR come through. I'm having a few problems with all the Python 3 stuff, since it's new to me. There were some bizarre errors that were popping up for me involving what appeared to be typos in some of the statements. I cleared those up and was able to get the server up on the py3 branch of code, but still getting 500 errors. I'm going to make a new issue and I'll paste the stacktrace.

Many thanks for the work on the updated server! I made some edits to the Wiki pages to clean up some formatting, update a couple of missing bits of information and update for the Python 3 stuff. I think it's all accurate, but won't be offended if you revert. The Readme and the Wiki claim Python 3.6 and 3.7 are required, so I didn't change that since I'm not sure which is accurate.
I'll see if there's an easier way to do the DNS spoofing. I use a Pi-Hole at home, and thought that would be a way to redirect a url, but that's not panning out the way I had hoped.

@vfrdirk Thanks. Feel free to open a pull request with your changes, so that I can have a look at them. It is always good to have the Readme/wiki up-to-date.
You need Python 3.6 or above.

I'm willing to help here too.  I'm a Zymatic owner.  One question for @hotzenklotz -- the firmware version you list in the README is 1.18.  My machine has 1.1.14 and as far as I can tell, that's the newest one available.  Is there an undocumented firmware that I'm missing?

Here is, sadly, a very good reason to reverse engineer the server:
https://thespoon.tech/rest-in-peace-picobrew/?fbclid=IwAR3ZdbTnu2PDJ0yLIwaSxT7NKqXhs-_rb_2bbJ92ZBD5IqrsgsyWBxW2ugA
I own a Pico C, PicoStill and a PicoFerm. I am also a software developer and willing to help.

Had anyone captured the Z protocol? Can you give me steps. I am better at writing software than this IT type stuff

I am 100% on board with helping this succeed! I have a C, Still, and Ferm I would love to see still work after the doors close..

I do some captures with a Z in 2-3 weeks, but I won't have any grain, so I would just have to run it empty if that's ok.

@shettich I think you should be fine as long as you don't run it dry - just make sure to put water in your keg as you would a normal recipe.

I've installed worksheet Wireshark, but can't figure out how to filter out the picobrew communication.

This is a little outside my area of expertise, so I could be doing something wrong, but I set up my laptop between the Z and the rest of the network so I could sniff everything going by.  As far as I can tell, all communication between the Z and Picobrew is SSL encrypted, so I couldn't really see anything at all.

  The next step would be to MiTM it and see if they fail to validate the server cert (if that's true, you could have the MiTM proxy record the session).  If they do validate the cert, uh, it's either wait to see if they will release the API, or try to hack the firmware :(

I haven't tried the MitM approach yet - if you've got a set up to do that, that'd be awesome.
In the mean time, I was afraid we might have to go the latter route and that route doesn't look trivial either.  I popped the cover off of my Z to see if there were any hidden easy-to-access USB connectors inside and it doesn't look like it.  It looks like it's still an Arduino chip (esp32-wroom-32d), it's on a custom board.  Unlike the USB connector on the Zymatic, there's no immediately obvious way to just plug in a cable and instantly access the Arduino.  I did notice there is a jumper block with pins on the board labeled "TX", "RX", and "GND", so that all hope may not be lost.

I am willing to develop an instruction manual to help users setup their computers to work locally with their machines. I have both Mac and PC. Just need guidance from the experts here. Just let me know.

mitmproxy appears to work for the Z - I'll probably try to capture some flows today.

mitmproxy appears to work for the Z - I'll probably try to capture some flows today.

That's great news. Does that mean the Z isn't validating the SSL cert? Can you give me an idea of how to reproduce so I can assist in grabbing traffic?

@bendavis It does not appear to validate the SSL cert.  Reproducing should be pretty easy - I just installed mitmproxy on my MacbookPro.  I connected the laptop my network via ethernet and used the internet sharing feature to create a wifi network, and then use packet filtering to direct all SSL traffic through mitmproxy.  It's useful to use the mitmweb or mitmproxy tool to verify things are working, but you'll probably want to use mitmdump when you start doing actual captures.  The documentation on the mitmproxy site is pretty good so that's probably the best place to start.
One of my temperature sensors in the Z apparently stopped working correctly a week ago, so I'm not sure I can get any captures that require heating the water because the Z freaks out that the temperature difference of the heating element is 50 degrees lower than the temperatures recorded by the other sensors.  No idea how I'll get this sensor replaced at this point.
Another thing someone ought to capture is a firmware download.  I discovered that if you press in the knob and turn on the Picobrew, it launches a service menu.  One of the menus had a Factory Reset option.  That option will trigger resetting the network settings and also a firmware download.
We should definitely get these captures ASAP though, a colleague pointed me at an Auction where someone is liquidating everything in the Picobrew warehouse, so this doesn't give me confidence that whoever bought Picobrew intends to continue operating the services.

One question for @hotzenklotz -- the firmware version you list in the README is 1.18. My machine has 1.1.14 and as far as I can tell, that's the newest one available. Is there an undocumented firmware that I'm missing?

Yes, I meant 1.1.8. Will correct that.

mitmproxy appears to work for the Z - I'll probably try to capture some flows today.
That sounds quite interesting. Thanks for pointing that out. Looking forward to hearing more about this.

@everyone I am happy to add more contributors to the GitHub project. Let me know if you interested and want to help out.

Does anyone have any contacts to employees of the Picobrew engineering team? Perhaps, the could leak some documentation/firmware etc.

I have access to some of the firmware versions if needed
On Mon, 4 May 2020 at 19:12, Brett Lucey<EMAIL_ADDRESS>wrote:

@bendavis https://github.com/bendavis It does not appear to validate
the SSL cert. Reproducing should be pretty easy - I just installed
mitmproxy on my MacbookPro. I connected the laptop my network via ethernet
and used the internet sharing feature to create a wifi network, and then
use packet filtering to direct all SSL traffic through mitmproxy. It's
useful to use the mitmweb or mitmproxy tool to verify things are working,
but you'll probably want to use mitmdump when you start doing actual
captures. The documentation on the mitmproxy site is pretty good so that's
probably the best place to start.
One of my temperature sensors in the Z apparently stopped working
correctly a week ago, so I'm not sure I can get any captures that require
heating the water because the Z freaks out that the temperature difference
of the heating element is 50 degrees lower than the temperatures recorded
by the other sensors. No idea how I'll get this sensor replaced at this
point.
Another thing someone ought to capture is a firmware download. I
discovered that if you press in the knob and turn on the Picobrew, it
launches a service menu. One of the menus had a Factory Reset option. That
option will trigger resetting the network settings and also a firmware
download.
We should definitely get these captures ASAP though, a colleague pointed
me at an Auction where someone is liquidating everything in the Picobrew
warehouse, so this doesn't give me confidence that whoever bought Picobrew
intends to continue operating the services.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/hotzenklotz/picobrew-server/issues/2#issuecomment-623621108,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ALOAZ2J7UAZH4EKLRHTHAYTRP4AQPANCNFSM4LREVNOA
.

--

Colm McGoldrick

I am interested in helping out by testing the uploads to my Zymatic.
I was able to get the cleaning recipe to send to the Zymatic.  I am just not able to send any of my  PicoBrew recipes.

@hotzenklotz I thought I read in a news article that all support staff got let go last week and I don't really know the state of the remaining staff.  I'm not sure how much people will feel like being contacted right now.
It seems as though the temperature sensor for the the heat element in the Pico S is interchangeable with the Z so I have a working Z again now.  I'm going to try to capture some flows again today.
@Blackjackbuyer Are you referring to the source or the binaries of the firmware?

BIN’s.
I seen comments on twitter previously about success in reverse engineering
the Picobrew C. I was trying to DM the account to see if they could give us
any pointers.
On Mon, 4 May 2020 at 21:03, Brett Lucey<EMAIL_ADDRESS>wrote:

@hotzenklotz https://github.com/hotzenklotz I thought I read in a news
article that all support staff got let go last week and I don't really know
the state of the remaining staff. I'm not sure how much people will feel
like being contacted right now.
It seems as though the temperature sensor for the the heat element in the
Pico S is interchangeable with the Z so I have a working Z again now. I'm
going to try to capture some flows again today.
@Blackjackbuyer https://github.com/Blackjackbuyer Are you referring to
the source or the binaries of the firmware?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/hotzenklotz/picobrew-server/issues/2#issuecomment-623676315,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ALOAZ2PWZCDOAU2Z3NUMP2DRP4NRRANCNFSM4LREVNOA
.

--

Colm McGoldrick

I created a video to explain how to capture PicoBrew devices network traffic using Wireshark on a Mac. This method can be used for devices that use unencrypted network traffic like the Pico C:
https://youtu.be/tuVkTUcV6Dw

Thanks @blucey, I got a vm capturing a cleaning session right now on my Z using mitmproxy and arpspoof.
@Blackjackbuyer which firmware bins do you have? For the Z? If so I'd love to disassemble those suckers.
There's a private group of hackers/programmers/etc all trying to do this on FB https://www.facebook.com/groups/PicoBrewingTaskForce. Even some people trying to figure out a replacement part path.

@hotzenklotz - Tom, I emailed you a few years ago about the Pico.. I pushed my repo to GitHub that gives live graphing/session history/manual recipe creating.. feel free to use any of that:
https://github.com/chiefwigms/picobrew_pico

Hi guys, FB was used as a tool to reach out. Everything is stored on shared spaces and available to all. Teams for hw, sw, recipes etc etc. Collaboration via Slack. Weekly meetings on Zoom.
The aim is to secure a future life for our machines, with community servers up and running, supporting the entire range of PB hardware.
Any chance you may want to take part in this?

Hi guys, FB was used as a tool to reach out. Everything is stored on shared spaces and available to all. Teams for hw, sw, recipes etc etc. Collaboration via Slack. Weekly meetings on Zoom.
The aim is to secure a future life for our machines, with community servers up and running, supporting the entire range of PB hardware.
Any chance you may want to take part in this?

I'd like to. :)

Hi Pete:
Thank you, I’ll look at this and get going.
Tom
Tom Schleis, MS, RPh
Schleis Professional Services
<EMAIL_ADDRESS><EMAIL_ADDRESS>From: Pete<EMAIL_ADDRESS>Sent: Monday, May 4, 2020 2:35 PM
To: hotzenklotz/picobrew-server<EMAIL_ADDRESS>Cc: TomKriek99<EMAIL_ADDRESS>Comment<EMAIL_ADDRESS>Subject: Re: [hotzenklotz/picobrew-server] Resurection (#2)
@hotzenklotz https://github.com/hotzenklotz  - Tom, I emailed you a few years ago about the Pico.. I pushed my repo to GitHub that gives live graphing/session history/manual recipe creating.. feel free to use any of that:
https://github.com/chiefwigms/picobrew_pico
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub https://github.com/hotzenklotz/picobrew-server/issues/2#issuecomment-623719881 , or unsubscribe https://github.com/notifications/unsubscribe-auth/APNYWODFW3CU4CFIXMR7HMDRP4YHLANCNFSM4LREVNOA .  https://github.com/notifications/beacon/APNYWOEVFFM4ZJXPHXQ4LTLRP4YHLA5CNFSM4LREVNOKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEUWTLSI.gif

Hi danyou:
I have some very basic questions to get me to where I can start helping; first writing a guide for non-programmers, then help with loading recipes from software programs. Are you using a PC or Mac? Could you tell me how you went about setting up the server and connecting? I downloaded Python and the hotzenklotz picobrew-server files, and then am stuck. Here are my questions:

Where do I enter the commands:

Pip install -r requirements
Sudo python server.py
Neither the command line or Python shell work.

I am assuming once this is done, I can go to the web browser and type in http://localhost:5000 and the upload page will display?
How did you set up your DNS spoofing? Did you connect your computer through an ad-hoc network and modify the host files, specify a new DNS server, or list a single domain and IP address? Which will be easiest for newcomers to learn? I will document this so these questions only need to be asked once. (I got a little further here with the Mac, following the procedure from hotzenklotz.)
I assume you are connecting your Zymatic via WiFi and not direct?

Sorry for all the questions, most of my programming was in Basic and database languages, so I’m out of my league here.
Thank you.
Tom
From: danyou<EMAIL_ADDRESS>Sent: Monday, May 4, 2020 12:15 PM
To: hotzenklotz/picobrew-server<EMAIL_ADDRESS>Cc: TomKriek99<EMAIL_ADDRESS>Comment<EMAIL_ADDRESS>Subject: Re: [hotzenklotz/picobrew-server] Resurection (#2)
I am interested in helping out by testing the uploads to my Zymatic.
I was able to get the cleaning recipe to send to the Zymatic. I am just not able to send any of my PicoBrew recipes.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub https://github.com/hotzenklotz/picobrew-server/issues/2#issuecomment-623652512 , or unsubscribe https://github.com/notifications/unsubscribe-auth/APNYWOGCB55TY3WXVDW2DA3RP4H4BANCNFSM4LREVNOA .  https://github.com/notifications/beacon/APNYWOGQIA5W2ZYPSO5KXMLRP4H4BA5CNFSM4LREVNOKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEUWC5IA.gif

Hi guys, FB was used as a tool to reach out. Everything is stored on shared spaces and available to all. Teams for hw, sw, recipes etc etc. Collaboration via Slack. Weekly meetings on Zoom.
The aim is to secure a future life for our machines, with community servers up and running, supporting the entire range of PB hardware.
Any chance you may want to take part in this?

I asked to join a few hrs ago

Hi guys, FB was used as a tool to reach out. Everything is stored on shared spaces and available to all. Teams for hw, sw, recipes etc etc. Collaboration via Slack. Weekly meetings on Zoom.
The aim is to secure a future life for our machines, with community servers up and running, supporting the entire range of PB hardware.
Any chance you may want to take part in this?

@robhercz  I put in a request to join the Facebook Group yesterday.

@TomKriek99 Hi Tom, For what it’s worth this is my setup.
Using Win10 PC.
1.
I installed python 3.7.7 with win x86 installer.
Installed custom and kept all defaults, with the following exceptions:
-Install for all users
-update the path.(essentially simplify running from cmd window)
Extracted to C:\PicoBrew\picobrew-server-master.
Open cmd Run as Administrator.
cd to C:\PicoBrew\picobrew-server-master
pip install -r requirements.txt
(we updated the path during python install)
Updated server.py last line to:
app.run(host="<IP_ADDRESS>", port=80)
Run server with:
python server.py

I changed directly to port 80 as Zymatic will only connect via http port 80.

I added the following to my host file:
<IP_ADDRESS>  picobrew.com
I enabled ICS to the network interface, the Zymatic was connected to.  This will provide DHCP to the Zymatic.  If you ping picobrew.com it will only resolve to <IP_ADDRESS> after the NIC is up( when the Zymatic is on).
Not sure what the most straightforward way should be.  A better option may be to use a simple home router between the Zymatic and the windows pc, to not rely on the Zymatic being on.

I opened a few new issues to discuss/focus on certain aspects in more detail:

Add Support for Pico S/C/Pro machines
Add Support for Z Machines
Document Usage Instructions

Thinking a bit longer term.  A possible way to revive the various devices for non-tech users would be to build:
A) a cheap arduino based dongle with ethernet and bluetooth.  It could run the server software, and accept commands from...
B) a simple android/ios app to upload beerxml files to the dongle
It would pretty much convert them from ethernet/wifi internet devices to local bluetooth devices.

Danyou-thanks. I have the server up, will try the network tomorrow.

When I run "Flask run --Port 80...…" I get a warning this is a development server....unable to find flask application, use Flask_app=flask.app:name. So unable to test upload for now.

@TomKriek99 The startup instructions and installation has changed in the latest release to make it more streamlined. Here are the instructions again:
// Download and install
pip install picobrew_server

// Start the server in production mode on port 80
// Windows
set FLASK_APP=picobrew_server
flask run --port 80 --host <IP_ADDRESS>

// OSX / Linux
export FLASK_APP=picobrew_server
flask run --port 80 --host <IP_ADDRESS>

Here is a detailed set of installation instructions. I am not able to upload them, so however you wish to handle.
Picobrew Zymatic Detailed Server Installation Instructions.pdf


Discard invalid _geo values

Pull Request
Related issue
One way to fix #160
What does this PR do?

discards values for _geo filed that aren't GeoPoint - this usually means null values, but MeiliSearch will throw an error for any value that doesn't conform to the format, so this causes the extension to ignore any non-geopoint values for this field.

PR checklist
Please check if your PR fulfills the following requirements:

[x] Does this PR fix an existing issue, or have you listed the changes applied in the PR description (and why they are needed)?
[x] Have you read the contributing guidelines?
[x] Have you made sure that the title is accurate and descriptive of the changes?

Thank you so much for contributing to Meilisearch!

done, thanks!

bors merge


Es.index.read.missing.as.empty is not working with multiple indices

Elasticsearch version: 2.2.0
JVM version: 1.8.0_73
OS version: Linux 4.1.17-22.30.amzn1.x86_64
Description of the problem including expected versus actual behavior:
This Issue has been discussed here.

I've added some tests and polished the code a bit in master. A couple of remarks:

if a space is used, the resulting query is invalid which is no good.
in ES 2.2, a non existing index will trigger an exception in the logs however that's expected - this is teh result of every index check (HEAD index/type). ES-Hadoop however behaves correctly.

Please try out the dev build when you have time.

Closing the issue - if the issue persists, please open a new issue referring this one.
Thanks

@costin hi costin. I've met a relevant problem. During multiple indices search, by restful API, i can set
"ignore_unavailable" option to search only those exists indices. For example, to search "index-1,index-2,index-3,index-4", when "index-3" is missing, the result will contain data from "index-1,index-2,index4". However in es-hadoop, i can't find relevant options. If some of the index missed, the whole read will either fail or return empty by setting "Es.index.read.missing.as.empty".


Correct fix of long comment

What's done:

[x] Changed logic of the fix long comment
[x ] Updated test
[x] Closes #923

Also I recommend to merge this PR after https://github.com/cqfn/diKTat/pull/932, since #932 affects to the common logic of this rule


Magic symbols for tracking untyped

Adds new magic symbols that denote sources of untyped, and updates a few places to use them along with types::untyped rather than types::untypedUntracked. If the untyped blames to <root>#<none> is still large after this, we can add symbols to more places where untyped is used.
Example with running sorbet with the --track-untyped flag on the following code:
# typed: true
class TestUntyped
  def test_shaped
    b = {
      1 => 2,
      2 => 3,
      foo: :bar
    }
    b[1].bar
  end

  def test_super
    a = super
    a.foo
  end
end

[{"path":"<none>","package":"<none>","owner":"<Magic>::<UntypedSource>","name":"<HashOfUntyped>","count":2},
{"path":"<none>","package":"<none>","owner":"<Magic>::<UntypedSource>","name":"<super>","count":2}

Motivation

Better tracking of untyped for cases that currently blame to root#none
Test plan

Existing tests + test on pay servers.

We have a policy of testing changes to Sorbet against Stripe's codebase before
merging them. I've kicked off a test run for the current PR.  When the build
finishes, I'll share with you whether or how it failed. Thanks!
Stripe employees can see the build results here:
→ https://go/builds/bui_O9fjlkSusxDM3R
→ https://go/builds/bui_O9fjMw2uPzweLV
→ https://go/builds/bui_O9fj3C56gOkSqt

We have a policy of testing changes to Sorbet against Stripe's codebase before
merging them. I've kicked off a test run for the current PR.  When the build
finishes, I'll share with you whether or how it failed. Thanks!
Stripe employees can see the build results here:
→ https://go/builds/bui_O9hq1CEerLxwU4
→ https://go/builds/bui_O9hq90obIbw6Yf
→ https://go/builds/bui_O9hqqO1qQY6mBI

One thing you may want to consider adding is a method like Types::untypedErrorRecovery. You could either build it with a specific symbol to blame to, or leave it blaming to <none>, but the benefit would be that people can do a quick grep of untypedUntracked to see call sites that we've looked at and decided we didn't need a blame for. It would also make it more clear to people trying to cargo-cult that they shouldn't use a bare untypedUntracked in new code.

Some other usages of untypedUntracked we may want to include:

https://github.com/sorbet/sorbet/blob/master/infer/environment.cc#L1342
https://github.com/sorbet/sorbet/blob/master/infer/environment.cc#L1363
https://github.com/sorbet/sorbet/blob/master/infer/environment.cc#L1524
T.unsafe (if this does not already blame to itself)
https://github.com/sorbet/sorbet/blob/master/core/types/types.cc#L1027
https://github.com/sorbet/sorbet/blob/master/core/types/types.cc#L1086C3
https://github.com/sorbet/sorbet/blob/master/core/types/calls.cc#L3294
https://github.com/sorbet/sorbet/blob/master/core/types/calls.cc#L3911

Test plan
Existing tests

Note that this is not covered by existing tests, because we do not run any tests with the build configuration required to get untyped blames working. It will be covered by the build system, but none of the existing testdata / CLI tests will fail if this is doing something wrong or broken.

^ that's fine, btw, I just wanted to be clear on it.

untypedErrorRecovery is a good idea. The one edge case I can think of is that in a file that's a lower typed level than the error; ex. if we do some error recovery for a typed: strict error, in a typed: true file, that will still contribute to the untyped counts, and is something actionable to fix. We can just manually change those to use a more precise blame, so not an issue, just something to note.

I'm fine if you don't want to include those in this PR, but I think we should probably just do them soon, so we don't have to revisit this.

I had some of those my list to track, I just wasn't fully sure which were relevant, and didn't want to block getting this PR up for review on those. I'll include them in this PR, shouldn't add much to the diff.

We have a policy of testing changes to Sorbet against Stripe's codebase before
merging them. I've kicked off a test run for the current PR.  When the build
finishes, I'll share with you whether or how it failed. Thanks!
Stripe employees can see the build results here:
→ https://go/builds/bui_OAPB1sR9nfk5R9
→ https://go/builds/bui_OAPBpymHCqfSZ2
→ https://go/builds/bui_OAPBlo3BZ1uxcN


OVH key not valid for all providers in namespace

Thank you for reporting an issue.
The key added for ovh in #346 / #347 is only valid for the provider ovh/ovh, but not for the other providers in the ovh namespace (ovh/eyaml, ovh/mimirtool, ovh/mixtool), leading to them beeing uninstallable:
Error while installing ovh/mimirtool v0.1.2: authentication signature from unknown issuer

CC @rbeuque74
OpenTofu Version
OpenTofu v1.6.2
on linux_amd64

OpenTofu Configuration Files
terraform {
  required_providers {
    mimirtool = {
      source  = "ovh/mimirtool"
      version = "0.1.2"
    }
  }
}

Hello,
I will fix this


docs: fix typo in init.dart

Hi CanRau. Thanks a lot for your Merge Request, however it'll have to wait for a bit until I can integrate some kind of CLA bot. The code is dart_git is licensed under AGPL. However when publishing on the iOS store - it isn't clear if Apple they will allow GPL licensed code in the App Store.
There I'm going to need the copyright to be assigned to me so I can release GitJournal on the iOS store as a proprietary product. This whole thing sucks, but I would like to error on the safer side.
I'll try to set it up soon.

Oh interesting, didn't know that.
If you prefer you can just close it and fix it yourself, I don't care 🤷♂
It's of course good to have it for future PRs abs especially bigger ones 👍

Hello. I relicensed the entire project to be under Apache 2. Could you please rebase these changes? (It's just a button, but I need you to press it).
(I know I could just close this, but we may as well merge the first pull request made!)

I've changed the license to Apache2, so now this can be easily merged.

Sorry was a little off coding & GitHub lately 😰


Updated ' to "

Using existing command gave error:
C:\Users\visagarwal>az role assignment create --role "Storage Account Key Operator Service Role" --assignee 'https://vault.azure.net' --scope "/subscriptions/f1ee2647-e5d4-4c50-9e76-0a42f00dc90c/resourceGroups/My_Stuff/providers/Microsoft.Storage/storageAccounts/antarestest"
')' or ',' expected at position 35 in 'servicePrincipalNames/any(c:c eq ''https://vault.azure.net'')'.

@TheGrayFrost : Thanks for your contribution! The author(s) have been notified to review your proposed change.

#sign-off


Documentation about layers metadata and layer selection/filtering

What do you think @ohasselblad?

:+1:

looks super!! :+1:

Cool, I will merge it once windshaft is fixed and released. Thanks to both of you :smiley:


If image fails to save, training crashes

Lazy fix? Maybe....  Good design choice? Idk man, I just work here.

Hey! I have some questions :)
How often does this error happen, what exactly is the exception, and what system are you running on?

Error.txt
This should be the error it throws once it was crashing.
It happens once maybe around every 5 iterations, can't tell for sure. I suppose I could try and log each instance it does for you. I'm running on windows 10 64-bit and using conda with just your requirements on 3.10.

From the error: "PermissionError: [Errno 13] Permission denied"
This sounds like maybe another program has locked the file from being written. Had you opened that image in another program when it happened?

From the error: "PermissionError: [Errno 13] Permission denied"
This sounds like maybe another program has locked the file from being written. Had you opened that image in another program when it happened?

Nope, happens with it just training on it's own.


Prepare for community mealprep (10/30)

Tuesday, 10/30, 8pm -10pm
Message all Airbnb guests using this saved message.
Next Thursday we have a community mealprep at 8pm, and you're invited to come hang out with your housemates and invite friends. We'll buy the ingredients and cook together a big stew, then split the cost and divide up the leftovers which you can eat for the next few days. It's nutritious, fun, and cheap. Let us know if you'd like to come.

Create a google calendar appointment similar to the previous one, inviting the same people:
https://www.google.com/calendar/event?eid=NDJiOWUyc3ZzZzFzYWszbmZvcTY4aXZoN3Qgb2NvZWJtZ2R1ZjBxbG1oZzI5aDU4ZXQ5N2tAZw
Keep a schedule in https://github.com/invisible-college/arcology-private/wiki/MealPrep
along with a record of who has paid their share of the ingredients.
Post a sign in the entry way bulletin board, or ask someone in the house to make one.
Ask Sergio to tell you when the next mealprep after this will be.
Close this ticket when you've created a new ticket, using this one as a template, for the following week.

Don't forget to copy this issue into a new one, and close this one, as soon as Sergio tells you the day of the next mealprep.

i've messaged sergio but he hasn't responded yet. I'll ask Casay how he usually got in contact with Sergio

Sounds like you got a hold of him, thanks.
I'll close this and comment on the other ticket.


docs: update the readme to close out code snippet

What this PR does / why we need it:
Fix a small issue observed in the docs
Which issue(s) this PR fixes (optional, use fixes #<issue_number>(, fixes #<issue_number>, ...) format, where issue_number might be a GitHub issue, or a Jira story (OCM-xxxx):
Fixes #
Change type

[ ] New feature
[ ] Bug fix
[ ] Build
[ ] CI
[x] Documentation
[ ] Performance
[ ] Refactor
[ ] Style
[ ] Unit tests
[ ] Subsystem tests

Checklist

[ ] Subject and description added to both, commit and PR.
[ ] Relevant issues have been referenced.

@nirarg can you've a look?

Thank yo @machi1990 for adding this.
I tried to see the issue in the preview in github and couldn't see any issue, can you elaborate about the issue you saw?

Thank yo @machi1990 for adding this. I tried to see the issue in the preview in github and couldn't see any issue, can you elaborate about the issue you saw?

The issue is that the snippet wasn't properly closed out with '```' which is what this PR is adding; hard to see it on previews because these are smart enough to auto close them.

Thank yo @machi1990 for adding this. I tried to see the issue in the preview in github and couldn't see any issue, can you elaborate about the issue you saw?

The issue is that the snippet wasn't properly closed out with '```' which is what this PR is adding; hard to see it on previews because these are smart enough to auto close them.

There are other places in the file this should also be fixed, so please do the same in all places Also please add ticket and change the commit message to follow conventions

Thanks for noticing the other; I'll update them.
As for the JIRA ticket, I don't have the time to create a new one. I'll re-use the ticket that made me run onto this issue.


Chore/tracefoss 2701 database view to support sorting assets by count notifications

Hi @ds-ext-sceronik good job so far. Question:
Is it still necessary to provide the toDomain mapper from the assetAsBuiltEntity? As we only want to read data from the view, theoretically it could be removed.

Can we also use the view for the findById / existsById / getAssetsBychildId methods?


test client adds quotes around cookie value

The Werkzeug test Client adds double quotest around a cookie value. This means that if you set a cookie using set_cookie and then get the value of the cookie using the value property of the cookie you will get back a different value from the one you set.
I would expect the same value that I set with set_cookie to be returned when using the cookie.value property. But perhaps I am missing something here? I have added a test case that demonstrates the issue.
import unittest
from unittest import TestCase

from werkzeug.test import Client
from werkzeug.testapp import test_app
from werkzeug.wrappers import BaseResponse

class WerkzeugCookieTest(TestCase):

    def get_cookie_from_client(self, cookie_name, client):
        for cookie in client.cookie_jar:
            if cookie.name == cookie_name:
                return cookie

        return None

    def test_cookie(self):
        c = Client(test_app, BaseResponse)

        expected_cookie_contents = "This is the contents of the foo cookie."
        c.set_cookie('localhost', 'foo', expected_cookie_contents)

        #    code.interact(local=locals())

        actual_cookie = self.get_cookie_from_client('foo', c)
        self.assertEqual(expected_cookie_contents, actual_cookie.value)

if __name__ == '__main__':
    unittest.main()

When running the above test I get the following failure.
F
======================================================================
FAIL: test_cookie (__main__.WerkzeugCookieTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_werkzeug_cookie.py", line 27, in test_cookie
    self.assertEqual(expected_cookie_contents, actual_cookie.value)
AssertionError: 'This is the contents of the foo cookie.' != '"This is the contents of the foo cookie."'

----------------------------------------------------------------------
Ran 1 test in 0.001s

@davidism @ThiefMaster I would consider this answered (see my reply above). Close?

I know this thread is old, but still. This is more than a "question". Is the recommended pattern really... reassemble the cookie header and reparse it?
If so, it's insufficient. This issue is not limited to a poor TestClient/CookieJar API. Using the test client to generate a request with cookies and passing it through werkzeug itself results in the same double-quoting issue. And in my case it breaks the HMAC with secure-cookie.
Kind of surprising it's been around this long. Might have to open another issue.

(securecookie values end up quoted because securecookie uses a URL-ish style, with query parameters, and ? is not  one of the _legal_cookie_chars, probably per the spec)

The environ ends up looking like:
{'HTTP_COOKIE': 'cookie="\\"W7XGXxmUjl4kbkE0TWaFo4Oth50=?userid=NjAyNDQ3NA==&username=IlNsYXBvcnRlIg==\\""'
...

So test.Client uses cookielib/http.cookiejar in a really gnarly way. CookieJar's ad-hoc parsers interpret Werkzeug-style cookies as Netscape-style, so the values don't get quotes stripped off of them. Hence, the extra wrapping quotes.
Bit of trivia, if the cookie had a version attribute, the cookie with be seen as RFC2109, and had the quotes stripped. But that's neither here nor there, since no one would want to emit RFC2109 cookies these days.

Happy to consider a PR fixing this, but I don't think I understand the issue enough right now to fix it myself or mentor someone else at a sprint.
Maybe it would help to outline the expected behavior on both sides. How should client.set_cookie work? We're using cookie jar internally, and I don't think we can change that, so I'm not clear on how the custom get_cookie_from_client function should work if they're not expected to actually do the reverse of what set_cookie did. Is there actually an issue with the cookie value as seen by the WSGI application being tested, as opposed to just this custom function?

@davidism Thanks for reopening.

Is there actually an issue with the cookie value as seen by the WSGI application being tested, as opposed to just this custom function?

Yes, I'm seeing this behavior after calling set_cookie with the output of SecureCookie.serialize, then using the test client to issue a request to the WSGI app under test. The WSGI app fails to load the cookie because of the double quotes.

So is this a problem with secure cookie's implementation then? Is it not parsing valid cookie values? I'm just unclear what everything's supposed to do instead of quoting when quoting is needed.

I did not dig into this enough when it happened. And now I am fuzzy on the details. I think, but I am not sure, that I was trying to test a working flask application when I ran into this issue. In other words I had a flask application that used cookies and was working. But there was no test that used cookies. When I tried adding a test I ran into this problem.
If you take the original unit test above and change the cookie value to not contain spaces then the unit test will pass. I think I solved my issue by removing spaces from my cookie value. And then I stopped digging into the problem.
import unittest
from unittest import TestCase

from werkzeug.test import Client
from werkzeug.testapp import test_app
from werkzeug.wrappers import BaseResponse

class WerkzeugCookieTest(TestCase):

    def get_cookie_from_client(self, cookie_name, client):
        for cookie in client.cookie_jar:
            if cookie.name == cookie_name:
                return cookie

        return None

    def test_cookie(self):
        c = Client(test_app, BaseResponse)

        expected_cookie_contents = "No_spaces_in_cookie."
        c.set_cookie('localhost', 'foo', expected_cookie_contents)

        #    code.interact(local=locals())

        actual_cookie = self.get_cookie_from_client('foo', c)
        self.assertEqual(expected_cookie_contents, actual_cookie.value)

if __name__ == '__main__':
    unittest.main()

The Client.set_cookie method internally uses the dump_cookie method from http.werkzeug.

Playing around a bit with dump_cookie I can see that it is adding quotes around the cookie value if the cookie value contains spaces.
>>> from werkzeug.http import dump_cookie
>>> dump_cookie('foo',  "This is the contents of the foo cookie.")
'foo="This is the contents of the foo cookie."; Path=/'
>>> dump_cookie('bar',  "ThisCookieValueContainsNoSpaces.")
'bar=ThisCookieValueContainsNoSpaces.; Path=/'

dump_cookie is not the problem here, it's doing the correct thing by quoting values with unsafe characters. Any test code that wants to inspect the internals directly needs to reverse that and do parse_cookie.
I'm not clear why you were trying to inspect the internal results of set_cookie either, rather than testing a request that would read the cookie. In @mahmoud's case it seems to point to secure-cookie not doing the right thing. I'm trying to understand what is expected to change in Werkzeug.

The test client already provides a set_cookie method. What I was trying to do by poking around in the internals was to write a get_cookie method. That way you could use the test client to do a GET request against an endpoint and then check if cookies were being set correctly by just querying the test client.
The set_cookie method on the test client handles the case when you want to make a HTTP request with a given cookie set.
It would be nice if the test client also had a get_cookie method that could be used to get the value of a cookie after you had made a HTTP request.
In a browser you can inspect the cookies that are currently set. This is useful when you are manually testing things.
The get_cookie_from_client method above was my attempt at writing the get_cookie method.

@davidism not quite!
So dump_cookie has its opinion on what characters need to be quoted (without a citation), and it includes whitespace (per @treadup) and ?, per securecookie's usage. The most modern cookie RFC doesn't mention that ? needs to be quoted. To my knowledge, this is the recommended RFC for producing cookies, which brings me to the next point.
CookieJar is mostly useful for broad, backwards-compatible cookie handling. With a purely internal use like this, I think it might be overkill.
So to recap, my understanding:

secure-cookie isn't wrong to put ? in its cookie value.
dump_cookie isn't necessarily wrong to quote the characters it quotes. It's just following suit by being a little different in its own way.
If there's something that's most wrong about all this, it's using CookieJar as part of the test client API, if it is?

TLDR CookieJar interprets cookies generated by dump_cookie to be a different version of cookie than what was probably intended. It works most of the time, unless you use one of a particular set of characters. This small bug comes into focus due to the serialization format used by securecookie, a close friend of werkzeug's.

I vaguely remember dealing with some other issues around the internal cookie jar instance, and I remember being frustrated and confused by the cookie jar structure and implementation. So I'm not necessarily against removing cookie jar and improving this API.
Assuming we replace it with set_cookie and get_cookie methods that use some other internal data structure, how should the data be stored instead? CookieJar does provide handling of domains, paths, etc. (not sure how well).
There have been questions about the behavior provided by CookieJar before. For example, #1680 is currently open and wants to match the cookie domain with the host of the test request. I'm on the fence about whether that actually makes sense for tests, since it's basically testing the browser's sandboxing of cookies. Regardless of that decision, it indicates that people are probably using the cookie jar, for better or worse.

Well I'm not sure if set_cookie and get_cookie cover all the use cases. For example using the CookieJar you can iterate over all the cookies that are currently set. That is something that would not be covered by just set_cookie and get_cookie.

That's what I'm asking: what should the internal data structure be if CookieJar isn't working but people still want what it provides?
Note that client.cookie_jar, or the fact that it is a CookieJar, is not documented anywhere. So while I agree that getting all the cookies may be nice for some specific types of tests, as well as filtering by domain, etc., this all appears to be an internal implementation detail right now.

@mahmoud it looks like SecureCookie isn't using dump_cookie or parse_cookie directly, only indirectly when you go through the load_cookie and save_cookie methods that assume a Request or Response object. So it's fine that SecureCookie uses ?, but it's not fine if whatever is using that isn't deserializing the cookie header containing that value.

Right. Note that in this case whatever is using it is actually the same class on the server side of the WSGI application during a test run. I don't know when I'll make a reproducing case, but repro steps:

Manually serialize SecureCookie
Add to client with client.set_cookie('local', 'session', serialized_value)
Send a request to the WSGI app

And the WSGI app will fail to load the securecookie because the extra quotes causes the HMAC to fail.

I'm not really sure what a good data structure would be. But taking a look at https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie it almost feels like each cookie is a row in a relational database table.
We have a single table called COOKIE that has the columns COOKIE_NAME, COOKIE_VALUE, SECURE, HTTP_ONLY, MAX_AGE, etc. One column for each attribute.
I'm not saying that you should use say SQLite to store this but if you did it would allow users to perform any kind of query against the cookie table they wanted.

Perhaps a plain association list. The key could be the cookie_name or perhaps (domain, cookie_name) tuple. The value could be either a tuple or a dict containing all of the cookie attributes.

I'll be working on this

OK, I started working on this again, and while I think a refactor is needed, I don't think it's going to "solve" any of the issues here.
Our current use of CookieJar is really convoluted. CookieJar is designed for urllib.request, not for a WSGI environ. We jump through a bunch of hoops to adapt it, there's a lot of encoding back and forth. So refactoring that can remove complexity.
The issues here are more about understanding the difference between client and application, rather than an issue with the current implementation. The test client is a client, it's taking the place of a browser or script making requests. So the cookies it sees and works with are the encoded values, the format that the HTTP Cookie spec requires for the header value. That means special characters are escaped, quotes are added, etc. If you're looking at the items in client.cookie_jar, you need to test against what you expect the client to have, not the decoded value that was originally set in the app code. And you need to set values that you expect the client to set.
It's a confusing API right now, because there's public API for set_cookie and delete_cookie, which match how the app works with cookies rather than the browser, but there's no get_cookie (and cookie_jar isn't public) to do the same. And should get_cookie return the original value, or the value that the browser will see? And really, most cookies should be opaque to the browser anyway, given their lack of security otherwise, so the tests should really be about setting a cookie in one request then getting it in another, not looking at it from the client side.

I would argue that the current API is appropriate for a test client. Actual clients should not be interacting with cookies, so getting a cookie would not represent normal behavior. Reading the value of a cookie and making assertions is a poor test. It just proves that the cookie has a value and not that the call that requires the cookie in a dilutive transaction will use it properly. I see checking the value of a cookie in a test the same as checking the value of a "private" object attribute. It's a poor way to test as it does not test that the code actually is working. I can definitely see the value in setting a cookie and deleting a cookie to ensure the Flask app properly handles an invalid or missing cookie respectively.

#2637 removes use of http.cookiejar, adds a get_cookie method, and adds decoded_key and decoded_value attributes to the returned cookie objects.


Fixes Configuration caching issues

Using versions: [Kotlin:1.4-M3, Gradle:6.5, AGP 4.1 beta 04], I could detect some issues when running instant execution:
428 problems were found reusing the configuration cache, 4 of which seem unique.
- field '$disableIncrementalCompilationTaskProvider' from type 'com.squareup.hephaestus.plugin.HephaestusPlugin$disableIncrementalKotlinCompilation$disableIncrementalCompilationAction$1$1': cannot deserialize object of type 'org.gradle.api.Task' as these are not supported with the configuration cache.
  See https://docs.gradle.org/6.6-rc-1/userguide/configuration_cache.html#config_cache:requirements:task_access
- field '$disableIncrementalCompilationTaskProvider' from type 'com.squareup.hephaestus.plugin.HephaestusPlugin$disableIncrementalKotlinCompilation$disableIncrementalCompilationAction$1$1': value 'undefined' is not assignable to 'org.gradle.api.tasks.TaskProvider'
- field '$project' from type 'com.squareup.hephaestus.plugin.HephaestusPlugin$disableIncrementalKotlinCompilation$disableIncrementalCompilationAction$1': cannot deserialize object of type 'org.gradle.api.Project' as these are not supported with the configuration cache.
  See https://docs.gradle.org/6.6-rc-1/userguide/configuration_cache.html#config_cache:requirements:disallowed_types
- field '$project' from type 'com.squareup.hephaestus.plugin.HephaestusPlugin$disablePreciseJavaTracking$1': cannot deserialize object of type 'org.gradle.api.Project' as these are not supported with the configuration cache.
  See https://docs.gradle.org/6.6-rc-1/userguide/configuration_cache.html#config_cache:requirements:disallowed_types

This PR fixes the various issues. Thx to @bamboo for the guidance

 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.Stephane Nicolas seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.You have signed the CLA already but the status is still pending? Let us recheck it.

Still testing.

Tested and confirmed locally that incremental builds still work as expected.


v2.4.0, master, and development all reliably crash the viewer when trying to turn on both depth and RGB at the same time.

Required Info

Camera Model
Intel RealSense L515

Firmware Version
<IP_ADDRESS>

Operating System & Version
MacOS Catalina

Kernel Version (Linux Only)
10.15.7

Platform
Intel i5 based MacBook Air

SDK Version
tag/v2.4.0, master (34fc284d5), and development (b940b84cf)

Language
I just want a point cloud, thanks.

Segment
I just want a point cloud, thanks.

Issue Description
The viewer sigsegv's when turning on both the depth and RGB sensor at the same time; I built with:
cd build; sudo xcode-select --reset; cmake .. -DBUILD_EXAMPLES=true -DBUILD_WITH_OPENMP=false -DHWM_OVER_XU=false
As is, I have a lovely device that convinces me that it has promise, right up until it crashes trying to gather both pieces of info that I want at the same time... help.

Interestingly, it seems when I build from tags/v2.4.0 with the above settings and plug the camera in after starting the viewer, I can see all sensor data in 2D mode and capture a .bag file.  When I go into 3D mode, however, it seems to show two overlaying frames that look to be different scales -- then immediately crashes -- suggesting the source of the sigsegv is in the 3D code?

Hi @shutej
We will have a look at this.

Hi @shutej
We will have a look at this.

Hi @shutej
Are you seeing issues with the latest librealsense release?
*If we don’t hear from you in 7 days, this issue will be closed.


Remove kth Node From End of Linked List

Assigned Issue Number ?
1260
Language Opted ?
Ruby
Number of files added or updated ?
1
Name of these files ?
Data_Structures => Linked_List => Singly_Linked_List => Delete_Kth_Node_From_End => Delete_Kth_Node_From_End.rb
Checklist

[x] I've read the contribution guidelines.
[x] I've referred the correct issue number.
[x] I've fill up this entire template correctly.

@ahampriyanshu Please review the PR


Release/0.14.0

Release 0.14.0

[ ] Fetch translations from Crowdin
[x] Change VERSION with the appropriate tag
[x] Amend CHANGELOG.rst (check the release date)
[x] Tag the resulting commit with the appropriate tag
[x] Push the tag (using: git push --tags)
[x] Edit the release (copy/paste CHANGELOG)
[x] Publish the new release to PyPI

https://pypi.python.org/pypi/django-formidable/0.14.0 🎉


Make Collection of TPL Events Opt-In

With the proliferation of async/await, the TPL events have become more and more verbose, to the point where enabling them preturbs the CPU profiling data fairly heavily in some workloads.  This change makes them opt-in.
cc: @davidfowl, @stephentoub

/azp run


Etcd Operator ignores the custom storageClass

I trying to spin up the Etcd Operator with backup on minikube. However, every time I specified a custom storage type the operator kept trying to use "etcd-backup-gce-pd"
apiVersion: "etcd.database.coreos.com/v1beta2"
kind: "EtcdCluster"
metadata:
  name: "example-etcd-cluster-with-backup"
spec:
  size: 3
  version: "3.1.8"
  backup:
    # short snapshot interval for testing, do not use this in production!
    backupIntervalInSecond: 30
    maxBackups: 5
    storageType: "PersistentVolume"
    pv:
      volumeSizeInMB: 512
      storageClass: standard

Sep 10 06:22:30 minikube localkube[3755]: E0910 06:22:30.745826    3755 controller.go:405] Claim "default/example-etcd-cluster-with-backup-pvc": Unknown provisioner "kubernetes.io/gce-pd" requested in storage class "etcd-backup-gce-pd"

@dmyerscough what is the version of etcd operator?

Sorry about that; the version was v0.5.1

@fanminshi @hongchaodeng can you take a look? i feel this is a bug.

Canot reproduced.

@dmyerscough
Please provide more details how you can reproduce the problem

I just tried the following:-
localhost ~$ kubectl get nodes
NAME       STATUS    AGE       VERSION
minikube   Ready     2d        v1.7.5

localhost ~$ kubectl create -f https://raw.githubusercontent.com/coreos/etcd-operator/v0.5.1/example/deployment.yaml
deployment "etcd-operator" created
localhost ~$ kubectl get storageclass
NAME                 TYPE
standard (default)   k8s.io/minikube-hostpath

localhost ~$ cat test.yaml
apiVersion: "etcd.database.coreos.com/v1beta2"
kind: "EtcdCluster"
metadata:
  name: "example-etcd-cluster-with-backup"
spec:
  size: 3
  version: "3.1.8"
  backup:
    # short snapshot interval for testing, do not use this in production!
    backupIntervalInSecond: 30
    maxBackups: 5
    storageType: "PersistentVolume"
    pv:
      volumeSizeInMB: 512
      #storageClass: standard

Noticed I left the storageClass commented out (Default is GCE). I did the apply against minikube which is expected to fail because there is no GCE storage. However, if you kubectl delete -f test.yaml you will notice that it doesn't delete the GCE storageClass that the etcd operator created.
When I modified the storageClass to standard the etcd Operator still does not seem to create the instances... Maybe, I am dealing with a borked minikube or it has something to do with the GCE storageClass that gets created.

taking a look as well.

@dmyerscough
Can you provide etcd-operator logs?

localhost ~$ kubectl create -f https://raw.githubusercontent.com/coreos/etcd-operator/v0.5.1/example/deployment.yaml

If you are using minikube, please set flag
etcd-operator --pv-provisioner=none

By default, it's "kubernetes.io/gce-pd". We will deprecate this flag later and only use cluster spec only.

Noticed I left the storageClass commented out (Default is GCE). I did the apply against minikube which is expected to fail because there is no GCE storage.

"apply" doesn't work now. Please set the "storageClass" field at creation.

@dmyerscough kindly ping.

@xiang90 I will take a look at this shortly, Ill update by EOD.

@hongchaodeng the logs are not available because the pods are never started.
How do you set
etcd-operator --pv-provisioner=none

Minikube logs:-
Sep 21 05:00:24 minikube localkube[3755]: E0921 05:00:24.663084    3755 controller.go:405] Claim "default/example-etcd-cluster-with-backup-pvc": Unknown provisioner "kubernetes.io/gce-pd" requested in storage class "etcd-backup-gce-pd"
Sep 21 05:00:32 minikube localkube[3755]: W0921 05:00:32.088673    3755 helpers.go:771] eviction manager: no observation found for eviction signal allocatableNodeFs.available
Sep 21 05:00:39 minikube localkube[3755]: E0921 05:00:39.663435    3755 controller.go:405] Claim "default/example-etcd-cluster-with-backup-pvc": Unknown provisioner "kubernetes.io/gce-pd" requested in storage class "etcd-backup-gce-pd"
Sep 21 05:00:42 minikube localkube[3755]: W0921 05:00:42.109653    3755 helpers.go:771] eviction manager: no observation found for eviction signal allocatableNodeFs.available
Sep 21 05:00:52 minikube localkube[3755]: W0921 05:00:52.132018    3755 helpers.go:771] eviction manager: no observation found for eviction signal allocatableNodeFs.available
Sep 21 05:00:54 minikube localkube[3755]: E0921 05:00:54.663545    3755 controller.go:405] Claim "default/example-etcd-cluster-with-backup-pvc": Unknown provisioner "kubernetes.io/gce-pd" requested in storage class "etcd-backup-gce-pd"
Sep 21 05:01:02 minikube localkube[3755]: W0921 05:01:02.156616    3755 helpers.go:771] eviction manager: no observation found for eviction signal allocatableNodeFs.available
Sep 21 05:01:09 minikube localkube[3755]: E0921 05:01:09.663636    3755 controller.go:405] Claim "default/example-etcd-cluster-with-backup-pvc": Unknown provisioner "kubernetes.io/gce-pd" requested in storage class "etcd-backup-gce-pd"
Sep 21 05:01:12 minikube localkube[3755]: W0921 05:01:12.179042    3755 helpers.go:771] eviction manager: no observation found for eviction signal allocatableNodeFs.available
Sep 21 05:01:22 minikube localkube[3755]: W0921 05:01:22.201576    3755 helpers.go:771] eviction manager: no observation found for eviction signal allocatableNodeFs.available
Sep 21 05:01:24 minikube localkube[3755]: E0921 05:01:24.663765    3755 controller.go:405] Claim "default/example-etcd-cluster-with-backup-pvc": Unknown provisioner "kubernetes.io/gce-pd" requested in storage class "etcd-backup-gce-pd"
Sep 21 05:01:32 minikube localkube[3755]: W0921 05:01:32.223125    3755 helpers.go:771] eviction manager: no observation found for eviction signal allocatableNodeFs.available

Ok, I found the issue. When issuing a kubectl delete -f .... the PVC was not deleted and the kubectl create -f .... did not throw any errors.

@dmyerscough
Do you think we should improve any documentation around this issue?

@xiang90 actually that's a good point. We should state that when you delete the backup pod; ensure the PVC is removed too.
This would be good since GCE storage is used by default if no storageclass is specified. However, the operator should just use the default storageclass that is defined on the cluster.

@dmyerscough I reopened this and marked it as a documentation issue. We will address it.

Can you point out where the docs need to b explicitly mention?
Where do you read the docs from?

Clear since unclear what to act on.
Deleting PVC is mentioned in https://github.com/coreos/etcd-operator#disaster-recovery .

Does the Operator still use GCE as the default storage engine for backups?

@dmyerscough
We are decoupling the backup operation logic from etcd operator.
In the future, the default storage for backup will be S3. But that's very decoupled will be less confusing.

Why is it still being tied to a specific backend, is it not possible to have this completely abstracted or force the user to actually specify it without trying to guess?

is it not possible to have this completely abstracted or force the user to actually specify it without trying to guess?

Yeah. That's the plan. I will work out some detailed specification and publish in issue.