fractal: 4.4.0 -> 4.4.2

Description of changes
Updated to 4.4.2
All the patches are not required anymore.

Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[x] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[x] Tested basic functionality of all binary files (usually in ./result/bin/)
23.05 Release Notes (or backporting 22.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[ ] Fits CONTRIBUTING.md.

What about openssl 3 support? May you try unpin openssl_1_1 from all-packages.nix?

What does fail?

Reproduced:
fractal> building
fractal> source = "git+https://github.com/danigm/either.git?rev=60c99bc0723491e2dfd42bbe9b485c5f9323e96b#60c99bc0723491e2dfd42bbe9b485c5f9323e96b"
fractal> source = "git+https://github.com/danigm/gettext-rs?branch=no-gettext#61938b9f5f1d3bdc31f9839f53fabe5ccf136a78"
fractal> source = "git+https://github.com/danigm/gettext-rs?branch=no-gettext#61938b9f5f1d3bdc31f9839f53fabe5ccf136a78"
fractal> source = "git+https://gitlab.gnome.org/World/Rust/sourceview4-rs.git?rev=fa8819fa7ecbe56f44d951656d3825f468915754#fa8819fa7ecbe56f44d951656d3825f468915754"
fractal> source = "git+https://gitlab.gnome.org/World/Rust/sourceview4-rs.git?rev=fa8819fa7ecbe56f44d951656d3825f468915754#fa8819fa7ecbe56f44d951656d3825f468915754"
fractal> ERROR: The Cargo.lock contains git dependencies
fractal> This is currently not supported in the fixed-output derivation fetcher.
fractal> Use cargoLock.lockFile / importCargoLock instead.

Caused by https://github.com/NixOS/nixpkgs/commit/4329de1264ecb7cca8709dc1984b86beb11bcc4e

Hmm, ok, it could be that these things were already cached on my machine, as I tried to make fractal-next with newest git dependencies running. I'll look into it.


fix many bugs, more LSP test coverage!

this fixes multiple cacheing bugs, on writing some in-depth integration coverage for the LSP server.
it also solves several bugs regarding loading config types, and properly restarts the server when there are config changes
Bugfix Summary

jump to definition in embedded files offset bug (correct file, wrong range)
cache invalidation for fragments (fragment definitions change when they are supposed to)
schema cache invalidation for schema files (schema doesn't change when a watched schema file changes)
schema definition lookups & autocomplete crossing into the wrong workspace (project name wasn't being resolved when building the cache keys! literally just one line!)

Known Bugs Fixed

#3318
#2357
#3469
#2422
#2820
many others to add here...

Test Improvements

new, high level integration spec suite for the LSP with a matching test utility
more unit test coverage
total increased test coverage of about 23% in the LSP server codebase.
many "happy paths" covered for both schema and code first contexts
many bugs revealed (and their source)

overall, this new quasi behavioral integration spec plane serves as a learning tool for contributors, a refactoring tool (I may have a stash for a new chained branch ready to go haha) and a tool for discovering bugs and readily identifying their sources, even allowing us to use a BDD approach to fixing bugs (and soon adding features!) 😍  !!
the only major caveat of this testing approach is that, like with many high level, quasi-e2e integration tests, these rely on our assumptions of how LSP clients are using our service interfaces. This is something that changes ever so slightly and even in semi-breaking ways in vscode (like with the introduction of multi-root workspaces), so careful readings of the vscode-languageserver changelog and probably also the LSP protocol spec will be required to maintain this spec, and not cause mysterious false positives
TODO:
I really want to solve this but to solve this properly requires a not insignificant refactor, but a much needed one. It will come in the next major PR I create.

full schema lifecycle for "code first"/ cached schema file context (i.e. schema from URL updates when it changes and re-saves the file, at least with a configurable timeout)

For anyone who wants to give it a try, here is a zip of the 0.10.0 vsix!
vscode-bugfixes.zip


Multiple connection on PortType::In

Hello
In NodeDataModel the connection type is set to ConnectionPolicy::Many; for out port, this means we can draw multiple out connections from a model.
How do I do this for in port? Would like to receive multiple inputs (of same type) on an in-port for a model, and want them to treat as array or list inside model of computation.
BR
Prasanna

Closing this, as was too much lazy to look deep into what was so obvious, thank you!


Where is the logic that chooses types to suggest in error messages located?

We are jealous about the Elm error messages where it suggest types in case of typos in code :)
We are implementing a similar feature and it'd be very useful for us to look at the code which chooses type names to suggest the user. Could anybody point us? Thanks.

We're especially interested in what distance function elm is using and how you filter false positives. Thanks and kudos for the excellent work!

Hi @vasily-kirichenko @forki,
It's really cool that you're excited about how Elm does things! However, we need to use this repository for tracking bugs in the compiler, so this is not the right place to ask this.
Can you post on elm-discuss or ask on Elm Slack instead?
Thanks!


[Bug]: 'CarouselController' is  Defined in both material and flutter_carousel_widget

Contact Details
<EMAIL_ADDRESS>What happened?
I tried using this package in my project but some errors occurred so I forked and tried to understand using the example app given
but still the same error persist. I have tried using alias but does not solve anything.
I have also cleared pub cache and again tried
Errors in EXAMPLE APP :
`The name 'CarouselController' is defined in the libraries 'package:flutter/src/material/carousel.dart (via package:flutter/material.dart)' and 'package:flutter_carousel_widget/src/helpers/flutter_carousel_controller.dart (via package:flutter_carousel_widget/flutter_carousel_widget.dart)'.
The name 'CarouselController' is defined in the libraries 'package:flutter/src/material/carousel.dart (via package:flutter/material.dart)' and 'package:flutter_carousel_widget/src/helpers/flutter_carousel_controller.dart (via package:flutter_carousel_widget/flutter_carousel_widget.dart)'. Try using 'as prefix' for one of the import directives, or hiding the name from all but one of the imports.
Errors in Project
C:/Users/hp/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_carousel_widget-2.2.0/lib/src/helpers/flutter_carousel_options.dart:5:1: Error: 'CarouselController' is imported from both 'package:flutter/src/material/carousel.dart' and 'package:flutter_carousel_widget/src/helpers/flutter_carousel_controller.dart'. import 'package:flutter_carousel_widget/src/helpers/flutter_carousel_controller.dart'; ^^^^^^^^^^^^^^^^^^ /C:/Users/hp/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_carousel_widget-2.2.0/lib/src/_expandable_carousel_widget.dart:208:13: Error: 'CarouselController' is imported from both 'package:flutter/src/material/carousel.dart' and 'package:flutter_carousel_widget/src/helpers/flutter_carousel_controller.dart'.           : CarouselController() as CarouselControllerImpl;             ^^^^^^^^^^^^^^^^^^ /C:/Users/hp/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_carousel_widget-2.2.0/lib/src/_flutter_carousel_widget.dart:149:13: Error: 'CarouselController' is imported from both 'package:flutter/src/material/carousel.dart' and 'package:flutter_carousel_widget/src/helpers/flutter_carousel_controller.dart'.           : CarouselController() as CarouselControllerImpl;
Version
2.2.0
What devices are you seeing the problem on?
Android, iPhone
OS
Android 12
Relevant log output
`C:/Users/hp/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_carousel_widget-2.2.0/lib/src/_flutter_carousel_widget.dart:149:13: Error: 'CarouselController' is imported from both 'package:flutter/src/material/carousel.dart' and 'package:flutter_carousel_widget/src/helpers/flutter_carousel_controller.dart'.
          : CarouselController() as CarouselControllerImpl;
            ^^^^^^^^^^^^^^^^^^
Unhandled exception:
Unsupported operation: Unsupported invalid type InvalidType(<invalid>) (InvalidType). Encountered while compiling file:///C:/Users/hp/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_carousel_widget-2.2.0/lib/src/helpers/flutter_carousel_options.dart, which contains the type: FunctionType(CarouselOptions Function({allowImplicitScrolling: bool?, aspectRatio: double?, autoPlay: bool?, autoPlayAnimationDuration: Duration?, autoPlayCurve: Curve?, autoPlayInterval: Duration?, carouselController: <invalid>, clipBehavior: Clip?, disableCenter: bool?, dragStartBehavior: DragStartBehavior?, enableInfiniteScroll: bool?, enlargeCenterPage: bool?, enlargeStrategy: CenterPageEnlargeStrategy?, floatingIndicator: bool?, height: double?, indicatorMargin: double?, initialPage: int?, keepPage: bool?, onPageChanged: dynamic Function(int, CarouselPageChangedReason)?, onScrolled: void Function(double?)?, padEnds: bool?, pageSnapping: bool?, pageViewKey: PageStorageKey<dynamic>?, pauseAutoPlayInFiniteScroll: bool?, pauseAutoPlayOnManualNavigate: bool?, pauseAutoPlayOnTouch: bool?, physics: ScrollPhysics?, restorationId: String?, reverse: bool?, scrollBehavior: ScrollBehavior?, scrollDirection: Axis?, showIndicator: bool?, slideIndicator: SlideIndicator?, viewportFraction: double?})).
#0      ProgramCompiler._typeCompilationError (package:dev_compiler/src/kernel/compiler.dart:3224)
`

Code of Conduct

[X] I agree to follow this project's Code of Conduct

Hi @Johnishaa007,
Thank you for bringing this issue to my attention!
I am already aware of the problem and will address it in the next update, which I plan to release next week.
Thank you for your patience.
Regards,
Nikhil

When will this update come?
Thanks for your great work!

When will this update come?
Thanks for your great work!

Still no new version from what I can see. I'm also having the same issue now.

Hi @ShuaibSolomons,
The fix has been released with version 2.3.0.
Please update the package and try again.
Thanks,
Nikhil


Fix write deadlock

We were trying to write all addresses to the oracle before reading
anything back.
Fixes #57

Coverage remained the same at 0.0% when pulling 05e01aefbbe2683cd8b3a3f4c616d7e04abb7014 on philipc:issue-57 into d3d5a0508b59d7de7289d8ecc1a5f8b490def5b2 on gimli-rs:master.


Draft: Structured offer conditions

This is an initial sketch at how we might make offer conditions more structured. Currently these are all free text, with the exception of the DBS check and the fitness to train to teach check.
🗂 Trello card
Screenshots
Degree completion
(would only be shown if candidate had not yet completed their degree when applying)

GCSE equivalency test
(would only be shown if the candidate does not have a GCSE or equivalent, or they had one but the grade was D or below)

References

Further conditions

Summary of conditions added
(From here, they could also add additional free text conditions if needed)

@frankieroberto when I look through this I wonder if the approach of asking more questions in a flow as being potentially long winded for the person making the offers.
Did you consider having all of these options in one long checkbox list? (i.e. including references as a single checkbox in the longer list). If so, what made you want to break some of these questions out? Is it because of their conditionality/the fact they won't apply in all cases? Given that, could you not just hide them from the long list when they don't apply instead?
The reason I suggest this is that (in my view, feel free to challenge!) more and more screens have the potential to slow down the offer making process further, which is something we want to avoid for busy administrators.

@frankieroberto when I look through this I wonder if the approach of asking more questions in a flow as being potentially long winded for the person making the offers.
Did you consider having all of these options in one long checkbox list? (i.e. including references as a single checkbox in the longer list). If so, what made you want to break some of these questions out? Is it because of their conditionality/the fact they won't apply in all cases? Given that, could you not just hide them from the long list when they don't apply instead?
The reason I suggest this is that (in my view, feel free to challenge!) more and more screens have the potential to slow down the offer making process further, which is something we want to avoid for busy administrators.

@MylesJarvis This is a good challenge! I've done a quick demo of moving all of these onto a single page in a separate PR: #634 – although I've not converted the radios to checkboxes.
The main reason I separated out degree, GCSE equivalency tests and references onto separate pages are because these all have potential follow-up questions.
I’ve included experimented with including the relevant information from the application form – eg what they said about their degree, GCSEs, and the full references. Not totally sure yet whether this is helpful or not, but my hunch is that it might be a good prompt.
These could all still be on a single page though potentially – however in general, I’ve found that that users can actually find it faster if you split the same questions across multiple pages than if they’re on the same page. It’s a bit counter-intuitive, but I think so long as the app loads each page pretty quickly, the time waiting for the next page is marginal, and having them on separate pages feels less overwhelming and might even save time in scrolling and scanning the page?  Always worth testing though!
Also worth noting that our upcoming subject knowledge enhancement flow was designed as multiple additional pages, and the speed didn't seem to be a factor in user research at all.


new features

Hi @dvg4000 , @RamotionDev , @Juriv :
It would be possible to add the following characteristics, the possibility to set the min and max, not the text of max or min.

Hello, @Angelk90. Of course it is possible to add these fields. But with the current implementation there is no need to do it. You can get/set min and max values of slider via startText and endText fields.


Update the link of the GitHub Actions build status badge

Closing because it already is set to CI Passing. Furthermore, any code that is merged into the codebase has to pass CI, thus no need to change the CI status.


Configuration for Comet

Configuration of dask-jobqueue for SDSC Comet, this came out of a meeting with @mrocklin, looking forward to feedback.

thanks!


More precise parser error

When the parser encounters a type that is unknown, it fails with the following error:
expected: {"<typedef_name>"}

It would be extremely helpful if the parser would at the following point in the parser code:
__state.mark_failure(__pos, "<typedef_name>");

make an effort to print the actual type that it can not parse.

Indeed, error reporting is one of the weak places currently.
Our current parser generator lacks the facility to report exact text that failed to parse. We do return expanded source code and position, so the type name can be recovered from that. We could provide some helper functions to do that.


feat: annotate kotlin input type to enable deserialization

Motivation
We are migrating from java to kotlin codegen types. We have few quite complex input types. In our test suite we deserialise JSON files and we validate them. We'd like to keep that functionality after migration as it really simplifies our test suite.
Generated input type before changes
public class TestInput(
    public val workspaceKey: String,
    public val name: String,
) : GraphQLInput() {
    override fun fields(): List<Pair<String, Any?>> = listOf("workspaceKey" to workspaceKey, "name" to
        name)
}

Test
@Test
fun `should deserialize`() {
    val json = """
        {
            "workspaceKey": "KEY",
            "name": "Damian"
        }
    """.trimIndent()
    ObjectMapper().readValue(json, TestInput::class.java)
}

Error during deserialization
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.example.TestInput` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
 at [Source: (String)"{
    "workspaceKey": "KEY",
    "name": "Damian"
}"; line: 2, column: 5]

Generated input type after PR changes
public class TestInput @JsonCreator constructor(
    @JsonProperty("workspaceKey")
    public val workspaceKey: String,
    @JsonProperty("name")
    public val name: String,
 ) : GraphQLInput() {
    override fun fields(): List<Pair<String, Any?>> = listOf("workspaceKey" to workspaceKey, "name" to
        name)
}

@mbossenbroek - could you please have a look when you get a chance?

LGTM - thanks for the addition @dwilkolek! Also feel free to tag me directly as a reviewer for any of the kotlin2 stuff; otherwise I don't watch this repo.


Remove all global state from setProperty

Description
Remove all global state in from setProperty
Added properties to ActorClient
Fixed constructor visibility for ActorClient
Issue reference
We strive to have all PR being opened based on an issue, where the problem or feature have been discussed prior to implementation.
Please reference the issue this PR will close: N/A
Checklist
Please make sure you've completed the relevant tasks for this PR, out of the following list:

[ ] Code compiles correctly
[ ] Created/updated tests
[ ] Extended the documentation

@artursouza you might want to re-trigger the build. It seems that there is race condition between Testcontainers and Spring Boot Test Context for a particular test.

@cicoyle we need your approval again since the PR has changed. Thank you!

@artursouza it's not critical, but there a few more places in the PR where I mentioned that we could use Map.of().

@artursouza it's not critical, but there a few more places in the PR where I mentioned that we could use Map.of().

Done


Connecting to Amazon SES

Hey @quanvo87, I've been having a hard time connecting to Amazon SES. Here's how I'm connecting:
let smtp = SMTP(hostname: "email-smtp.us-west-2.amazonaws.com",
                email: MY_SES_USERNAME,
                password: MY_SES_PASSWORD,
                port: 587)

With port 587, I get this error:
530 Must issue a STARTTLS command first
If I change the port to 465 (TLS Wrapper instead of STARTTLS), it just times out instead of connecting.
Any ideas?  Everything works from the command line, so it's not a firewall issue.  Thanks!

@collinhundley tomorrow is a holiday for me so I'll be able to look into the issue a little then. But I will definitely take a deep dive Wednesday!
Some initial ideas are--it looks like Amazon SES requires an encrypted connection. So you will need to provide information to initialize an SSL instance and include that in the SMTP struct. If you haven't already, this blog post goes more into detail about that whole process. Though based on the error you're getting, it could also be an issue with Swift-SMTP not handling certain SMTP server's connection processes correctly. I will look into it and update you.

@quanvo87 thanks for taking the time to look into this!
I also tried initializing an SSL with a self-signed cert, but this is the output when trying to connect:
[2017-07-03T23:08:37.488-06:00] [VERBOSE] [SMTPSocket.swift:86 readFromSocket()] 220 email-smtp.amazonaws.com ESMTP SimpleEmailService-2108164273 N74k6fuCDMXGVO4FzTuF

[2017-07-03T23:08:37.489-06:00] [VERBOSE] [SMTPSocket.swift:65 write] EHLO localhost
[2017-07-03T23:08:37.529-06:00] [VERBOSE] [SMTPSocket.swift:86 readFromSocket()] 250-email-smtp.amazonaws.com
250-8BITMIME
250-SIZE 10485760
250-STARTTLS
250-AUTH PLAIN LOGIN
250 Ok

[2017-07-03T23:08:37.530-06:00] [VERBOSE] [SMTPSocket.swift:65 write] STARTTLS
[2017-07-03T23:08:37.570-06:00] [VERBOSE] [SMTPSocket.swift:86 readFromSocket()] 220 Ready to start TLS

Error code: -25264(0x-62B0), ERROR: SecPKCS12Import, code: -25264, reason: Could not determine error reason.

I can't seem to pinpoint the issue, so hopefully you have a better idea.
I should also point out that attempting to connect to SES on port 465 (or any of the other SMTPS ports) just hangs forever, until it eventually times out. I'm pretty confused on this one, as Amazon specifically supports this protocol and I have no problem connecting from Terminal via telnet or openssl. Thanks again!

When you created your self-signed cert, did you add a password to it? If not, try creating a new one with a password, and provide your SSL instance with that password.
Also, are you using an SSL instance that is supported on your OS? On this documentation page, the first 3 are supported on Linux, and the 4th on macOS.
As for certain ports hanging, this does sound familiar, and I tried to add safeguards around this (by connecting on a different thread so that we could timeout on the main thread). I'm not sure why certain ports hang in the first place, I think it has something to do with some SMTP servers being finicky and/or the the BlueSocket package Swift-SMTP uses to read/write data from a socket.
I'll keep looking into it.

Hey @quanvo87, your suggestion to add the password did the trick!  Seems to be working now on macOS, so I'll test Linux soon.
As a side note, it looks like SMTPSocket is logging a large amount of information. Probably useful for debugging, but maybe it could be throttled back a bit for production? I've found that Kitura's logging in verbose mode strikes a good balance between useful information and brevity.

Good to hear! I'm going to update the docs to include information like this--and make passwords not optional for now (and raise an issue in the BlueSSLService package as well).
I'll look into throttling logging for production, too.

Thanks for your help on this.
I do have one question regarding SSL certs:  can you explain why a certificate is necessary on the client side? It seems like the server (in this case SES) should present a certificate when we make a connection, rather than the client.  Along with that, are there any security concerns with using self-signed certs for SMTP? The encryption is the same, so it seems like it should be ok as long as the server accepts it.
Thanks!

@collinhundley Client cert is needed as part of the TLS handshake:

I think it's OK to use self-signed cert in client (not server). WARNING: I'm not a security expert, please do not do this in your production app without first consulting someone who is one.

@collinhundley We are meeting with our security expert tomorrow and will have more information about this soon.

@quanvo87 that's great, I'd love to hear more about the certificates.
My understanding is that self-signed certs offer the same security as the ones from CAs; they just can't be trusted by browsers. But for an email server (my own server connecting to AWS), it seems like self-signed certs should be fine, since I know that I can trust my own certificate.
If you find out otherwise please share!

@collinhundley After talking with @gtaban, our security expert, turns out I was wrong in my understanding of the TLS handshake.
Whether or not a client certificate is needed depends on the SMTP server; the certificate is only used for authentication purposes, and is only needed when the server demands client authentication via certificate.
We'll update Kitura-SMTP and make client certificate optional.

@youming-lin thanks for following up. I'll be watching out for an update.

Hi @collinhundley , I haven't worked with SMTP security too much so hopefully I won't say too many wrong things. I'll start with some background that you probably know already!
There are two main levels of security involved with SMTP:

SMTP Auth which handles the application level authentication, such as user password
TLS which handles the transport level security ( secrecy of the transmitted data as well as authentication of the end points).

SMTP itself doesn't specify transport level security though most servers use STARTTLS protocol which basically just opportunistically tries to upgrade the channel to secure. But this is mostly secrecy secure (meaning encryption of the data) and not end point authentication. For secrecy, certificates are not necessary in general. It really depends on the validation requirements of the other party. So server certificate would get validated by the client and vice versa.
In general, authenticating the server endpoint is much more critical than the client endpoint as the server is obviously more privileged.
Currently there does not seem to be a set endpoint authentication standard although SMTP STS is  being drafted which requires the server cert to be signed by a valid CA. However I don't think there is any specifications on the client cert. What this also means is that depending on how the server is setup, the client can:

have no certificate
have a self-signed cert
have a valid CA -signed cert

I think long term what we would want to have is an SMTP client that supports all three. But again which to use is dependent on the certificate validation requirements of the server.
Let me know if the above doesn't answer your question.


samtools index did not end, shell script did NOT end!

Hello, Thank you for your developing for this tools.
But here I cannot understand the logic behind. You set this judge sentence.
if (!all(file.exists(paste0("./temp/UB.", samples.vector, ".bam.bai")))) {     write_log(stage = "samtools index", success = F)     stop("samtools index did not end, shell script did NOT end!") }
I do not know why should I always run two times then it can detect the .bam.bai file ? Thanks you

Hello, I meet a similar problem in the previous step.
Warning message:
In system(command = FilterBAM.command, wait = T) : error in running command
Error: FilterBAM did not end, shell script did NOT end!
Execution halted

I don't know the logic behind this error. I wonder if you meet the same problem when you run this code. Thank you!


Trilogy: only set db.instance.id attribute if there is a value

It's possible for the @connected_host value to be unset because a query is made within trilogy to initially assign the @connected_host:
https://github.com/trilogy-libraries/trilogy/blob/3c3a3865a3896f3056b1d7c69c5244964b60937c/contrib/ruby/lib/trilogy.rb#L39-L50
This PR adds a presence check before assigning the attribute.

@arielvalentin I made one more tweak which was to only do a nil check. The ivar will always be defined because it's declared in #initialize: https://github.com/trilogy-libraries/trilogy/blob/3c3a3865a3896f3056b1d7c69c5244964b60937c/contrib/ruby/lib/trilogy.rb#L16


Adds server-side rate limiter with sane default to Fides

Code Changes

[x] Adds slowapi to the project's dependencies
[x] Adds CONFIG.security.request_rate_limit and sets the sane default to 100 requests per rolling minute
[x] Adds CONFIG.security.rate_limit_prefix to append a prefix to any key the rate limiter uses. This is helpful when using Redis as the backend, so that users can guarantee no key conflicts

Steps to Confirm

[ ] Set the rate limit to something arbitrarily low e.g. 1/minute
[ ] Run the server with nox -s dev
[ ] Try to access /health more than once within a minute
[ ] Assert that the second request returns a 429

Pre-Merge Checklist

[ ] All CI Pipelines Succeeded
Documentation Updated:

[ ] documentation complete, or draft/outline provided (tag docs-team to complete/review on this branch)
[ ] documentation issue created (tag docs-team to complete issue separately)

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

Description Of Changes

I've chosen to use slowapi as the rate limiting library as it's consistent with fideslog's implementation. Overall it's a nice implementation that allows us to override the ratelimit dynamically at route level with a decorator e.g.

@router.get("/test")
@limiter.limit("2/minute")
async def test(
    request: Request
):
return "hi"

slowapi does come with some known issues, ~for example requiring the request to be passed into an endpoint in order to effectively ratelimit this. I'll need to spend some time analysing the extent to which we omit this var~. UPDATE: this is only if we use the @limiter(...) decorator, and not when we default for every request.

To Discuss

My initial concern is that could this could get in the way of legitimate requests that Fides wants to receive under all circumstances e.g. Webhooks

I've QA'd this latest change manually, if an invalid var for the rate limit is specified, the following message shows:
fides-fides-1  | pydantic.error_wrappers.ValidationError: 1 validation error for FidesConfig
fides-fides-1  | security -> request_rate_limit
fides-fides-1  |
fides-fides-1  |             Ratelimits must be specified in the format: [count] [per|/] [n (optional)] [second|minute|hour|day|month|year]
fides-fides-1  |             e.g. 10 per hour
fides-fides-1  |             e.g. 10/hour
fides-fides-1  |             e.g. 10/hour;100/day;2000 per year
fides-fides-1  |             e.g. 100/day, 500/7days
fides-fides-1  |              (type=value_error)

If the rate limit is exceeded, the following response is returned:
{
error: "Rate limit exceeded: 2 per 1 minute"
}

So we could fix this specific location instead of throwing a KeyError, to raise an exception that the rate limit was exceeded. But more broadly, are there other areas where the CLI is making lots of requests where we'll easily exceed the limits? (Beyond my area of expertise)

This is a really good find, thanks. One thing I can think of to immediately address this is to increase the rate limit default, something like 500/minute or 1000/minute still offer us good benefits here, because they still essentially stop brute force attacking of sensitive endpoints.
Another thing I can think to do is remove the limits entirely where there's no sensitive data being exposed.

OK that sounds good, can you address the possible KeyError too when you get a chance?


Docs: Remove out of date or duplicated documentation

This PR removes documentation that does really serve any real purpose,
is out of date or is duplicated elsewhere such as in godoc or on
ciao-project.github.io.
The content of the remaining README.md files will need to be either
migrated elsewhere, deleted or perhaps be given leave to remain if
there is no other suitable place for these files.
Signed-off-by: Mark Ryan<EMAIL_ADDRESS>

This is just the start.  There are still some README,md files left in the repo, but there content is useful and so will need to be migrated elsewhere before they are deleted.

Coverage decreased (-0.004%) to 65.856% when pulling c0948e8b9637449a44a1594fbeb1a2ed9d8d60b4 on markdryan:remove-docs into 8207c8a6a4bf6cc959fa237f014b369c87a477df on ciao-project:master.

Coverage decreased (-0.009%) to 65.864% when pulling 95d38b43f1f2721fd5c87aa27ad38c623b5bb2cc on markdryan:remove-docs into 3865167b4bb24ab106e4574bcdc7102b21fdb1b7 on ciao-project:master.


NearestCentroid, methods shapeExplainer and get_attr

Hello,
For NearestCentroid model, methods shapeExplainer and get_attr doesn't work.

Regards,
Alexandre

Hi Alexandr,
shapeExplainer is not available for this type of models. The issue related to 'get_attr' is duplicated.
Badr


vcpkg create fails with "CMake Error at scripts/ports.cmake:14"

Describe the bug
After running git pull to revision 6ac6267f512dcec29171f4cbe62a040a974fde04, vcpkg create fails with "CMake Error at scripts/ports.cmake:14". Issue observed on both Linux and Windows.
Environment

OS: Ubuntu 18.04 LTS and Windows 10
Compiler: g++ 8.4.0 and Visual Studio Pro 2019

To Reproduce
Steps to reproduce the behavior:

$ git clone https://github.com/microsoft/vcpkg.git # current revision 6ac6267f512dcec29171f4cbe62a040a974fde04
$ ./bootstrap.sh # .\bootstrap.bat on Windows
$ ./vcpkg create zlib2 http://zlib.net/zlib-1.2.11.tar.gz zlib-1.2.11.zip # taken directly from https://vcpkg.readthedocs.io/en/latest/examples/packaging-zipfiles/

Expected behavior

This is the output I was seeing last week as of revision 01926a1eb1117052964959ef0d334812021a23fe
$ ./vcpkg create zlib2 http://zlib.net/zlib-1.2.11.tar.gz zlib-1.2.11.zip
-- Downloading http://zlib.net/zlib-1.2.11.tar.gz...
-- Generated portfile: /home/sweemer/test/vcpkg\ports\zlib2\portfile.cmake
-- Generated CONTROL: /home/sweemer/test/vcpkg\ports\zlib2\CONTROL
-- To launch an editor for these new files, run
--     .\vcpkg edit zlib2

Failure logs

$ ./vcpkg create zlib2 http://zlib.net/zlib-1.2.11.tar.gz zlib-1.2.11.zip
CMake Error at scripts/ports.cmake:14 (message):
Your vcpkg executable is outdated and is not compatible with the current CMake scripts.
Please re-build vcpkg by running bootstrap-vcpkg.

Additional context
This was working fine as of revision 01926a1eb1117052964959ef0d334812021a23fe last week.

Confirmed.
@dan-shaw Could you please take a look?

oops, I probably broke this :/ Will take a look tomorrow when it isn't 2AM :)

(The fix will be to audit all the places vcpkg.exe calls cmake bits and ensure it's passing in all the right paths)


update

 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.

目前还要考虑兼容 1.6

11


Link to PowerShell script goes to a generic page

As part of the example on provisioning the infrastructure, one of the steps provides a link to a PowerShell script to install a certificate.
The original link points to this URL, https://gallery.technet.microsoft.com/Azure-Resource-Manager-4ea7e328.
However, it is now being redirected to this, which has 4659 results, instead of the just one PS script: https://learn.microsoft.com/en-gb/samples/browse/?redirectedfrom=TechNet-Gallery.
Please fix, thanks.

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

ID: f7279474-d477-e029-e1b9-c8b8342077a6
Version Independent ID: e84b3157-2b40-54ee-183f-23dc7cc81ad2
Content: Seamlessly deploy RDS with ARM and Azure Marketplace
Content Source: WindowsServerDocs/remote/remote-desktop-services/rds-in-azure.md
Product: windows-server
Technology: remote-desktop-services
GitHub Login: @lizap
Microsoft Alias: elizapo

We hugely appreciate your contribution, feedback, and support to our technical documentation.
We’ve phased out GitHub Issues on this repository as the feedback mechanism for content and have replaced it with a new feedback system. For more information see, Content User Feedback. As part of this rollout, we are migrating your issue where our team will use your comments to improve the documentation experience. Unfortunately, this does mean you won't be able to access this issue after the migration is complete.
All issues will be migrated by Thursday 29th August 2024.
Once again, thank you for your valuable feedback, we hope you’ll continue to contribute using our new feedback system.


Refactor blockly script-tags into index.html

[ ] remove the <script> tags from index.js and move them into an index.html

When using an index.html file, the sheetify styles will not be applied to the views
-> this todo will be covered later

Solved with pull request Refactor index #21


Added support for Instagram code auth

We use instagram codes to auth users from our server.  I've added a way to override access_token auth via the options.
Thanks!

Please excuse my lack of knowledge on this, but do Instagram codes require a client secret key?  Please link me to any relevant documentation so we have it with the pull request.
Thanks,

They do require a secret key.  We did not want to enable instagram's implicit auth for our clientid b/c it's the same one our web site uses.  Implicit auth is less secure especially for web sites:
https://instagram.com/developer/authentication/?hl=en

I see what you're after now.    I was skeptical, because I'd like to prevent people from having their secret key client side whenever possible.  This is not the case in your scenario.
I'm fine with this, but before I merge, I'd like to confirm that you've tested both the implicit and explicit grant in the library after making the change?
Thanks,

I'll re-test today just to confirm and let you know.

Ok, I've confirmed it works.  I can provide sample project if necessary.

I trust you!  I'm glad you took the time to re-test it for me :-)
Thank you for contributing to the project.


Double tap on loxone touch (or other binary sensors

Which Model do you use from loxone? Miniserver? Gen1 or Gen2?
Gen2
Which software version does your loxone use?
13.1
How did you install HomeAssistant? Over Hassio oder manual install?
image for odroid n2+
Which Version do you use of HomeAssistant?
2022.11.4
Describe the bug
When double tapping the loxone touch PyLocoxone / Home assistant often detect only one tap.
Sometimes it registers 2 taps sometimes just one tap. I would say it is about 50/50

Been testing with https://github.com/Loxone/LxCommunicator.NET to find out if it is a problem in loxone or not and this library seems to return every state change.

Could be a websocket delay problem. I can not test it I have no touch. Try to play around with the times for the double tab. Maybe you can fix it that way. On the implementation I can not change anything.


Using TabType="Scrollable" missing scroll/focus

I'm very fond of this component which i find very flexible and performant. Thank you !
However i miss the functionality to automatically (or by calling a build-in method inside OnSelectedIndexChanged) to "automatically" scroll the TabHostView to the currently selected TabItem
Whether I set the SelectedIndex via code to an index currently not visible (not scrolled into view) OR the user "taps" on a partly visible TabItem - the TabHostView is not automatically scrolling the TabItem to be fully visible.
I may very well be missing setting a Property on TabHostView to some "magic" value - but I did consult the sources on github - and i couldn't find either a method nor something that seem to ask the private _scrollView to scroll items to be visible.
What am I missing ?
Regards René

you are missing nothing, it lacks the functionality :)

you are missing nothing, it lacks the functionality :)

Hello @renelaerke were you able to implement this functionality somehow? I'm also trying to implement it.
Thanks in advance

Sorry, but no.
Instead we had to restructure our data-design.
😬 René


Remote debugging does not work with gunicorn

Environment data

VS Code version: 1.25.0
Extension version (available under the Extensions sidebar): 2018.6.0
OS and version: macOS High Sierra, 10.13.5 (17F77)
Python version (& distribution if applicable, e.g. Anaconda): (docker image) python:3.6 (3.6.6: at time of writing)
Type of virtual environment used (N/A | venv | virtualenv | conda | ...): docker container
Relevant/affected Python packages and their versions: ptvsd==3.0.0

Actual behavior
Remote debugging works fine with django's runserver but when switching to gunicorn, debug adapter process terminates unexpectedly.
Expected  behavior
ptvsd should be nicely playing along with gunicorn and enabling python debugging on vsc
Steps to reproduce:

In Django's manage.py:

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings")

    from django.core.management import execute_from_command_line

    from project import settings

    if settings.DEBUG:
        import ptvsd
        ptvsd.enable_attach("random_secret", address = ('<IP_ADDRESS>', 4000))

    execute_from_command_line(sys.argv)

in vsc's launch.json:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Django App on Docker",
            "type": "python",
            "request": "attach",
            "localRoot": "${workspaceRoot}",
            "remoteRoot": "/code",
            "port": 4000,
            "secret": "random_secret",
            "host": "localhost"
        }
    ]
}

Serving project with gunicorn: gunicorn project.wsgi -b <IP_ADDRESS>:8000 --workers 1 --threads 1 --timeout 60 --error-logfile - --access-logfile -
Start debugging in vsc
vsc displays an error saying: "Debug adapter process has terminated unexpectedly"

If I serve the project with Django's runserver it just works.
That means changing the command in step 3 to python manage.py runserver --noreload --nothreading <IP_ADDRESS>:8000
Logs
Output for Python in the Output panel (View→Output, change the drop-down the upper-right of the Output panel to Python)
Starting the classic analysis engine.
##########Linting Output - pylint##########
No config file found, using default configuration
Traceback (most recent call last):
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/decorators.py", line 89, in wrapped
    res = next(generator)
StopIteration

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/decorators.py", line 104, in wrapped
    raise StopIteration
StopIteration

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/pylint/__main__.py", line 7, in <module>
    pylint.run_pylint()
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/pylint/__init__.py", line 16, in run_pylint
    Run(sys.argv[1:])
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/pylint/lint.py", line 1347, in __init__
    linter.check(args)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/pylint/lint.py", line 768, in check
    self._do_check(files_or_modules)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/pylint/lint.py", line 901, in _do_check
    self.check_astroid_module(ast_node, walker, rawcheckers, tokencheckers)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/pylint/lint.py", line 980, in check_astroid_module
    walker.walk(ast_node)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/pylint/utils.py", line 1014, in walk
    self.walk(child)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/pylint/utils.py", line 1011, in walk
    cb(astroid)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/pylint/checkers/variables.py", line 1245, in visit_import
    module = next(node.infer_name_module(parts[0]))
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/context.py", line 71, in cache_generator
    for result in generator:
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/decorators.py", line 89, in wrapped
    res = next(generator)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/inference.py", line 194, in infer_import
    yield self.do_import_module(name)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/mixins.py", line 119, in do_import_module
    relative_only=level and level >= 1)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/scoped_nodes.py", line 593, in import_module
    return MANAGER.ast_from_module_name(absmodname)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/manager.py", line 154, in ast_from_module_name
    return self.ast_from_file(found_spec.location, modname, fallback=False)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/manager.py", line 80, in ast_from_file
    return AstroidBuilder(self).file_build(filepath, modname)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/builder.py", line 153, in file_build
    return self._post_build(module, encoding)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/builder.py", line 173, in _post_build
    self.delayed_assattr(delayed)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/builder.py", line 232, in delayed_assattr
    for inferred in node.expr.infer():
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/decorators.py", line 89, in wrapped
    res = next(generator)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/bases.py", line 95, in _infer_stmts
    for inferred in stmt.infer(context=context):
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/context.py", line 71, in cache_generator
    for result in generator:
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/decorators.py", line 86, in wrapped
    generator = _func(node, context, **kwargs)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/inference.py", line 760, in infer_assign
    stmts = list(self.assigned_stmts(context=context))
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/protocols.py", line 304, in _arguments_infer_argname
    is_metaclass = isinstance(cls, nodes.ClassDef) and cls.type == 'metaclass'
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/scoped_nodes.py", line 1650, in _class_type
    if _is_metaclass(klass):
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/scoped_nodes.py", line 1619, in _is_metaclass
    for baseobj in base.infer():
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/decorators.py", line 89, in wrapped
    res = next(generator)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/bases.py", line 95, in _infer_stmts
    for inferred in stmt.infer(context=context):
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/context.py", line 71, in cache_generator
    for result in generator:
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/decorators.py", line 86, in wrapped
    generator = _func(node, context, **kwargs)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/inference.py", line 219, in infer_import_from
    module = self.do_import_module()
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/mixins.py", line 119, in do_import_module
    relative_only=level and level >= 1)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/scoped_nodes.py", line 593, in import_module
    return MANAGER.ast_from_module_name(absmodname)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/manager.py", line 154, in ast_from_module_name
    return self.ast_from_file(found_spec.location, modname, fallback=False)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/manager.py", line 80, in ast_from_file
    return AstroidBuilder(self).file_build(filepath, modname)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/builder.py", line 153, in file_build
    return self._post_build(module, encoding)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/builder.py", line 173, in _post_build
    self.delayed_assattr(delayed)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/builder.py", line 232, in delayed_assattr
    for inferred in node.expr.infer():
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/decorators.py", line 89, in wrapped
    res = next(generator)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/bases.py", line 95, in _infer_stmts
    for inferred in stmt.infer(context=context):
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/context.py", line 71, in cache_generator
    for result in generator:
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/decorators.py", line 86, in wrapped
    generator = _func(node, context, **kwargs)
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/inference.py", line 760, in infer_assign
    stmts = list(self.assigned_stmts(context=context))
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/protocols.py", line 304, in _arguments_infer_argname
    is_metaclass = isinstance(cls, nodes.ClassDef) and cls.type == 'metaclass'
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/scoped_nodes.py", line 1650, in _class_type
    if _is_metaclass(klass):
  File "/Users/user/Library/Python/3.7/lib/python/site-packages/astroid/scoped_nodes.py", line 1619, in _is_metaclass
    for baseobj in base.infer():
RuntimeError: generator raised StopIteration

Output from Console under the Developer Tools panel (toggle Developer Tools on under Help)
/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:1375  INFO no standard startup: panel is active
/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:270 [Extension Host] vscode-icons is active!
/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:270 [Extension Host] activating extension
/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:2364 Debug adapter process has terminated unexpectedly

/cc @qubitron

We will have to reproduce this to follow through on the fix. It's odd to see pylint in the stack...

The python log doesn't seem to be relevant since it is on the host where vsc runs, not on the docker container where the project runs.

Gunicorn relies on forking,  Unfortunately that is incompatible with the debugger currently.  I'm going to change this to a feature request but don't expect we'll be able to get to it for a while.  Sorry.

@ericsnowcurrently @DonJayamanne would this be solved by subprocess debugging?

Yes

I realize what I'm trying to do now might running inside of gunicorn (using Azure Machine Learning compute as a debugging target). This might explain what I've been seeing... Has this since been fixed? Or is in in some version that's in the Insider program I could use to test my use case?

@karthiknadig is this still an issue?

I had worked with @omartin2010 to address #4449 some time in March. Which seems related to this issue. In #4449 problem occurs after connecting to gunicorn. So, I feel like this is already addressed.
Also, the debugger reported here is ptvsd==3.0 we deprecated "secret" in 4.0.

This is still an issue. VS Code debugger can connect to a Python script running under Gunicorn but fails immediately with the error "Debug adapter process has terminated unexpectedly". The debugger tool bar shows for a second then disappears.
My Env:
OSX 10.14.6
VSCode 1.38.1
VS Code Python Extension: 2019.9.34911
Python: 3.7.4
ptvsd==4.3.2
gunicorn==19.9.0

Yeah, I tried to get it to work the other day too but couldn't. Switched back to using django-admin runserver.

@mikeboulet Can you open a separate bug in the debugger repo? https://github.com/Microsoft/ptvsd Please provide information such as how are you launching the debugger (using command line or enable_attach), the debug config json that you are using, and if possible share the bit of code.

@jonespm Can you file a bug on the debugger repo as well?

@mikeboulet Thanks for filing the issue https://github.com/microsoft/ptvsd/issues/1793. I am happy we were able to resolve it.
Locking this thread.


infer export with --html have no result

xcodebuild
how can I convert bugs.txt to bugs.html   ?
I have find 'finfer --html ' option, but have no effect.

It's an option of infer explore, you can run infer explore --html after the analysis to generate the HTML report.
I agree that it is confusing and infer --html -- xcodebuild .. should also produce the HTML report. I'd very much welcome a PR to do that.

explore

thank you for your help


Addition of a flag in the schema to define local types

It may be a bit convoluted but it would be nice to specify a type that is local only in the schema so that the schema can be shared and sync-ed partially.
My issue case: I would like to create a user model with attributes. I would to take advantage of  pouch features but I don't want user attributes to be synchronised the usual way (instead I want to rely on pouch-auth to update the _users record).
Working in Ember, if that's a feature worth exploring, it will be great to have that available in Ember-pouch.
Let me know what your thoughts are before I dig into the potential implementation.
Thanks

Because there is a _rev per record you can perhaps do this per model and not per attribute/record. That implies that a record containing a belongsTo can be Synced but the data the belongsTo links to is behind the local flag. Perhaps this is to convoluted. Will have to think about it.
Perhaps interesting https://github.com/martinic/ember-simple-auth-pouch that is still in Beta but works fine. See it in action https://bloggr.exmer.com


Documentation/link not up to date

Reading the readme to try to setup a regtest node I followed the link:
https://lbry.tech/resources/regtest-setup
But it gives error 404.
Also, when trying to subscribe to the technical newsletter I get this error: "this endpoint is deprecated"

Another problem is that https://lbry.science/ gives cloudflare error with invalid certificate


Does Dynamoose do table reference like Mongoose?

Hey guys, hope you doing well...
Just wondering how can we do the table reference, example using mongoose:
const ProfileSchema = new MongooseSchema({
   owner: {
     type: Schema.Types.ObjectId,  //referring to object id in the table specified in the next line
     ref: 'Users'  //referring to Users table
    },
    {
      //other stuff
    }
});

Any workaround or something?
Cheers~

@neko1101 Without more context about what you are trying to do, I'm kinda only guessing here. But is Model.populate what you are looking to do?

@fishcharlie exactly what im looking for!
Basically I'm trying to reference the owner ID of documents in a table with Users table so I don't need to query 2 times to get the documents with owner data inside it.
I've been searching for it with a wrong keyword. "model.populate" is the one.
Cheers!

@neko1101 Awesome!! Glad that’s what you are looking for. Let me know if you have any other questions or run into any problems with Dynamoose.

@fishcharlie i have problem implementing this.
Can you help or give me some clue on how to use populate properly?

@neko1101 Are you getting an error with this? What is the current result?
I have never actually used the Model.populate method before. But few things stand out that I would try.
First, I would try returning the posts.populate method call. For example:
Blog.scan().exec()
  .then(posts => {
    return posts.populate({
      path: 'googleID',
      model: 'User'
    });
  })
  .then(populatedPosts => {
   console.log(populatedPosts);
  })
  .catch(err => console.log(err));

If that still doesn't work. The documentation uses examples for get and not scan. So I would try something like the following:
Blog.scan().exec()
  .then(posts => {
    return Promise.all(posts.map(post => post.populate({
      path: 'googleID',
      model: 'User'
    })));
  })
  .then(populatedPosts => {
   console.log(populatedPosts);
  })
  .catch(err => console.log(err));

I kinda doubt that second example is correct. But I could be totally wrong.
If you could provide more detail about what is going wrong (error message, current result, etc.) that'd be super helpful.
One other trick. If before running your system you run export DEBUG=* or export DEBUG=dynamoose*, Dynamoose will print debug logs. Those can be super helpful in figuring out what is going wrong. It does print a lot of logs, so it can take some time to go through them all. But that can be a super useful debugging trick.
Let me know when you can provide more information, and I can try to help further.

Hey! The 2nd example worked for scan
I was thinking to use Promise.all and foreach(), but your example is more neat using map()
The 1st example only work using get
No wonder all the example of populate only using get
And thanks for the export DEBUG=dynamoose*. Really helpful and this should be in the doc.
Cheers!

@neko1101 I could have sworn I replied to you earlier. But for some reason it's not showing.
That's awesome it's working! Can you let me know what the result was when using your code, and my first suggestion? I feel like maybe our code could be improved to support my first suggestion.  So knowing what the result was would be helpful. Did it throw an error? Just fail silently? Or what happened?
In terms of the documentation. Feel free to create a PR! Or if you don't want to do that, just create a separate issue so we can track it separately. 😃

@fishcharlie below is my playground folder if you wanna replicate this.
I'm using DynamoDB AWS + lamda + serverless and not the dynamoose.local() anymore.
playground/User.js
require('dotenv').config();
const dynamoose = require('dynamoose');
const Schema = dynamoose.Schema;

const UserSchema = new Schema({
  googleID: {
    type: String,
    required: true,
    hashkey: true,
  },
  email: {
    type: String,
    required: true,
    rangeKey: true
  },
  firstName: {
    type: String
  },
  lastName: {
    type: String
  },
  image: {
    type: String
  }
});

dynamoose.model('users', UserSchema, {update: true});

playground/Blog.js
require('dotenv').config();
const dynamoose = require('dynamoose');
const Schema = dynamoose.Schema;
const uuid = require('uuid/v1');

const BlogSchema = new Schema({
  id: {
    type: String,
    hashkey: true,
    default: uuid()
  },
  title: {
    type: String,
    required: true
  },
  body: {
    type: String,
    required: true
  },
  status: {
    type: String,
    default: 'draft'
  },
  comments: [{
    commentBody: {
      type: String,
      required: true
    },
    commentDate: {
      type: Date,
      default: Date.now
    },
    googleID: {
      type: String,
      required: true
    }
  }],
  user: {
    googleID: {
      type: String,
      required: true
    },
    email: {
      type: String,
      required: true
    }
  },
  date: {
    type: Date,
    default: Date.now
  }
});

dynamoose.model('blog', BlogSchema, {update: true});

playground/populate.js
require('dotenv').config();
const dynamoose = require('dynamoose');
require('../models/Blog');
require('../models/User');
const Blog = dynamoose.model('blog');
const User = dynamoose.model('users');

// Scan is working...
Blog.scan().exec()
  .then(posts => {
   console.log(posts);
  })
  .catch(err => console.log(err));

// This one giving error "post.populate is not a function"
Blog.scan().exec()
  .then(posts => {
    return posts.populate({
      path: 'user',
      model: 'users'
    });
  })
  .then(populatedPosts => {
   console.log(populatedPosts);
  })
  .catch(err => console.log(err));

// This one works!
Blog.scan().exec()
.then(posts => {
  return Promise.all(posts.map(post => post.populate({
    path: 'user',
    model: 'users'
  })));
})
.then(populatedPosts => {
 console.log(populatedPosts);
})
.catch(err => console.log(err));

// This one work with get()
Blog.get('blog-id-here').exec()
  .then(posts => {
    return posts.populate({
      path: 'user',
      model: 'users'
    });
  })
  .then(populatedPosts => {
   console.log(populatedPosts);
  })
  .catch(err => console.log(err));

if you want to run locally specify playground/.env
AWS_ACCESS_KEY_ID=<IAM_KEY>
AWS_SECRET_ACCESS_KEY=<IAM_SECRET>
AWS_REGION=<REGION_OF_DYNAMODB>
DEBUG=dynamoose*

if you want to run it in lamda, just attach DynamoDB IAM role and give it full permission HAHA.
Let me know if you need more info.

@neko1101 What was the result tho? I don't have a ton of time to test that code right now. I was just hoping to know what the result was. 😃

@fishcharlie Sorry about that :sweat_smile:
The result is in the comment in populate.js.
Lets be clear.
The result of scan() + populate() will give error like "post.populate is not a function".
In order to make it work, use your example to loop the scan result with populate.
The result of get() + populate() works as usual.
Let's close this issue. :ok_hand:
Cheers!


Create a rush-dep-graph-plugin Rush plugin to display the dependency graph.

[x] Yes
[ ] No

If No, please run rush change before, this is necessary.
If adding a new feature, the PR's description includes:

[x] Reason for adding this feature
[x] How to use
[x] A basic example

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

[ ] Yes
[x] No

If yes, please describe the impact and migration path for existing applications:
Summary
Create a rush-dep-graph-plugin Rush plugin to display the dependency graph.
Detail
Usage: rush dep-graph [OPTIONS]

Options:
  -t, --to <PROJECT_NAME>       Select the packages that depend on specific project.
  -f, --from <PROJECT_NAME>     Select the package that is dependent on specific package.
  --filter <PROJECT_NAME>       Select the packages based on a custom filter criteria, such as specific keywords in the package name.

How to test it
cd rush-plugins/rush-dep-graph-plugin
rushx test

LGTM


Trouble installing custom version of DyNet with Boost

Hi Vlad, thank you for the exciting resource. Looking forward to trying it out!
I am trying to install all of the dependencies. I am having trouble getting DyNet installed using the DyNet fork.
I have followed the instructions to install DyNet for C++ here: https://dynet.readthedocs.io/en/latest/install.html#building
Where I have diverged from the official instructions is instead of cloning the official DyNet repo:
git clone https://github.com/clab/dynet.git
I am cloning your custom version:
git clone https://github.com/vene/dynet.git.
I am then switching to the py3 branch: git checkout py3.
I am then running the cmake command as normal:
(base) jbarry@jbarry-desktop:~/dynet-base3/dynet/build$ cmake .. -DEIGEN3_INCLUDE_DIR=/home/jbarry/dynet-base3/eigen -DENABLE_CPP_EXAMPLES=ON
-- Boost dir is Boost_INCLUDE_DIR-NOTFOUND
CMake Error at /usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:146 (message):
  Could NOT find Boost (missing: Boost_INCLUDE_DIR program_options regex
  serialization)
Call Stack (most recent call first):
  /usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:393 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake-3.16/Modules/FindBoost.cmake:2179 (find_package_handle_standard_args)
  CMakeLists.txt:103 (find_package)

-- Configuring incomplete, errors occurred!
See also "/home/jbarry/dynet-base3/dynet/build/CMakeFiles/CMakeOutput.log".

I then tried downloading Boost v 1.62 which seemed to be the most recent version of Boost at the time of the Dynet fork around November 2016 and tried again using the instructions for compiling with Boost:
(lp-sparsemap-pt-dy-custom) jbarry@jbarry-desktop:~/dynet-base3/dynet/build$ cmake .. -DEIGEN3_INCLUDE_DIR=/home/jbarry/dynet-base3/eigen -DENABLE_CPP_EXAMPLES=ON -DENABLE_BOOST=ON
-- Boost dir is /home/jbarry/dynet-base3/boost
CMake Error at /usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:146 (message):
  Could NOT find Boost (missing: program_options regex serialization) (found
  version "1.62.0")
Call Stack (most recent call first):
  /usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:393 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake-3.16/Modules/FindBoost.cmake:2179 (find_package_handle_standard_args)
  CMakeLists.txt:103 (find_package)

-- Configuring incomplete, errors occurred!
See also "/home/jbarry/dynet-base3/dynet/build/CMakeFiles/CMakeOutput.log".

I am probably doing something completely wrong when compiling with Boost. Apologies as I am quite inexperienced with using cmake commands and editing CMake options. Here is how my DyNet base directory looks:
(lp-sparsemap-pt-dy-custom) jbarry@jbarry-desktop:~/dynet-base3$ ls
boost dynet  eigen

ls dynet/
build  cmake  CMakeLists.txt  config.h.cmake  doc  dynet  examples  external  LICENSE  MEM.notes  pyexamples  python  python_tests  README.md  rnnlm  tests  tutorial

I'm just wondering if you have any pointers to install this correctly? I was able to successfully install the official DyNet code in a separate environment without Boost. Attached is the CMakeFiles/CMakeOutput.log if it helps. Many thanks!
CMakeOutput.log

I'm sorry, I misinterpreted the meaning of "standard location" in the DyNet docs (I thought the boost folder had to be placed in the base directory along with eigen). The problem was fixed with installing boost on my system:
sudo apt-get install libboost-all-dev

Happy this worked-- I want to add that it should be possible to build dynet without boost at all (this is how I've been doing it). I think there is a cmake flag for thism

Hey Vlad, thanks! And I also made the mistake of building on the py3 branch instead of targets (that might have something to do with why boost was needed). After I installed Dynet with boost, I realised I had used the wrong branch :) so I ran everything again and built the tool with no errors. I will try to run a few of the examples and see how I get on and will open a separate issue (to keep the issues on topic) if I get stuck!


Zend\Paginator\Paginator caching doesn't work with profiler

When profiling is turned ON, function Zend\Paginator\Paginator::_getCacheInternalId() will always return random value(Zend_Paginator_1_<random hash>).
It happens because Zend\Paginator\Paginator::getAdapter() contains timestamps for profiling queries.

This issue has been closed as part of the bug migration program as outlined here - http://framework.zend.com/blog/2016-04-11-issue-closures.html


[fxcop] Fixes for Wox.Plugin (3of3) - enable FxCop Analyzer

Summary of the Pull Request
This PR contains changes to enable fxcop analyzer for Wox.Plugin
Note: This PR will be merged after PRs https://github.com/microsoft/PowerToys/pull/7457 and https://github.com/microsoft/PowerToys/pull/7464 have been merged since the fixes for fxcop errors are contained in those PRs
PR Checklist

[x] Applies to #5129
[x] CLA signed. If not, go over here and sign the CLA
[x] Tests added/passed
[ ] Requires documentation to be updated
[ ] I've discussed this with core contributors already. If not checked, I'm ready to accept this work might be rejected in favor of a different grand plan. Issue number where discussion took place: #xxx

Info on Pull Request
What does this include?
Validation Steps Performed
Built solution and ran unit tests

@avneet-kr @ryanbodrug-microsoft
there are some build breaks.

@enricogior The build fails due to Fxcop errors that are introduced when FxCopAnalyzer is enabled in this PR. Those errors have been fixed in PRs #7457 and #7464. This PR will only be merged in after those two PRs are in

@avneet-kr @ryanbodrug-microsoft
there are some build breaks.

Sorry for the confusion Enrico.  I gave avneet the green light to complete this PR once her other Prs are in, as this is just enabling FXCop, and knowing she won't be able to merge the PR until all the warnings have been fixed (in seperate PRs).

I changed this to Draft to avoid CI to try to run it again.

/azp run


Reusage of Feature

I'm using a single activity with view based navigation (with the help of https://github.com/bluelinelabs/Conductor)
This means, I create controller classes (actually a view) that are added/removed to the activity, depedning on the current state. This controllers have their own lifecycle like events like onCreate and onDestroy for example. Therefore they all have their own LifecycleFeatureHost (a simple feature, that just does something in onCreate and onDestroy to make it easier) to which they add their own features (logger feature, toolbar feature and similar).
When using features like that, I'm somehow lost, when I want to dispatch an event, because I have to iterate over all existing LifecylceFeatureHosts. This means manually keeping track on them... Because if I dispatch an event, I want that all currently existing controllers get the event.
Any ideas on that?
My idea is following:
It should be possible to add/remove features to a host... This way, I could create one LifecycleFeatureHost in my activity (or even use a singleton) and pass it to my controllers, then they add their own features when necessary and remove them again when necessary. Every controller can then dispatch an event and all other controllers will receive this event as well, if they are currently registered at the host.
Simply adding following to the FeatureHost should do it:
public void add(F feature) {
    Class<F> clazz = (Class<F>) feature.getClass();
    if (mFeatures.containsKey(clazz)) {
        throw new IllegalArgumentException(
                String.format("Feature %s is already registered", clazz));
    }
    mFeatures.put(clazz, feature);
    feature.attachFeatureHost(this);
}

public boolean remove(F feature) {
    Class<F> clazz = (Class<F>) feature.getClass();
    F f = mFeatures.remove(clazz)) ;
    return f != null;
}

What do you say? Does anything speak against that? It's limited though, as you can't register features of one class multiple times, but that's of for my use case... I would have an idea to solve that though as well. But I'm waiting for your response, maybe there is a big reason that speaks against this all...
Edit
As the features are currently bound to the main thread, it probably makes sense to make sure, the add/remove functions are called on the main thread as well

I'm testing this out and I would make a pull request afterwards, if you like this idea and don't see any problems...

I didn't use conductor before, but just looked into the lifecycle docs and demo app. As far as I can see, each controller (as defined by conductor) has the same lifecycle: onCreateView(), onAttach(), controller in focus, onDetach(), onDestroyView(), onDestroy().
Now, as you described, we can decompose controller's code into smaller features. For that I would also define a ControllerFeature reflecting original controller lifecycle. Then I would implement a generic FeaturedController class with a ControllerFeatureHost field. FeaturedController should forward events to its own ControllerFeatureHost host. All other controllers should extend the FeaturedController class. If designed like this, all your features will receive lifecycle events "automatically". You don't need to iterate through all feature hosts then, because controllers will receive lifecycle events and dispatch them to their feature hosts.
Am I right or do I miss something?

That sounds good as well. I thought about something similar too but then I thought a add/remove function is so easy and flexible...
I actually don't really need shared life cycle events but more some extra events to share events between my controllers. I use it currently like a activity internal bus... one controller has a menu and if an item is selected this is event is dispatched and another controller has overwritten the dispatching method and handles the event  (or even more controllers). Another example is a filter event in on controller... which updates another one.
Your suggestion works as well as far as I see. But still, why are you restricting following:

only one feature per class
no add/remove functions for features

Are there any reasons for that?

Thinking about it again I think you miss a point. I had what you suggest. The problem is I don't want shared life cycle events but some manually dispatched events.
So one controller dispatches an event and I want to receive this event in another controller (or even in more other controllers).
With a Base controller like you suggest all controllers have their own feature host and therefore I can't dispatch and event to all hosts directly...

I suspected you had an issue with additional custom events, which do not belong to the controller lifecycle. There is no built-in solution for this use case, because it is a mixed case, where lifecycle of controllers is mixed with lifecycle of another component sending those customer events. This is rather an event bus use case (fire and forget). Featured forces a bit most strict design. That's why it is not an event bus.
Nevertheless you can solve it with featured as well. I would do it like this. I would create an EventProxyFeature with addFeatureHost() and removeFeatureHost() methods. All this feature does when receiving an event is to dispatch that event further to the kept feature hosts. Then your FeaturedController  has to somehow register/unregister its feature host at that EventProxyFeature. Now you can create another feature host with a single EventProxyFeature and dispatch all custom events though that feature host. The events will be forwarded to all other features automatically.
Hope this helps.

Thanks for the explanation. Actually you're right, I was trying to implement an event bus that is not completely loosely coupled...
After trying around and seeing how it works in the end, I'll stay with the RXBus I've created.


ci: add sonar scan

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license
Summary
(describe what this merge request does)
Implementation highlights
(describe how the merge request does for feature changes, share the RFC link if it has)
Test checklist

[ ] add new test cases
[ ] all code changes are covered by unit tests
[ ] end-to-end tests

[ ] deploy web console with CloudFront + S3 + API gateway
[ ] deploy web console within VPC
[ ] deploy ingestion server

[ ] with MSK sink
[ ] with KDS sink
[ ] with S3 sink

[ ] deploy data processing
[ ] deploy data modeling

[ ] new Redshift Serverless
[ ] provisioned Redshift
[ ] Athena

[ ] deploy with reporting
[ ] streaming ingestion

[ ] with Redshift Serverless
[ ] with provisioned Redshift

Is it a breaking change

[ ] add parameters without default value in stack
[ ] introduce new service permission in stack
[ ] introduce new top level stack module

Miscellaneous

[ ] introduce new symbol link source file(s) to be shared among infra code, web console frontend, and web console backend

SonarQube Quality Gate Result

Result: :exclamation: Error
Triggered by @zxkane on pull_request

Metric
Status
Value
Error Threshold

Reliability rating
:white_check_mark: OK
1
> 1

Security rating
:white_check_mark: OK
1
> 1

Sqale rating
:white_check_mark: OK
1
> 1

Coverage
:white_check_mark: OK
82.20
< 80

Duplicated lines density
:white_check_mark: OK
5.40
> 30

Blocker violations
:white_check_mark: OK
0
> 0

Bugs
:white_check_mark: OK
0
> 0

Code smells
:white_check_mark: OK
5
> 40

Critical violations
:exclamation: Error
4
> 0

Major violations
:white_check_mark: OK
0
> 0

Vulnerabilities
:white_check_mark: OK
0
> 0

View on SonarQube
updated: 5/7/2024, 02:42:50 (UTC+0)

SonarQube Quality Gate Result

Result: :exclamation: Error
Triggered by @zxkane on pull_request

Metric
Status
Value
Error Threshold

Reliability rating
:white_check_mark: OK
1
> 1

Security rating
:white_check_mark: OK
1
> 1

Sqale rating
:white_check_mark: OK
1
> 1

Coverage
:white_check_mark: OK
82.20
< 80

Duplicated lines density
:white_check_mark: OK
5.40
> 30

Blocker violations
:white_check_mark: OK
0
> 0

Bugs
:white_check_mark: OK
0
> 0

Code smells
:white_check_mark: OK
5
> 40

Critical violations
:exclamation: Error
4
> 0

Major violations
:white_check_mark: OK
0
> 0

Vulnerabilities
:white_check_mark: OK
0
> 0

View on SonarQube
updated: 5/7/2024, 03:22:18 (UTC+0)

SonarQube Quality Gate Result

Result: :white_check_mark: OK
Triggered by @zxkane on pull_request

Metric
Status
Value
Error Threshold

Reliability rating
:white_check_mark: OK
1
> 1

Security rating
:white_check_mark: OK
1
> 1

Sqale rating
:white_check_mark: OK
1
> 1

Coverage
:white_check_mark: OK
82.30
< 80

Duplicated lines density
:white_check_mark: OK
5.40
> 30

Blocker violations
:white_check_mark: OK
0
> 0

Bugs
:white_check_mark: OK
0
> 0

Code smells
:white_check_mark: OK
1
> 40

Critical violations
:white_check_mark: OK
0
> 0

Major violations
:white_check_mark: OK
0
> 0

Vulnerabilities
:white_check_mark: OK
0
> 0

View on SonarQube
updated: 5/7/2024, 04:02:35 (UTC+0)

SonarQube Quality Gate Result

Result: :white_check_mark: OK
Triggered by @zxkane on pull_request

Metric
Status
Value
Error Threshold

Reliability rating
:white_check_mark: OK
1
> 1

Security rating
:white_check_mark: OK
1
> 1

Sqale rating
:white_check_mark: OK
1
> 1

Coverage
:white_check_mark: OK
82.10
< 80

Duplicated lines density
:white_check_mark: OK
5.40
> 30

Blocker violations
:white_check_mark: OK
0
> 0

Bugs
:white_check_mark: OK
0
> 0

Code smells
:white_check_mark: OK
1
> 40

Critical violations
:white_check_mark: OK
0
> 0

Major violations
:white_check_mark: OK
0
> 0

Vulnerabilities
:white_check_mark: OK
0
> 0

View on SonarQube
updated: 5/8/2024, 04:06:26 (UTC+0)


Icon Request: PIX

Icon Request

Icon name: pix payment method
Tags of this icon: payment, pix, checkout, order, finance
Use case: PIX is a Brazilian payment method for instant payment, similar to FedNow in the USA. Your icon would be used when finalizing an order or when displaying accepted payment methods
Screenshots of similar icons:

https://remixicon.com/icon/pix-fill
https://remixicon.com/icon/pix-line
Please check your icon, which we added in 4.4.0
If you like our project, hope you can Star our project


MockSocket should implement EventTarget methods

According to WebSocket spec, WebSocket inherits EventTarget so it should implement addEventListener, removeEventListener and dispatchEvent methods. Some libraries/frameworks (e.g. Reactive Extensions) use them. The proposed implementation is not complete as it does not handle third parameter of addEventListener/removeEventListener methods but I believe it should be enough for mocking purposes.

@vlizard Awesome work! Thanks :+1:

@vlizard I will bump the npm/bower versions to 0.4 which will have your changes.

Cool! Thanks for this great library.

@thoov It seems new version was not published to npm registry... Could you please do it?

@vlizard Thats what I forgot. There should be 0.4.0 out now with your changes.

@thoov Thank you!


Bug - StatusBar value not showing

In ServicesPage, the StatusBar component was not showing value because of previously changed styles that animated transform rather than width. This PR updates StatusBar accordingly.

Reviewer: @orlandohohmeier


Clarify how to load basic files from host fs

I'm new to the environment and had a little bit of trouble running basic files.  While the "Dealing with BASIC Programs" section was helpful, I didn't think it was clear enough.
I've also cleaned up some tables (missing right |, spacing, etc.), and added missing closing quotes in the LOAD example.

The missing closing quotes are actually optional on CBM-style quoted strings if the strings continue to the end of line, but closing them is also fine :)


Don't add first/last classes if they already exist

I am using dir="rtl" on a wrapper to reverse the ordering of columns. It works fine, but obviously the column margins are wrong.
I have tried manually adding class="last" to the first column and class="first" to the last column. This works, but not entirely as Foundation also adds the 'first' class to the first column and the 'last' class to the last column.
Here's my INKY code:
<wrapper class="product" dir="rtl">
  <row>
    <columns small="6" large="3" dir="ltr" class="last">

    </columns>
    <columns small="6" large="3" dir="ltr" class="first">

Some Text

    </columns>
  </row>
</wrapper>

This produces the following HTML:

Some Text

As you can see, despite me manually adding the first and last classes, they are also added by Foundation. Could it be made so if these classes already exist, Foundation does not add them?

Hmm. I understand the concept you are going for here - and I think this is something Inky can handle better for us.
I think Inky should swap the classes .first and .last for us when it sees dir="rtl"
Thoughts?

Ran into this today also. @rafibomb I think your suggestion sounds excellent.

+1


Fix CNI log levels

Please provide a description of this PR:
Fixes https://github.com/istio/istio/issues/50958
Currently, we use different scopes for all the subcomponents:

plugin install
sidecar repair
ambient agent
out-of-process CNI plugin

which means that default:XXXX does not work as you'd expect at all (it's in fact mostly useless), which leads to a lot of confusion when configuring istio-cni logging levels - you either have to use all:XXX or know your subcomponents. In practice using separate scopes hurts more than it helps.
Also, there's no real reason why we should ask the end-user to separately configure the out-of-process plugin log level, it should just inherit.
This moves all istio-cni logging to use the default scope, using labels for the different components, and removes the user-facing separate plugin logging config in favor of inheriting the level from the agent.
NOTE: this depends on https://github.com/istio/istio/pull/51050 (and duplicates commits from it), and should be DNM'd until that goes in.

I think there may be some misunderstand on how the scopes work?
If CNI should use default scope everywhere, why just CNI? That is inconsistent, and we should do the same everywhere. Scopes, though, are useful -- so I don't think we want to d othat
default:debug is a bad rule to set. that means "set everything without a scope to be debug".  Fixing those cases would be good.
Seems like what you are looking for is all:debug?

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

Test name
Commit
Details
Required
Rerun command

unit-tests-arm64_istio
63e164f5a37b8fd1873046ad0d2b501daea840c1
link
true
/test unit-tests-arm64

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

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

Test name
Commit
Details
Required
Rerun command

unit-tests-arm64_istio
63e164f5a37b8fd1873046ad0d2b501daea840c1
link
true
/test unit-tests-arm64

unit-tests_istio
63e164f5a37b8fd1873046ad0d2b501daea840c1
link
true
/test unit-tests

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

I think there may be some misunderstand on how the scopes work?

The main thing is that unless they can be nested and auto inherit the parent scope (which AFAICT they cannot), in this component they're less useful than just labels. We get no real benefit from the segregation, there are no real cases where we'd only want plugin logs, but not ambient informer logs, for instance - that's not a practically useful level of granularity.

If CNI should use default scope everywhere, why just CNI? That is inconsistent, and we should do the same everywhere. Scopes, though, are useful -- so I don't think we want to do that

They can be, but

Their use in istio-cni is not correct (this was prompted by a user debugging session being harder to set up than it really should have been, because of goofy scoping)
I don't know that in istio-cni specifically that separate scoping is useful - it's one node agent with different features enabled via flag. 99.9% of the time, you want all enabled features to use the same logging level. So IMO labels are a better fit for that.

default:debug is a bad rule to set. that means "set everything without a scope to be debug".  Fixing those cases would be good.

I am fine creating a top-level cni scope, if default is not allowed.

Seems like what you are looking for is all:debug?

Yes, but in the values.yaml we set
    # change cni scope level to control logging out of istio-cni-node DaemonSet
    logging:
      level: default:info,cni:info

which (if you don't know our logging levels) is confusing - why would anyone know the difference between default and all?
It sounds like you're saying we should just basically not use default - that's fine, I'll use a scope of cni for this component.

I still don't get it. If you don't care about scopes then set all? I don't see why we don't think anyone could possibly care about fine grained scopes. If the helm chart is confusing (it is) we can fix that without removing all the scopes

I still don't get it. If you don't care about scopes then set all? I don't see why we don't think anyone could possibly care about fine grained scopes. If the helm chart is confusing (it is) we can fix that without removing all the scopes

With the current scoping in istio-cni, no one except istio-cni developers has the context to know how to use them individually, realistically.
If no one but people so familiar with the code that they understand the implicit dependencies between the inner components can intelligently make use of the granular scopes, and those people don't use selective granular scopes (I don't, I doubt any other maintainers do for this component) - why do we use scopes vs labels? I can't think of a reason.

The plugin stuff is weird though, since there are basically 2 plugin levels (what level the plugin sends over UDS, and what level the daemonset logs from the plugin); we could probably collapse that (either send all over UDS and filter in DS, or opposite)

The plugin stuff is weird though, since there are basically 2 plugin levels (what level the plugin sends over UDS, and what level the daemonset logs from the plugin); we could probably collapse that (either send all over UDS and filter in DS, or opposite)

Yes, it is weird. I considered just sending everything and filtering serverside (that is simpler) but that has ~some perf implications? Probably not much. If you wanna have a toggle just on one end, I'll do that.

If a user doesn't understand the scopes and just wants "all the logs" for debugging, they should not use scopes and should use all.
Why would we remove scopes in CNI and not in all of istio?

Why would we remove scopes in CNI and not in all of istio?

I don't have an opinion on that really, but that's IMO strictly out of scope (no pun intended) for this PR - it's not an argument for why they should be used here.
Scopes make much more sense for things in the datapath IMO where you might have or want different log streams with hugely varying volumes that go to different places - access logs + other stuff, basically.
CNI isn't in the datapath. You either want to trace the flow of pod add/pod remove events thru all the components, or you don't.
Labels give context, context is what we need here. We don't have a requirement for sub-component toggling, and probably never will

I don't have an opinion on that really, that's IMO strictly out of scope (no pun intended) for this PR - and it's not an argument for why they should be used here, either way.

Keeping components of Istio consistent is always in scope :slightly_smiling_face: .

I don't have an opinion on that really, that's IMO strictly out of scope (no pun intended) for this PR - and it's not an argument for why they should be used here, either way.

Keeping components of Istio consistent is always in scope 🙂 .

Fair - for me it comes back to the datapath thing tho - istio-cni is not part of that, it doesn't have log streams that would be directed to different locations. In that scenario scopes are mostly just useful as labeling, so might as well use labels.

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

Test name
Commit
Details
Required
Rerun command

unit-tests-arm64_istio
63e164f5a37b8fd1873046ad0d2b501daea840c1
link
true
/test unit-tests-arm64

unit-tests_istio
63e164f5a37b8fd1873046ad0d2b501daea840c1
link
true
/test unit-tests

release-notes_istio
5e7265d118c6c1c9375a0002532bf40b3de9c058
link
true
/test release-notes

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

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

Test name
Commit
Details
Required
Rerun command

unit-tests_istio
63e164f5a37b8fd1873046ad0d2b501daea840c1
link
true
/test unit-tests

unit-tests-arm64_istio
98d5bb493d3d038c65d5572a21cf7a080066738c
link
true
/test unit-tests-arm64

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

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

Test name
Commit
Details
Required
Rerun command

unit-tests-arm64_istio
98d5bb493d3d038c65d5572a21cf7a080066738c
link
true
/test unit-tests-arm64

unit-tests_istio
98d5bb493d3d038c65d5572a21cf7a080066738c
link
true
/test unit-tests

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

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

Test name
Commit
Details
Required
Rerun command

unit-tests_istio
98d5bb493d3d038c65d5572a21cf7a080066738c
link
true
/test unit-tests

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

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

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

Test name
Commit
Details
Required
Rerun command

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

unit-tests_istio
e774aac0e86e05c3b90a6456e4955a0c0868cb0b
link
true
/test unit-tests

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

Couple of things we can do here (I'm open to any of these):

Use single cni scope for all of the istio-cni component instead of default scope (arguably no better than using default, requires a few more lines of explicit scope management), and use labels for subcomponent context.
Use single default scope for all of the istio-cni component, and use labels for subcomponent logging context (current PR approach).
Either of the above, and use no labels for subcomponent context (simplest)
None of the above - keep some degree of subcomponent-level independent log toggling (probably only useful to Istio devs given the nature of this component, current granularity is excessive and unused, if we really want this, we need to identify what scopes we want within the istio-cni component and where)

@howardjohn lmk your thoughts on this, or if there's another option I didn't identify.

I would do (4), and we at the very least want scopes for the plugin vs the server

I would do (4), and we at the very least want scopes for the plugin vs the server

I would do (4), and we at the very least want scopes for the plugin vs the server

I added those 2 scopes - note tho that the original impetus for this PR was to make the plugin auto-inherit the agent log level, and that doesn't change with this.

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

Test name
Commit
Details
Required
Rerun command

integ-security-multicluster_istio
31974e29e88213d96c701d81ff0f1ac583fdd273
link
unknown
/test integ-security-multicluster

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

/test integ-security-multicluster


Add link to demo page in README

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

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Chapter 20

page 703 typo
Then we we can rewrite
page 694, equation 20.126
Error in the index of the sum, it is supposed to be $j \in nbr_i$
page 693
... solving the eigenvalue problem $L z_i = \lambda D z_i$ ...
First, isn't it a generalized eigenvalue problem?
Second, isn't $lambda$ missing an $i$ index?
page 692 typo
... a lower dimensional space perserves the reconstruction weights ...
page 686 typo
... it is better to use an bound optimization algorithm ...
page 673, equation 20.91 typo
The lower left block is wrong. It should be $W_y W_x^T$ and not $W_y W_y^T$.
page 667, equation 20.68 typo
In equation 20.68, it looks like $f(w; \theta)$ is wrong, it must be $f(z; theta)$
page 652, figure 20.1
I don't see a correspondence between caption and picture. Picture only contains circles, while caption references both circles and crosses. Also, caption mentions star, but I don't see a star in the picture.

fixed, thanks