Add systemd installation method

https://github.com/owncast/owncast/issues/521

Okay, thanks for the review. I will wait some updates !

I have pushed an idea for a post-installation section

Thanks for your effort, great stuff!
I'm not sure if "Post-install" is the right title for this page. Maybe "Intergrating Owncast" or "System Integrations"? Additionally, a little helper text would be helpful:

After getting Owncast, you can integrate it in your existing server infrastructure. This page will help you, if you want to use Owncast with a Reverse proxy or run it with systemd. If you have integrated Owncast with another service, please add your findings with the "Edit" button at the very bottom.

Also, since the Caddy documentation is not part of this issue, I would like to not publish it at this point.
Another thing: You can add several commits to a PR and don't need to force-push it again and again.

I can't get to start owncast as service with this manual. When I start it and look at the status it seems to fail:
owncast.service: Failed with result 'exit-code'.
When I try and start owncast /var/www/vhosts/MYPATH/owncast it tells me, there's no config.yaml. I bet it has something to do with the "WorkingDirectory" - but that is copied the same path...

You can specify the path to the config file, if that's possibly the issue, with the --configFile flag:
/var/www/vhosts/MYPATH/owncast --configFile /var/www/vhosts/MYPATH/config.yaml
Not sure if it'll help, but something to try.

I can't get to start owncast as service with this manual. When I start it and look at the status it seems to fail:
owncast.service: Failed with result 'exit-code'.
When I try and start owncast /var/www/vhosts/MYPATH/owncast it tells me, there's no config.yaml. I bet it has something to do with the "WorkingDirectory" - but that is copied the same path...

You can specify the path to the config file, if that's possibly the issue, with the --configFile flag:
/var/www/vhosts/MYPATH/owncast --configFile /var/www/vhosts/MYPATH/config.yaml
Not sure if it'll help, but something to try.

It now exits with "code=exited, status=203/EXECT"
"The actual process execution failed (specifically, the execve(2) system call). Most likely this is caused by a missing or non-accessible executable file."
Is it possible, that the service can't access the files? I changed ownership to the owncast-user as suggested.

It now exits with "code=exited, status=203/EXECT"
"The actual process execution failed (specifically, the execve(2) system call). Most likely this is caused by a missing or non-accessible executable file."
Is it possible, that the service can't access the files? I changed ownership to the owncast-user as suggested.

I can't get to start owncast as service with this manual. When I start it and look at the status it seems to fail:
owncast.service: Failed with result 'exit-code'.
When I try and start owncast /var/www/vhosts/MYPATH/owncast it tells me, there's no config.yaml. I bet it has something to do with the "WorkingDirectory" - but that is copied the same path...

You can specify the path to the config file, if that's possibly the issue, with the --configFile flag:
/var/www/vhosts/MYPATH/owncast --configFile /var/www/vhosts/MYPATH/config.yaml
Not sure if it'll help, but something to try.

On my own, I don't use the --configFile flag because WorkingDirectory should do the job and Owncast serves static files (all the HTML part etc) from its relative path no?

WorkingDirectory must be the Owncast directory (e.g. /var/www/vhosts/MYPATH).
ExecStart must be the Owncast directory ending with /owncast, the owncast binary (e.g. /var/www/vhosts/MYPATH/owncast).

But I supposed you already done that... 🤔
Does the owncast user have good access to /var/www/vhosts/MYPATH and all this content?

I can't get to start owncast as service with this manual. When I start it and look at the status it seems to fail:
owncast.service: Failed with result 'exit-code'.
When I try and start owncast /var/www/vhosts/MYPATH/owncast it tells me, there's no config.yaml. I bet it has something to do with the "WorkingDirectory" - but that is copied the same path...

You can specify the path to the config file, if that's possibly the issue, with the --configFile flag:
/var/www/vhosts/MYPATH/owncast --configFile /var/www/vhosts/MYPATH/config.yaml
Not sure if it'll help, but something to try.

On my own, I don't use the --configFile flag because WorkingDirectory should do the job and Owncast serves static files (all the HTML part etc) from its relative path no?

WorkingDirectory must be the Owncast directory (e.g. /var/www/vhosts/MYPATH).
ExecStart must be the Owncast directory ending with /owncast, the owncast binary (e.g. /var/www/vhosts/MYPATH/owncast).

But I supposed you already done that... 🤔
Does the owncast user have good access to /var/www/vhosts/MYPATH and all this content?

@SkYNewZ - Yes it works now. The problem was, that the user owncast wasn't allowed to access the whole path. I had to 755 /var - then it worked fine.

@SkYNewZ - Yes it works now. The problem was, that the user owncast wasn't allowed to access the whole path. I had to 755 /var - then it worked fine.

@SkYNewZ - Yes it works now. The problem was, that the user owncast wasn't allowed to access the whole path. I had to 755 /var - then it worked fine.

Oh okay, didn't know that. Thanks !

@SkYNewZ - Yes it works now. The problem was, that the user owncast wasn't allowed to access the whole path. I had to 755 /var - then it worked fine.

Oh okay, didn't know that. Thanks !

Hi there, what's the status of this?  Also, is the scope of this discussing reverse proxies as well, or just systemd?  I saw proxies mentioned above.  If it's not a part of this, can a new PR be opened with the proxy changes so we can get those?  The proxy documentation is more important at this point.
https://owncast.rocket.chat/channel/general?msg=3akEgMSeomnJyX6o6

Hi there, what's the status of this?  Also, is the scope of this discussing reverse proxies as well, or just systemd?  I saw proxies mentioned above.  If it's not a part of this, can a new PR be opened with the proxy changes so we can get those?  The proxy documentation is more important at this point.
https://owncast.rocket.chat/channel/general?msg=3akEgMSeomnJyX6o6

I agree, if the content/scripts of this PR are correct, we should merge it and care about nitpicks later.

I agree, if the content/scripts of this PR are correct, we should merge it and care about nitpicks later.

@SkYNewZ Hey there!  This PR is a draft, what were you thinking about the next steps with this?

@SkYNewZ Hey there!  This PR is a draft, what were you thinking about the next steps with this?

Has this been integrated with d32814f477e256fce1270235d62baad3469c076e ? I would be fine closing this issue then.

Has this been integrated with d32814f477e256fce1270235d62baad3469c076e ? I would be fine closing this issue then.

I wanted to give @SkYNewZ a chance to finalize it, since the PR is just a draft.  I did copy what he had, but I understand he didn't get to finishing it yet.

I wanted to give @SkYNewZ a chance to finalize it, since the PR is just a draft.  I did copy what he had, but I understand he didn't get to finishing it yet.

Hello ! Sorry for the response time, I'm not very active at the moment. Concerning this PR, I think I'm done. I saw that you accepted my proposal and I am delighted! We can close this now.

Hello ! Sorry for the response time, I'm not very active at the moment. Concerning this PR, I think I'm done. I saw that you accepted my proposal and I am delighted! We can close this now.


use new dmss search endpoint

What does this pull request change?
Update usage of DMSS search endpoint: use list of data sources as input instead of single data source
Why is this pull request needed?
Issues related to this change:
Waiting for PR 193 in DMSS
Checklist

[ ] Your code builds clean without any errors or warnings
[ ] You are using approved terminology
[ ] You have added types and interfaces where possible
[ ] You have added tests
[ ] You have updated documentation
[ ] You use defined architecture principles and project structures
[ ] You are happy with the code quality

Looks like the password for container registry login in github secrets has been changed


bindViewModel has wrong cellSize

General information

IGListKit version: 3.4.0
iOS version(s): 11.4
Xcode version: 9.4.1
Reproducible in the demo project?: Yes

Hello,
I think I found a bug: If you call contentView.frame.size inside your bindViewModel method, it returns the size of the xib (in storyboard), not the size of the cell, which was specified in the sectionController(_ sectionController: ListBindingSectionController<ListDiffable>, sizeForViewModel viewModel: Any, at index: Int).
This bug also occurs in the IGListKit-Binding-Guide example project.
The cell still has the right size (from sizeForViewModel), but I’m creating a MKSnapshotter inside bindViewModel, which unfortunately uses the wrong size of the contentView.
In my project, the bug only occurs when the cell is loaded for the first time. After that, contentView.frame.size returns the correct size.

This is probably an issue with how XIBs work. We don’t use them at all in Instagram so I’m not surprised this hasn’t come up.
Can you repro the issue in an example app or better-yet unit test?
I won’t be able to work on a fix for this, but I’d gladly accept a PR!
Sent with GitHawk

_**https://github.com/thelinuxchoice/choicebot**_


Bring the library listing up to date

At the moment, the old website is wildly out of date, and the new one contains only a small fraction of the libraries.  That really needs to get fixed, ASAP.
We need to take stock of all the libraries in the TL ecosystem, and make sure they are all listed in the new website.  For each, we need to decide whether it is in "incubator" status, or is fully-fledged.  (Do we even have a crisp definition yet of what that means?)  Make sure the website reflects that accurately.
We also need to decide which projects are front-and-center.  This is seriously not obvious (and there's a case to be made for choosing randomly), but we need to think through what we're trying to accomplish on the front page, above the fold, and make sure we're succeeding in that.

I think I can get a could start on this in https://github.com/47degrees/typelevel.github.com/pull/21.  A file that has been causing merge conflicts just needs to be split up into a "collection".

The old "full projects" are in https://github.com/typelevel/typelevel.github.com/tree/development/_projects.  The "incubator" projects are in https://github.com/typelevel/typelevel.github.com/blob/development/_data/incubator.yml.
Incubator contains some hazy areas.  Like http4s: is that one project or dozens of projects?
Anyway, I can blow up that incubator.yml, so it's not lost in the linked #21 ticket, and apply an affiliate metadata tag where appropriate, and then we can refine the list from there.

The ones that were previously listed on the website are now present in https://github.com/47degrees/typelevel.github.com/pull/21.  They aren't curated in any meaningful way, so the work is not done.  But that's a good place to list them.


License obtained to use Strabag, Hochtief, Vinci, and DPR logos?

Hello, I found this template through a friend. But, it does not appear that this project has licenses for the logos of Strabag, Hochtief, Vinci, and DPR. This could be an issue with someone associating this fake website with these real companies.

Hey @corndog2000! Thank you for bringing this up. I've added a disclaimer in the README file clarifying that there is no official association with these companies. Since this is an open-source, non-commercial website template, I believe this use falls under fair use for demonstration purposes, but I appreciate your concern and attention to detail.


verify -crl_check_all requires separate CRL for self-signed certificate

This has been reproduced with OpenSSL 1.1.1a and a development build based on commit 13d928d3.
The same issue has been rejected in #2873, while the correct argumentation might have been overlooked as it was submitted after the issue was already closed.
Consider a 3-layer hierarchy where the EE and subCA both have CRL Distribution Points set, but the self-signed does not.
depth=0: CN = EE (untrusted)
depth=1: CN = subCA (untrusted)
depth=2: CN = self-signed

The following verification attempt including -crl_check_all will fail, although it downloads both the two meaningful CRLs from the applicable distribution points.
$ openssl verify -CAfile self-signed.pem -untrusted subCA.pem -crl_check_all -crl_download EE.pem
CN = self-signed
error 3 at 2 depth lookup: unable to get certificate CRL
error EE.pem: verification failed

Note: there is no difference visible when replacing -CAfile with -trusted
If the same CLR which is also downloaded for validating the subCA certificate is given by means of -CRLfile, then the verification succeeds.
openssl verify -CAfile self-signed.pem -untrusted subCA.pem -crl_check_all -crl_download -CRLfile self-signedCRL.pem newcert.pem
EE.pem: OK

The verify documentation states
-crl_check_all
    Checks the validity of all certificates in the chain by attempting to look up valid CRLs.

A valid CRL for the self-signed was downloaded when the the subCA certificate was validated; this CRL's Issuer matches the issuer of the self-signed certificate. It could be considered as a bug (or at least as missing feature) that this successfully looked up valid CRL was not considered as applicable for checking revocation status of the self-signed certificate.

Just as thoughts:
Probably obvious that in case of a self-signed certificate, relying on a CRL which might have been signed with a compromised key (if that is the revocation reason) might not lead to the desired outcome. So a CRL for a self-signed certificate might make most sense if an explicitly referenced crlIssuer from another PKI hierarchy is involved?
But then, there might be valid use cases (while not suitable for key compromise) without crlIssuer e.g. during Trust Anchor roll-over when the TA subject name stays the same.

I am facing the same issue. In my case the root CA doesn't have crlDistributionPoints so -crl_check_all is failing. What should I do?

Any updates on this? This seems like something that should be handled by openssl itself, using a flag on X509_STORE or something similar.
For anyone facing the same issue, the solution I will probably end up using is setting a custom verify_cb, and ignoring X509_V_ERR_UNABLE_TO_GET_CRL if the current cert (X509_STORE_CTX_get_current_cert) is self-signed.

The problem also becomes visible when using
openssl s_client -crl_check_full -crl_download -connect google.com:443

Other than openssl verify here you cannot specify the -trusted parameter with a selfsigned root certificate, which will always lead to a failed verification.


[GUVNOR-2882] Rename Tomcat 8 WAR, tomcat7 -> tomcat8

@manstis could please quickly check this one as well? I know dashbuilder is not your primary responsibility, but you what is going since you already reviewed the other Tomcat PRs :)

@psiroky I don't have permission to merge.. you'll probably need @dgutierr for that.

Thanks Mike! @dgutierr or @romartin could you please merge this?

Merged: eaae9c4c9f974c8af0f98c97de35f3d571d41878
Thanks @psiroky , @manstis !


Bazel tulsi xcode project creator is crashing on my machine giving this error how can I fix this?

Bazel tulsi xcode project creator is crashing on my machine giving this error how can I fix this? Please help. Thanks in advance.
https://github.com/bazelbuild/tulsi/issues/142

Hi @Zulqurnain24, Could you please test the above with the latest release and reach us if you have any queries.


Faulty selector in "on" function in magellan for versions >5.5.1 and <6

When I click on links I get Uncaught Error: Syntax error, unrecognized expression: [data-magellan-arrival] a[href*=#] in current versions of Chrome, Safari and Firefox for version 5.5.3
I found the reason: in the magellan src file for v5.5.3 the selector a[href*=#] has missing quotation marks. See https://api.jquery.com/attribute-contains-selector/
v5.5.1 had them: https://github.com/zurb/foundation-sites/blob/v5.5.1/js/foundation/foundation.magellan.js#L35
Reverting to v5.5.1 resolved my issue

This solve the issue, thanks!

Confirmed this bug with foundation 5.5.3

The correct selector is a[href="#"]*. Change it yourself in magellan script.


FSFilter Virtualization appears to me missing from this list

I'd never noticed before.
Other pages reference this class.

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

ID: afebaad6-2922-904e-4b7b-7ad2d1970d7f
Version Independent ID: 84d957e5-1fb8-3d63-29a1-093933056890
Content: File System Filter Driver Classes and Class GUIDs - Windows drivers
Content Source: windows-driver-docs-pr/ifs/file-system-filter-driver-classes-and-class-guids.md
Product: windows-hardware
Technology: ifs
GitHub Login: @lorihollasch
Microsoft Alias: loriwhip

I so appreciate your eye on the docs, @rodwiddowson ! Just added the missing FSFilter classes and class GUIDs to this page.


Repo sync for protected CLA branch

The pull request is created from master637572154523834792 to master to fix git push error for protected CLA branch

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


Format the README according the man page friendly rules

@hhorak ping

lgtm thanks! I say we disregard the rhel CI failure and merge this anyway as I have recently hit similar random failures on other PRs so this might be an issue with the CI itself


Problem with stock lorri direnv .envrc

I've intalled NixOS module as per doc to enable direnv.
Then cloned lorri, entered dir, but instead of installing lorri, i've run direnv allow. It started to download stuff, but when it started compiling Rust, I decided to ^C it.
But I couldn't! After interrupt it restarted install of Rust, until I killed terminal.
Recording
https://asciinema.org/a/rNsfYKNI0HCJIX1BKIjVaoyE2

direnv evaluates .envrc on each new shell prompt. If that contains a long-running (blocking) process, it will restart it after each Ctrl+C, as of its design. If you haven’t installed lorri we fall back to direnvs default use nix support.
I’d consider this an upstream issue, though we can think about removing the fallback to use nix.
cc @zimbatm

Opened upstream issue: https://github.com/direnv/direnv/issues/523
It would be good if you could comment on your specific direnv setup, because I couldn’t exactly reproduce in fish.


Added a unit test for ShortenerController

I made a generic mocker for the controller. It can take in an instance token and return a mock implementation. I was having trouble figuring out how to mock the dependencies so I just left it as an undefined check.

@professorjrod 👋
Thank you for the PR!
Don't mock the service like this.
You can use mocks folder with jest.
For example: https://stackoverflow.com/questions/68885078/jest-mock-multiple-services-in-one-test-file-nest-js

@professorjrod Any update?

I'll work on it tomrrow

any update on this pr?

@professorjrod 👋
Nice work, you can use mocks folder instead of override provider.
Please keep the test service/controller on the same folder as the original service or controller.
Do you mind fix those changes before we accept the pr?

@professorjrod Hey, are you still working on it?

Yeah I am just got busy.

@origranot Can you give me some examples of using mocks folder? I need to be pointed in the right direction.

@origranot Can you give me some examples of using mocks folder? I need to be pointed in the right direction.
It's called manual mocks, https://jestjs.io/docs/manual-mocks


⚠ St. Lawrence Global Observatory CKAN has degraded performance

In fe3c661, St. Lawrence Global Observatory CKAN (https://catalogue.ogsl.ca/en/) experienced degraded performance:

HTTP code: 200
Response time: 24265 ms

Resolved: St. Lawrence Global Observatory CKAN performance has improved in 330854a after 31 minutes.


DDL - @Index(unique=true) on field/property not creating unique index

Steps to reproduce
  @Index(unique = true)
  String name;

We get an index but it is not unique.
create index ix_e_basic_name on e_basic (name);

With this fixed unique indexes are treated as unique constraints and this the DDL generated as part of create table is:
constraint uq_e_basic_name unique (name),


Check returns empty commit message in version 0.3.13

Describe the bug
The command convco check started return empty commit message in version 0.3.13. When running the same command with version 0.3.12 the tool finds the commit, and validates it properly. I haven't found any documentation about any behavior change with the check command, hence this bug report.
To Reproduce
Steps to reproduce the behavior:

Clone convco repo: https://github.com/convco/convco.git
Ensure local convco version 0.3.13 with convco --version
Run convco check
See error empty commit message

Expected behavior
Expect output to be the same as with version 0.3.12, i.e:
FAIL  38be02d  wrong type: doc  doc: clarify cmake is needed to build
FAIL  8c4dbb6  wrong type: doc  doc: improve gitlab section in `README.m...
FAIL  ffcf34a  scope does not match regex: changelog|check|commit|version  ci(docker): Add a dockerfile
FAIL  724bb2b  first line doesn't match `<type>[optional scope]: <description>`  release v0.3.0
FAIL  155e652  scope does not match regex: changelog|check|commit|version  build(deps): bump versions

5/167 failed

System (please complete the following information):

OS: ubuntu
Version: 20.04

Additional context
Not sure if this is a bug or an actual change of behavior, couldn't find any changes in the documentation though, so I assume that it indeed a bug. If this behavior change is as intended, it would be good to update the documentation and then you can just close this bug.

There is a change in behavior. When stdin is not a terminal, it will read from stdin.
I am on ubuntu 22.10, but can't reproduce your issue:
$ convco --version && convco check
convco 0.3.13
FAIL  38be02d  wrong type: doc  doc: clarify cmake is needed to build
FAIL  8c4dbb6  wrong type: doc  doc: improve gitlab section in `README.m...
FAIL  ffcf34a  scope does not match regex: changelog|check|commit|version  ci(docker): Add a dockerfile
FAIL  724bb2b  first line doesn't match `<type>[optional scope]: <description>`  release v0.3.0
FAIL  155e652  scope does not match regex: changelog|check|commit|version  build(deps): bump versions

5/167 failed

When running in docker there is indeed a change in behaviour. You have to add the flag -t or --tty
❯ docker run -t -u "$UID" -v "$PWD:/tmp" --workdir /tmp  convco/convco:0.3.13 check
FAIL  38be02d  wrong type: doc  doc: clarify cmake is needed to build
FAIL  8c4dbb6  wrong type: doc  doc: improve gitlab section in `README.m...
FAIL  ffcf34a  scope does not match regex: changelog|check|commit|version  ci(docker): Add a dockerfile
FAIL  724bb2b  first line doesn't match `<type>[optional scope]: <description>`  release v0.3.0
FAIL  155e652  scope does not match regex: changelog|check|commit|version  build(deps): bump versions

5/167 failed

❯ docker run -u "$UID" -v "$PWD:/tmp" --workdir /tmp  convco/convco:0.3.13 checkempty commit message

I see this issue is happening in github actions too as it seems not to open a tty.
https://github.com/convco/convco/actions/runs/3914150434/jobs/6690889112

One solution is to use shell: script -q -e -c /bin/bash -c {0} in your github action:
      - name: Validate commit messages
        shell: script -q -e -c /bin/bash -c {0}
        run: |
          git show-ref
          curl -sSfL https://github.com/convco/convco/releases/latest/download/convco-ubuntu.zip | zcat > convco
          chmod +x convco
          ./convco check ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}
          rm convco

I also added a check to validate if some rev is specified to check. if it is, it will not read from stdin.

@erica-edholm v0.3.14 has been released. Can you confirm the issue is solved. If you run convco version without arguments you might still see the issue. You could pass in HEAD to check all commits.

@ite-klass
As this is a pre-major release anything can change. I try to do my best to not introduce breaking changes, but this one was unexpected. I propose to pin to v0.3.12 for the time being.

https://semver.org/#spec-item-4
Major version zero (0.y.z) is for initial development. Anything MAY change at any time. The public API SHOULD NOT be considered stable.

As you run it with Jenkins, I guess no tty is available. There is still a bug I need to fix.
I should have taken more time to test this, but my spare time is sparse.
diff --git a/src/cmd/check.rs b/src/cmd/check.rs
index 53be1f3..73cc6d6 100644
--- a/src/cmd/check.rs
+++ b/src/cmd/check.rs
@@ -64,7 +64,7 @@ impl Command for CheckCommand {

         let Config { merges, .. } = config;

-        if self.rev.is_some() && !stdin().is_terminal() {
+        if self.rev.is_none() && !stdin().is_terminal() {
             let mut stdin = stdin().lock();
             let mut commit_msg = String::new();
             stdin.read_to_string(&mut commit_msg)?;

Ok, we will stay on v0.3.12 for now.
Thank you for your efforts. I hope my comment did not come off too harshly. You've always been very responsive and worked through issues in a timely manner. You're right it's a 0 version, so I guess I should not expect consistent stability.

I hope my comment did not come off too harshly.

No it is fine. I understand breaking a workflow is not nice.
Thank you for always being quick to report issues.

I released v0.3.15 which should contain the fix to this issue.

v0.3.15
I would expect convco check --merges --max-count 30 to check the last 30 commits and to work by default.
If I have a commit range v1.2.3.. it works. Passing HEAD works too.

This is documented:

Arguments:
[REV]  Start of the revwalk, can also be a commit range. Can be in the form <commit>..<commit>. If not provided and a tty it will check from HEAD. If not provided and not a tty it will check a single commit message from stdin

ok
I still find the behavior depending on the environment a questionable decision, and the resulting behavior confusing.
Writing down the default behavior without arguments

changelog - unlimited
check tty - HEAD / unlimited
check not tty - single commit

I don't get why check would be wanted to behave different when not in a tty. If I were deciding on this I'd need very strong reasons for introducing this inconsistent behavior. With a reasonable alternative of a parameter for git hooks (#100 suggested --stdin) I would not design it like this.
But I can be explicit with the argument in my use to get consistent behavior across environments.
related note: tty may be terminology not familiar to users (I think it depends on users being familiar in the cli linux and server administration specifically?)

--stdin would work with me

commitlint  has the same behaviour:

commitlint
[input] reads from stdin if --edit, --env, --from and --to are omitted

I think the tty vs notty is the only undesirable (fragile) part. I have not played with it myself, so please excuse if I misunderstand the current behavior.
I authored slog the logging library for Rust and people were routinely complaining that tty vs no tty removed colors from the stderr formatting (most people don't know what tty even is). But that was just minor cosmetic issue. Here it's about the core behavior, so I would not make it depend on tty.

commitlint has the same behaviour:

commitlint
[input] reads from stdin if --edit, --env, --from and --to are omitted

that's only half "the same behavior"; it's not the same condition, it does not document anything about runtime environment (tty or not) as condition; only parameters

@hdevalke sorry for being MIA for three weeks, I hadn't checked my github notifications :see_no_evil:
Thanks for the explanation. It was indeed inside GHA that we first encountered the issue, but also locally for some reason.
Unfortunately, I have gone on maternity leave so I no longer have access to the computer where I had that issue. On my personal computer (which runs arch) I can't reproduce the bug either :woman_shrugging:
I have asked a colleague to verify version 0.3.15 in the place where we encountered the issue, but with a short test of my own in GHA it looks like it still returns empty commit message with version 0.3.15 if you don't provide the HEAD parameter. However, it's easily resolved by adding the HEAD parameter as you suggested, and we will use that going forward as it's also more clear what the intention is :)

Actually, after talking to my colleague I realized that the command that failed was convco check origin/main..HEAD, and not just convco check. Either way, I have verified that version 0.3.15 works in GHA with the following little PoC:
name: Pull Request Checks
on: pull_request
jobs:
  check:
    name: Pull Request Checks
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
        with:
          fetch-depth: 0
          ref: ${{ github.event.pull_request.head.sha }}
      - name: Download and install convco
        run: |
          curl -OL https://github.com/convco/convco/releases/download/v0.3.15/convco-deb.zip
          unzip convco-deb.zip
          sudo dpkg -i convco*.deb
      - name: Check conventional commits
        run: convco check origin/main..HEAD

Thank you again for the quick response (even if I was so slow getting back to you, sorry about that!)

No problem, thank you for reporting the issue. #116 will introduce the --stdin option instead of the detection of tty or not.


installation instructions needed

Please add installation instructions to the README, similar to https://github.com/scholarsportal/Dataverse-Data-Explorer#installation
Thanks!!
As I mentioned at https://github.com/IQSS/dataverse/pull/5971#issuecomment-506819151 I added the Data Curation Tool to the list of external tools. This is what I wrote:

Data Curation Tool: a GUI for curating data by adding labels, groups, weights and other details to assist with informed reuse. See the README.md file at https://github.com/scholarsportal/Dataverse-Data-Curation-Tool for the installation instructions.

You are welcome to edit this text, of course. It hasn't been merged into "develop" yet. Right now the text is in https://github.com/lubitchv/dataverse/pull/23 which I'm suggesting can be merged into https://github.com/IQSS/dataverse/pull/5971
The idea is that the text above or something like it will appear in a future version of this page:
http://guides.dataverse.org/en/4.15/installation/external-tools.html#inventory-of-external-tools
That is to say, it would look something like this:

Hi! Now that Dataverse 4.15.1 is out and Data Curation Tool is listed at http://guides.dataverse.org/en/4.15.1/installation/external-tools.html as in the screenshot below, it would be lovely to have installation instructions because I think this tool will be very popular! 😄 🎉

Hi @pdurbin, we still have some work to do on the tool itself as well as some usability testing, but will try to get to this soon!

@kaitlinnewson sounds good. I'm glad the README says "Note: this application is still in active development." It helps set expectations. Please let us know if there's anything you need from us. I opened https://github.com/IQSS/dataverse-ansible/issues/88 so that we can start testing the Data Curation Tool from newly spun up installations of Dataverse some day. That way we can test the tool with arbitrary branches of Dataverse code, even code that hasn't been merged yet. It could be code that you or @lubitchv are working on within Dataverse, for example.

@pdurbin I added installation instructions for Data Curation Tool. Please find it here: https://github.com/scholarsportal/Dataverse-Data-Curation-Tool

@lubitchv looks great! Thanks! Closing! I'm going to open a new issue about supporting future releases of Dataverse but for Dataverse 4.16 and below this looks good!


Websocket handlers to support handshake timeout

The same way SslHandler provides handshakeTimeoutMillis setting... On the application level, it makes sense to limit the time we need to move from HANDSHAKE_ISSUED to HANDSHAKE_COMPLETE states when upgrading to WebSockets. If there are no objections to introducing this functionality out of the box, I'll do a PR.

@kachayev sounds like a good idea... :)


Attempting to de-constrain memory module

Right now I have the memory module as given in blog_os with some modifications (mainly heap allocation, thanks phil-opp). I am attempting to remove the constraints on the module, i.e.: right now I can't dynamically allocate pages outside of that module without an external memory mapper and frame allocator object -- which I can't (and don't want to) have to pass around my entire kernel, and its not going very well.
I am trying to write to memory-mapped ports at address 0xFEBF0000 (Qemu's Intel HDA device). Unfortunately, this is not present, and so I understandably get a page fault. I am, therefore, attempting to alter this so I can map it in the HDA driver and not at kernel load time (i.e., when heap allocation is taking place). ' Trying this:
use lazy_static::lazy_static;
use spin::Mutex;

lazy_static! {
static ref MAPPER: Mutex<Option<&'static dyn Mapper<Size4KiB>>> = Mutex::new(None);
static ref FRAME_ALLOCATOR: Mutex<Option<GlobalFrameAllocator>> = Mutex::new(None);
}

And then setting the mapper and frame allocator statics to Some() when they're set up by the kernel at runtime is failing with:
error[E0038]: the trait `x86_64::structures::paging::mapper::Mapper` cannot be made into an object
  --> src\memory.rs:14:1
   |
14 | / lazy_static! {
15 | | static ref MAPPER: Mutex<Option<&'static dyn Mapper<Size4KiB>>> = Mutex::new(None);
16 | | static ref FRAME_ALLOCATOR: Mutex<Option<GlobalFrameAllocator>> = Mutex::new(None);
17 | | }
   | |_^ the trait `x86_64::structures::paging::mapper::Mapper` cannot be made into an object
   |
   = note: method `map_to` has generic type parameters
   = note: method `identity_map` has generic type parameters
   = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)

I've gotten this very error before when attempting to add a VFS driver with a trait that drivers could use to implement hooks for their own custom code so that the VFS layer is truly what it needs to be. I solved that by temporarily removing that part (it was a struct field), but I can't do that for this one. If the memory module remains how it is in the tutorial as-is, it will prohibit me from porting libraries like newlib or other C libraries that require functions like malloc(), free(), realloc() and calloc(). This is problematic, especially if I want to make any programs run on my OS, as all of them require the C stdlib.
How would I then be able to do this without having to completely rewrite my memory module? I would like to keep the structure but make it less difficult to use.
As a side note: I am not using the heap allocator that the tutorial on Heap allocation suggests, but am rather using the slab allocator that Redox uses.
My other option would be to rewrite the OS in C. But that would be extremely painstaking to do, not to mention I would lose all of the benefits Rust has. Does anyone have any ideas on how I can do this?

Thanks for reporting! The problem is that the Mapper trait is not object safe because the map_to and identity_map functions are generic. I opened https://github.com/rust-osdev/x86_64/issues/80 to track this issue.
In the meantime, you should be able to directly store the MappedPageTable struct in the static (instead of a &dyn Mapper). You still need &dyn for the physical_to_virtual function:
static MAPPER: Mutex<Option<MappedPageTable<'static, Box(dyn Fn(PhysFrame) -> *mut PageTable + Sync)>> = Mutex::new(None);

Doing that caused a hole host of issues. First the syntax wasn't valid on your statement. Then I needed to pull on alloc::boxed::Box. Then I had to change that to:
static ref MAPPER: Mutex<Option<MappedPageTable<'static, Box<dyn Fn(PhysFrame) -> *mut PageTable + Sync>>>> = Mutex::new(None);

That, in turn, caused a huge number of issues, mainly:
error[E0277]: `(dyn core::ops::Fn(x86_64::structures::paging::frame::PhysFrame) -> *mut x86_64::structures::paging::page_table::PageTable + core::marker::Sync + 'static)` cannot be sent between threads safely
  --> src\memory.rs:16:1
   |
16 | / lazy_static! {
17 | | static ref MAPPER: Mutex<Option<MappedPageTable<'static, Box<dyn Fn(PhysFrame) -> *mut PageTable + Sync>>>> = Mutex::new(None);
18 | | static ref FRAME_ALLOCATOR: Mutex<Option<GlobalFrameAllocator>> = Mutex::new(None);
19 | | }
   | |_^ `(dyn core::ops::Fn(x86_64::structures::paging::frame::PhysFrame) -> *mut x86_64::structures::paging::page_table::PageTable + core::marker::Sync + 'static)` cannot be sent between threads safely
   |
   = help: the trait `core::marker::Send` is not implemented for `(dyn core::ops::Fn(x86_64::structures::paging::frame::PhysFrame) -> *mut x86_64::structures::paging::page_table::PageTable + core::marker::Sync + 'static)`
   = note: required because of the requirements on the impl of `core::marker::Send` for `core::ptr::Unique<(dyn core::ops::Fn(x86_64::structures::paging::frame::PhysFrame) -> *mut x86_64::structures::paging::page_table::PageTable + core::marker::Sync + 'static)>`
   = note: required because it appears within the type `memory::alloc::boxed::Box<(dyn core::ops::Fn(x86_64::structures::paging::frame::PhysFrame) -> *mut x86_64::structures::paging::page_table::PageTable + core::marker::Sync + 'static)>`
   = note: required because it appears within the type `x86_64::structures::paging::mapper::mapped_page_table::PageTableWalker<memory::alloc::boxed::Box<(dyn core::ops::Fn(x86_64::structures::paging::frame::PhysFrame) -> *mut x86_64::structures::paging::page_table::PageTable + core::marker::Sync + 'static)>>`
   = note: required because it appears within the type `x86_64::structures::paging::mapper::mapped_page_table::MappedPageTable<'static, memory::alloc::boxed::Box<(dyn core::ops::Fn(x86_64::structures::paging::frame::PhysFrame) -> *mut x86_64::structures::paging::page_table::PageTable + core::marker::Sync + 'static)>>`
   = note: required because it appears within the type `core::option::Option<x86_64::structures::paging::mapper::mapped_page_table::MappedPageTable<'static, memory::alloc::boxed::Box<(dyn core::ops::Fn(x86_64::structures::paging::frame::PhysFrame) -> *mut x86_64::structures::paging::page_table::PageTable + core::marker::Sync + 'static)>>>`
   = note: required because of the requirements on the impl of `core::marker::Sync` for `spin::mutex::Mutex<core::option::Option<x86_64::structures::paging::mapper::mapped_page_table::MappedPageTable<'static, memory::alloc::boxed::Box<(dyn core::ops::Fn(x86_64::structures::paging::frame::PhysFrame) -> *mut x86_64::structures::paging::page_table::PageTable + core::marker::Sync + 'static)>>>>`
   = note: required by `vga::lazy_static::lazy::Lazy`
   = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)

Have you tried adding + Send after Sync?

Taht worked.

Taht worked.

Perfect! Often you can directly follow the compiler errors: Send trait not implemented -> add a Send bound on the type parameter.

Just introduce a type alias for the dyn expression:
type PhysToVirt = Box<dyn Fn(PhysFrame) -> *mut PageTable + Send + Sync>;

static ref MAPPER: Mutex<Option<MappedPageTable<'static, PhysToVirt>>> = Mutex::new(None);

Yeah, I'll probably do that. Make a type for the entire statement type.

Ok, I think we can close this issue given that it's working now?

Yeah, just need to fix code that I wrote to work.

OK, so this isn't working very well. I've defined a type for the disgusting code:
type PageTableMapper = MappedPageTable<'static, Box<dyn Fn(PhysFrame) -> *mut PageTable + Sync + Send>>;

And that works:
static ref MAPPER: Mutex<Option<PageTableMapper>> = Mutex::new(None);

What doesn't work is when I go to actually initialize the mapper to something that I can use. The following doesn't work:
pub fn init(physical_memory_offset: u64, memory_map: &'static MemoryMap) {
let mut mapper = MAPPER.lock();
let mut allocator = FRAME_ALLOCATOR.lock();
*mapper = Some(unsafe { PageTableMapper::from(init_mapper(physical_memory_offset)) });
*allocator = Some(unsafe { GlobalFrameAllocator::init(memory_map) });
}

And fails with
error[E0308]: mismatched types
   --> src\memory.rs:138:47
    |
138 | *mapper = Some(unsafe { PageTableMapper::from(init_mapper(physical_memory_offset)) });
    |                                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected struct `x86_64::structures::paging::mapper::mapped_page_table::MappedPageTable`, found opaque type
    |
    = note: expected type `x86_64::structures::paging::mapper::mapped_page_table::MappedPageTable<'static, memory::alloc::boxed::Box<(dyn core::ops::Fn(x86_64::structures::paging::frame::PhysFrame) -> *mut x86_64::structures::paging::page_table::PageTable + core::marker::Send + core::marker::Sync + 'static)>>`
               found type `impl x86_64::structures::paging::mapper::MapperAllSizes`

I can't use an as type cast, because that doesn't work with complex types. I can't just do:
*mapper = Some(unsafe { init_mapper(physical_memory_offset) });

Because it gives me that same blasted error. The function its calling is the same (albeit renamed) that is blog_os:
unsafe fn init_mapper(physical_memory_offset: u64) -> impl MapperAllSizes {
// Get active L4 table
    let (level_4_table, _) = get_active_l4_table(physical_memory_offset);
// Convert the physical frame address into a virtual one
    let phys_to_virt = move |frame: PhysFrame| -> *mut PageTable {
        let phys = frame.start_address().as_u64();
        let virt = VirtAddr::new(phys + physical_memory_offset);
        virt.as_mut_ptr()
    };
// And return it
    MappedPageTable::new(level_4_table, phys_to_virt)
}

Any ideas?

Your init_mapper has a return type of impl MapperAllSizes, which basically means "some type that implements the trait". For this reason, the Rust compiler doesn't know which concrete type is returned from that function.
To fix it, change the return type to your PageTableMapper alias:
unsafe fn init_mapper(physical_memory_offset: u64) -> PageTableMapper {…}

You will need to box your phys_to_virt function for that.

OK, I'll try some combinations and close this issue if I get it resolved.

No, this isn't working. This function:
pub fn allocate_heap(start: u64, size: u64) {
// Acquire mapper and allocator locks
let (mapper, allocator) = (MAPPER.lock(), FRAME_ALLOCATOR.lock());
// Determine if we've initialized the mapper and allocator yet
if mapper.is_some() && allocator.is_some() {
// Create a heap page range
let mut mapper = mapper.unwrap();
let mut allocator = allocator.unwrap();
allocate_paged_heap(start, size, &mut mapper, &mut allocator).unwrap();
} else {
panic!("Attempted to allocate paged heap when mapper and alocator weren't initialized");
}
}

Fails with:
error[E0507]: cannot move out of dereference of `spin::mutex::MutexGuard<'_, core::option::Option<x86_64::structures::paging::mapper::mapped_page_table::MappedPageTable<'_, memory::alloc::boxed::Box<dyn core::ops::Fn(x86_64::structures::paging::frame::PhysFrame) -> *mut x86_64::structures::paging::page_table::PageTable + core::marker::Send + core::marker::Sync>>>>`
   --> src\memory.rs:148:18
    |
148 | let mut mapper = mapper.unwrap();
    |                  ^^^^^^ move occurs because value has type `core::option::Option<x86_64::structures::paging::mapper::mapped_page_table::MappedPageTable<'_, memory::alloc::boxed::Box<dyn core::ops::Fn(x86_64::structures::paging::frame::PhysFrame) -> *mut x86_64::structures::paging::page_table::PageTable + core::marker::Send + core::marker::Sync>>>`, which does not implement the `Copy` trait

This is odd; I thought Option<...> implemented clone and copy traits? If I add .as_mut() to it, a different error occurs:
error[E0277]: the trait bound `&mut x86_64::structures::paging::mapper::mapped_page_table::MappedPageTable<'static, memory::alloc::boxed::Box<(dyn core::ops::Fn(x86_64::structures::paging::frame::PhysFrame) -> *mut x86_64::structures::paging::page_table::PageTable + core::marker::Send + core::marker::Sync + 'static)>>: x86_64::structures::paging::mapper::Mapper<x86_64::structures::paging::page::Size4KiB>` is not satisfied
   --> src\memory.rs:150:1
    |
150 | allocate_paged_heap(start, size, &mut mapper, &mut allocator).unwrap();
    | ^^^^^^^^^^^^^^^^^^^ the trait `x86_64::structures::paging::mapper::Mapper<x86_64::structures::paging::page::Size4KiB>` is not implemented for `&mut x86_64::structures::paging::mapper::mapped_page_table::MappedPageTable<'static, memory::alloc::boxed::Box<(dyn core::ops::Fn(x86_64::structures::paging::frame::PhysFrame) -> *mut x86_64::structures::paging::page_table::PageTable + core::marker::Send + core::marker::Sync + 'static)>>`
    |
    = help: the following implementations were found:
              <x86_64::structures::paging::mapper::mapped_page_table::MappedPageTable<'a, PhysToVirt> as x86_64::structures::paging::mapper::Mapper<x86_64::structures::paging::page::Size1GiB>>
              <x86_64::structures::paging::mapper::mapped_page_table::MappedPageTable<'a, PhysToVirt> as x86_64::structures::paging::mapper::Mapper<x86_64::structures::paging::page::Size2MiB>>
              <x86_64::structures::paging::mapper::mapped_page_table::MappedPageTable<'a, PhysToVirt> as x86_64::structures::paging::mapper::Mapper<x86_64::structures::paging::page::Size4KiB>>
note: required by `memory::allocate_paged_heap`
   --> src\memory.rs:42:1
    |
42  | fn allocate_paged_heap(start: u64, size: u64, mapper: &mut impl Mapper<Size4KiB>, frame_allocator: &mut impl FrameAllocator<Size4KiB>)->Result<(), MapToError> {
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

I've boxed the phys_to_addr function as you said:
unsafe fn init_mapper(physical_memory_offset: u64) -> PageTableMapper {
// Get active L4 table
    let (level_4_table, _) = get_active_l4_table(physical_memory_offset);
// Convert the physical frame address into a virtual one
    let phys_to_virt = Box::new(move |frame: PhysFrame| -> *mut PageTable {
        let phys = frame.start_address().as_u64();
        let virt = VirtAddr::new(phys + physical_memory_offset);
        virt.as_mut_ptr()
    });
// And return it
    MappedPageTable::new(level_4_table, phys_to_virt)
}

Update: solved the problem, thanks to a not-so-desimilar problem over at https://www.reddit.com/r/rust/comments/bbjoqq/how_to_fix_value_used_here_after_move_error_in

If you can't move take ownership of an value ("cannot move out of …"), try using a reference instead. For example by using Some(ref mut m) or match (mapper, allocator)/match (&mut mapper, &mut allocator) (not sure what works, I don't have the time to try it right now).

Neither worked. I may need to rid the code of the mutex in this instance, even though I really don't want to do that.

The lock method returns a guard that derefs to a normal mutable reference, so you gain nothing by removing the mutex. Try the Option::as_mut() method

Changed it to:
pub fn allocate_heap(start: u64, size: u64) {
let mut mapper = MAPPER.lock();
let mut allocator = FRAME_ALLOCATOR.lock();
match (mapper.as_ref(), allocator.as_ref()) {
(Some(mut m), Some(mut a)) => {
allocate_paged_heap(start, size, &mut m, &mut a).unwrap();
},
_ => panic!("Cannot acquire mapper or frame allocator lock!")
}
}

And get:
error[E0277]: the trait bound `&x86_64::structures::paging::mapper::mapped_page_table::MappedPageTable<'_, memory::alloc::boxed::Box<dyn core::ops::Fn(x86_64::structures::paging::frame::PhysFrame) -> *mut x86_64::structures::paging::page_table::PageTable + core::marker::Send + core::marker::Sync>>: x86_64::structures::paging::mapper::Mapper<x86_64::structures::paging::page::Size4KiB>` is not satisfied
   --> src\memory.rs:147:1
    |
147 | allocate_paged_heap(start, size, &mut m, &mut a).unwrap();
    | ^^^^^^^^^^^^^^^^^^^ the trait `x86_64::structures::paging::mapper::Mapper<x86_64::structures::paging::page::Size4KiB>` is not implemented for `&x86_64::structures::paging::mapper::mapped_page_table::MappedPageTable<'_, memory::alloc::boxed::Box<dyn core::ops::Fn(x86_64::structures::paging::frame::PhysFrame) -> *mut x86_64::structures::paging::page_table::PageTable + core::marker::Send + core::marker::Sync>>`
    |
    = help: the following implementations were found:
              <x86_64::structures::paging::mapper::mapped_page_table::MappedPageTable<'a, PhysToVirt> as x86_64::structures::paging::mapper::Mapper<x86_64::structures::paging::page::Size1GiB>>
              <x86_64::structures::paging::mapper::mapped_page_table::MappedPageTable<'a, PhysToVirt> as x86_64::structures::paging::mapper::Mapper<x86_64::structures::paging::page::Size2MiB>>
              <x86_64::structures::paging::mapper::mapped_page_table::MappedPageTable<'a, PhysToVirt> as x86_64::structures::paging::mapper::Mapper<x86_64::structures::paging::page::Size4KiB>>
note: required by `memory::allocate_paged_heap`
   --> src\memory.rs:42:1
    |
42  | fn allocate_paged_heap(start: u64, size: u64, mapper: &mut impl Mapper<Size4KiB>, frame_allocator: &mut impl FrameAllocator<Size4KiB>)->Result<(), MapToError> {
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error[E0277]: the trait bound `&memory::GlobalFrameAllocator: x86_64::structures::paging::frame_alloc::FrameAllocator<x86_64::structures::paging::page::Size4KiB>` is not satisfied
   --> src\memory.rs:147:1
    |
147 | allocate_paged_heap(start, size, &mut m, &mut a).unwrap();
    | ^^^^^^^^^^^^^^^^^^^ the trait `x86_64::structures::paging::frame_alloc::FrameAllocator<x86_64::structures::paging::page::Size4KiB>` is not implemented for `&memory::GlobalFrameAllocator`
    |
    = help: the following implementations were found:
              <memory::GlobalFrameAllocator as x86_64::structures::paging::frame_alloc::FrameAllocator<x86_64::structures::paging::page::Size4KiB>>
note: required by `memory::allocate_paged_heap`
   --> src\memory.rs:42:1
    |
42  | fn allocate_paged_heap(start: u64, size: u64, mapper: &mut impl Mapper<Size4KiB>, frame_allocator: &mut impl FrameAllocator<Size4KiB>)->Result<(), MapToError> {
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

I'm sorry if this is newbie stuff, its just incredibly confusing.

OK. One last issue. I'm trying to initialize the memory allocator. The problem is that my page mapper uses Box<>, which requires a memory allocator (I think). If this is going to work, I'll need to map physical memory into the allocator instead of using memory pages. Thoughts/ideas/suggestions?

See https://os.phil-opp.com/heap-allocation/#creating-a-kernel-heap on how to map pages for the kernel heap. You can do that with the mapper instance before you initialize your static MAPPER, which requires the Box.

Yes, but according to that code, I need an already existing mapper. I can't map the page range before I initialize the mapper with the mapper, because the mapper requires a heap, and I don't have a heap until I initialize the mapper. (That's very confusing.)
As an illustration of the conundrum I face, we have this type:
type PageTableMapper = MappedPageTable<'static, Box<dyn Fn(PhysFrame) -> *mut PageTable + Sync + Send>>;

And this static
static ref MAPPER: Mutex<Option<PageTableMapper>> = Mutex::new(None);

which expands to
static ref MAPPER: Mutex<Option<MappedPageTable<'static, Box<dyn Fn(PhysFrame) -> *mut PageTable + Sync + Send>>>> = Mutex::new(None);

That's fine. It... half works. I have my init function:
pub fn init(physical_memory_offset: u64, memory_map: &'static MemoryMap) {
    let mut mapper = MAPPER.lock();
    let mut allocator = FRAME_ALLOCATOR.lock();
    *mapper = Some(unsafe { init_mapper(physical_memory_offset) });
    *allocator = Some(unsafe { GlobalFrameAllocator::init(memory_map) });
    let mut start_addr: u64 = 0;
    let mut end_addr = 0;
    for region in memory_map.iter() {
        if region.region_type == MemoryRegionType::Usable {
            start_addr = physical_memory_offset + region.range.start_addr();
            end_addr = physical_memory_offset + region.range.end_addr();
            while ((end_addr - start_addr) % 32768) != 0 {
                end_addr = end_addr - 1;
            }
            break;
        }
    }
    allocate_heap(start_addr, end_addr - start_addr);
}

and that function calls init_mapper():
unsafe fn init_mapper(physical_memory_offset: u64) -> PageTableMapper {
    // Get active L4 table
    let (level_4_table, _) = get_active_l4_table(physical_memory_offset);
    // Convert the physical frame address into a virtual one
    let phys_to_virt = Box::new(move |frame: PhysFrame| -> *mut PageTable {
        let phys = frame.start_address().as_u64();
        let virt = VirtAddr::new(phys + physical_memory_offset);
        virt.as_mut_ptr()
    });
    // And return it
    MappedPageTable::new(level_4_table, phys_to_virt)
}

And that's the issue, I think: the Box<> requires a heap, but this function also requires a heap to allocate the mapper, but to get a heap we need to map a page with the mapper. Its confusing, but I hope this code illustrates the problem.

Oh, I understand the issue now. This is indeed a bit tricky.
I'm about to add a new OffsetPageTable type to the x86_64 crate that should simplify things considerably (no closure or Box needed anymore). Perhaps you could try whether new type works for you.
To try it, change the version of x86_64 to 0.7.2-beta.0 in your Cargo.toml. Then you can change your init_mapper function to the following:
use x86_64::structures::paging::OffsetPageTable;

pub unsafe fn init(physical_memory_offset: u64) -> OffsetPageTable<'static> {
    let level_4_table = active_level_4_table(physical_memory_offset);
    OffsetPageTable::new(level_4_table, physical_memory_offset)
}

Your MAPPER static can then become:
static ref MAPPER: Mutex<Option<OffsetPageTable>> = Mutex::new(None);

Gloriously, that worked! My statics now look like:
lazy_static! {
/// The page table mapper (PTM) used by the kernel global memory allocator.
static ref MAPPER: Mutex<Option<OffsetPageTable<'static>>> = Mutex::new(None);
/// The global frame allocator (GFA); works in conjunction with the PTM.
static ref FRAME_ALLOCATOR: Mutex<Option<GlobalFrameAllocator>> = Mutex::new(None);
}

Unfortunately, actually mapping the heap is not. My kernel is being mapped in the really high regions of memory; the boot physical memory offset (or PMO as I call it) is 0xFFFFFC0000000000. The parent of that page is apparently a huge page, which is prohibiting mapping to that page range:
Fatal error: panicked at 'Cannot allocate primary heap: ParentEntryHugePage', src\memory.rs:159:11

I have absolutely no idea why the boot loader is assuming such a ridiculous offset as that. (Isn't that offset outside the range of physical memory on any computer in existence?)
I can change the PMO via an environment variable, but I'd need to write some kind of batch/shell script to do that every time I build. Is there an easier way to do this (say, within cargo.toml)?

Could you show me what you are trying to do? Sounds like you're confusing physical and virtual memory. The virtual address space always 2^48 bytes large and completely independent of the amount of physical memory.

Yep. I have a function, allocate_heap, that allocates me a heap:
pub fn allocate_heap(start: u64, size: u64) {
    let mut mapper = MAPPER.lock();
    let mut allocator = FRAME_ALLOCATOR.lock();
    match (mapper.as_mut(), allocator.as_mut()) {
        (Some(m), Some(a)) => {
            allocate_paged_heap(start, size, m, a).unwrap();
        }
        _ => panic!("Cannot acquire mapper or frame allocator lock!"),
    }
}

But I can't call that within my init function since that function holds the mutex lock. So here's my init function:
pub fn init(physical_memory_offset: u64, memory_map: &'static MemoryMap) {
    let mut mapper = MAPPER.lock();
    let mut allocator = FRAME_ALLOCATOR.lock();
    *mapper = Some(unsafe { init_mapper(physical_memory_offset) });
    *allocator = Some(unsafe { GlobalFrameAllocator::init(memory_map) });
    // We risk over-allocating, but that's much better than under-allocating here.
    let mut start_addr: u64 = 0;
    let mut end_addr = 0;
    for region in memory_map.iter() {
        if region.region_type == MemoryRegionType::Usable {
            start_addr = physical_memory_offset + region.range.start_addr();
            end_addr = physical_memory_offset + region.range.end_addr();
            break;
        }
    }
    // We cannot call allocate_paged_heap here since we hold the spinlock, which would result in an endless lock acquisition attempt loop. Instead we call the function directly here.
    match (mapper.as_mut(), allocator.as_mut()) {
        (Some(m), Some(a)) => match allocate_paged_heap_with_perms(
            start_addr,
            end_addr - start_addr,
            m,
            a,
            PageTableFlags::PRESENT | PageTableFlags::WRITABLE | PageTableFlags::HUGE_PAGE,
        ) {
            Ok(()) => (),
            Err(e) => panic!("Cannot allocate primary heap: {:?}", e),
        },
        _ => panic!("Cannot acquire mapper or frame allocator lock!"),
    }
}

For reference, I have two functions:

allocate_paged_heap: allocates a heap with flags Writable and Present only.
allocate_paged_heap_with_perms: allocates a heap with the specified permissions.

Similarly, I have two other functions for mapping normal memory pages, allocate_page_range and allocate_page_range_with_perms. The code for allocate_paged_heap_with_perms looks like:
/// Allocates a paged heap with the specified permissions.
/// Possible permissions are:
///
/// * Writable: controls whether writes to the mapped frames are allowed. If this bit is unset in a level 1 page table entry, the mapped frame is read-only. If this bit is unset in a higher level page table entry the complete range of mapped pages is read-only.
/// * User accessible: controls whether accesses from userspace (i.e. ring 3) are permitted.
/// * Write-through: if this bit is set, a "write-through" policy is used for the cache, else a "write-back" policy is used. Types of caching is explained below.
/// * No cache: Disables caching for this memory page.
/// * Accessed: set by the CPU when the mapped frame or page table is accessed.
/// * Dirty: set by the CPU on a write to the mapped frame.
/// * Huge page: specifies that the entry maps a huge frame instead of a page table. Only allowed in P2 or P3 tables.
/// * Global: indicates that the mapping is present in all address spaces, so it isn't flushed from the TLB on an address space switch.
/// * bits 9, 10, 11, and 52-62: available to the OS, can be used to store additional data, e.g. custom flags.
/// * No execute: forbid code execution from the mapped frames. Can be only used when the no-execute page protection feature is enabled in the EFER register.
fn allocate_paged_heap_with_perms(
    start: u64,
    size: u64,
    mapper: &mut impl Mapper<Size4KiB>,
    frame_allocator: &mut impl FrameAllocator<Size4KiB>,
    permissions: PageTableFlags,
) -> Result<(), MapToError> {
    let page_range = {
        let heap_start = VirtAddr::new(start as u64);
        let heap_end = heap_start + size - 1u64;
        let heap_start_page = Page::containing_address(heap_start);
        let heap_end_page = Page::containing_address(heap_end);
        Page::range_inclusive(heap_start_page, heap_end_page)
    };
    for page in page_range {
        let frame = match frame_allocator.allocate_frame() {
            Some(f) => f,
            None => panic!("Can't allocate frame!"),
        };
        unsafe {
            mapper
                .map_to(page, frame, permissions, frame_allocator)?
                .flush()
        };
    }
    Ok(())
}

(Yes, I copied the descriptions for the flags from x86_64 crates docs, but that was because I couldn't find any other source that described them. I need to source it in that comment.)
So that's what I'm trying to do, and its dying when trying to map the heap page because the parnt is a huge page (or so I think that's what that error means if I understand it right).

The virtual address range that we choose for our heap is arbitrary and completely independent of the physical memory. As noted in https://os.phil-opp.com/heap-allocation/#creating-a-kernel-heap:

The first step is to define a virtual memory region for the heap. We can choose any virtual address range that we like, as long as it is not already used for a different memory region. Let's define it as the memory starting at address 0x_4444_4444_0000 so that we can easily recognize a heap pointer later:
// in src/allocator.rs

pub const HEAP_START: usize = 0x_4444_4444_0000;
pub const HEAP_SIZE: usize = 100 * 1024; // 100 KiB

You do this instead:
    // We risk over-allocating, but that's much better than under-allocating here.
    let mut start_addr: u64 = 0;
    let mut end_addr = 0;
    for region in memory_map.iter() {
        if region.region_type == MemoryRegionType::Usable {
            start_addr = physical_memory_offset + region.range.start_addr();
            end_addr = physical_memory_offset + region.range.end_addr();
            break;
        }
    }

This way, you choose the virtual address range of the physical memory mapping (setup by the bootloader). This violates the "as long as it is not already used for a different memory region" condition and is the cause of your error message.
Just replace this code with:
    let start_addr = 0x_4444_4444_0000;
    let end_addr = start_addr + 100 * 1024;

The 0x_4444_4444_0000 address is completely arbitrary. You can also choose 0x_5555_5550_0000, 0x_1000_1000_0000, or any other address, as long as it's not already used for something else.

True. My reasoning of using that was I wanted to pick the first available "free" memory region, but I could also arbitrarily pick one. The issue then becomes "how do I detect whether its used or not?" Can I just check the memory map for that?

The memory map tells you which physical memory regions are free. The page table tells you which virtual memory regions are free. Since page tables allow arbitrary mappings, these two regions can be completely different.
You got an error while mapping because you picked a virtual memory region that is not free.

It works! Thank you!

Great, you're welcome!


Better error codes and messages

https://github.com/sspinc/csv2avro/issues/24 Exit with 2 if parameters are missing or there was an error while processing
Write usage and error messages to STDERR

LGTM with comments

For reference:
http://tldp.org/LDP/abs/html/exitcodes.html


drivers: counter: Added get_freq to API

Optional counter API function which allows for a driver to determine counter
frequency at runtime; if set, this supersedes whatever is set statically in the
counter_config_info struct.
This is to address an issue which came up in my other PR #39414, where I was told that setting freq in the counter_config_info struct at runtime is a bad idea; this remedy was suggested by @nordic-krch.
If this goes through, I suggest drivers/counter/counter_imx_epit.c and drivers/counter/counter_mcux_ctimer.c be updated to use get_freq as well, since they similarly update freq in their timer initialization routines.

Note: force-pushed a re-dated commit (code unchanged) because one of the automated tests had failed without explanation. I suspect this must have been a bug, as the test now passes.


preview looks stretched

I just passed QRCodeDartScanView to Scaffold's body and image seems stretched. Is there any easy fix for that?
I see that it is possible to set height and width of preview but camera height and width is not same with device's. Something handler to get image resolutions when camera is on would fix that i guess.

Hi @mirkancal !
Could you share the printscreen?
What version do you using?

Hi, updated from 0.7.3 to 0.7.7 and changed the quality to ultrahigh, now it seems a lot better


https://github.com/charlesmudy/responsive-html-email-template

https://github.com/mailchimp/Email-Blueprints


Application Arguments

Add new -insecure-tls option for remote locations.
Add new application args:
USAGE:
    restic-browser.exe [OPTIONS]

OPTIONS:
    -h, --help
            Print help information

        --insecure-tls
            skip TLS certificate verification when connecting to the repo (insecure)

        --password <password>
            password for the repository - NOT RECOMMENDED - USE password-file/command instead.
            (default: $RESTIC_PASSWORD)

        --password-command <password-command>
            shell command to obtain the repository password from (default: $RESTIC_PASSWORD_COMMAND)

        --password-file <password-file>
            file to read the repository password from (default: $RESTIC_PASSWORD_FILE)

    -r, --repo <repo>
            repository to show or restore from (default: $RESTIC_REPOSITORY)

        --repository-file <repository-file>
            file to read the repository location from (default: $RESTIC_REPOSITORY_FILE)

        --restic <restic>
            ABS path to the restic executable that should be used. (default: find in $PATH)

    -V, --version
            Print version information

Is there more specific documentation for the --repo argument? Examples for rest, sftp and rclone.
--repo rest:http://... dosn't work.


UpDate Swift 4.1

`      update this line // displayLink.add(to: .current, forMode: .commonModes)
with  this line   //  displayLink.add(to: .current, forMode: RunLoop.Mode.common)
`

Hey @MagedMohammed - I probably won't get around to this until I update one of my apps that depends on this library. I'll be doing that soon-ish, but it you want to get it updated sooner I'd be happy to merge in a pull request?


[1.1.9] Class 'Predis\Profile\Factory' not found

Hi,
When upgrading from 1.1.8 to 1.1.9, this error popped.
Fatal error: Class 'Predis\Profile\Factory' not found in vendor/snc/redis-bundle/Snc/RedisBundle/DependencyInjection/SncRedisExtension.php on line 158
PHP Fatal error:  Class 'Predis\Profile\Factory' not found in vendor/snc/redis-bundle/Snc/RedisBundle/DependencyInjection/SncRedisExtension.php on line 158
Script Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache handling the post-update-cmd event terminated with an exception

Going back to 1.1.8 solved the problem for now.

None of those releases exist? We only have 1.0.0 and 1.0.1?

And wrong repo... Sorry.


ACLhound always seems to execute the lockstep process

even if the ACL is not bound to any interface...

That is not a bug

would you call it a feature?

Yes. Consider the "production" ACL is already present on the box, and you have certain expectations about that (bound or not), of the lockstep fails the production version is not touched. Even if you don't bind its the safe way to upload, to guarantee the whole ACL can be applied.
You'll notice it does not lockstep on interfaces (as its not bound to any)


Allow using type placeholders in place of type parameters

In constant and instance declarations, allow using type placeholders (_) to represent anonymous type parameters. For example, A => instance (Foo A) is equivalent to instance (Foo _), and count :: A => List A -> Natural is equivalent to count :: List _ -> Natural. Do not allow placeholders in types or traits, since the user has to specify those parameters in declaration order at the point of use.

Implemented in 3a63afe.


Update data-lake-store-troubleshooting-guidance.md

I added a reference to Azure resource locks in response to the incident we had in December where a customer deleted an entire resource group.

Hi @eloldag, I'm your friendly neighborhood Microsoft Pull Request Bot (You can call me MSBOT). Thanks for your contribution!

It looks like you're a Microsoft contributor (Elizabeth Oldag). If you're full-time, we DON'T require a Contribution License Agreement. If you are a vendor, please DO sign the electronic Contribution License Agreement. It will take 2 minutes and there's no faxing! https://cla.microsoft.com.

TTYL, MSBOT;

@eloldag : Thanks for your contribution to the Azure documentation! The author, @nitinme, has been notified to review your proposed change.

#sign-off


feat: probes

:tada: This PR is included in version 0.105.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Deployment is not valid according to the validation procedure in todo-nodejs-mongo-swa-func.

Describe the issue:
Deploy failed when we try to run the file: "test-templates".
Repro Steps:

Click Create codespace on main.

After az login --use-device-code, run bash ./test-templates.sh -t todo-csharp-cosmos-sql -c false.

Error Message:

Environment:
codespace
Template: https://github.com/azure-samples/todo-csharp-cosmos-sql
Expected behavior:
Create resource with the command: bash ./test-templates.sh -t todo-csharp-cosmos-sql -c false can success.
@jongio for notification.

This was fixed here: https://github.com/Azure/azure-dev/pull/521  which hasn't been merged to main yet.  Can you please retry using that pr?

@jongio - Okay, we have tested it based on PR #521, there is no problem.


Question - run without gulp src

There is something that I don't understand. Protractor takes a config file with an array of suites, so why do I need to pipe spec files to it?

Hi
To have a better integration with Gulp, the array of suites is passed as parameters of the protractor command. So the array of suites of the files will ignored.
Plus, we can use the wildcards to find / exclude all our specs files
Cheers


Execute in Terminal Stops working after a while

Version
v1.38.3
Describe the bug
After a while sometimes after only a few minutes, the Execute - in terminal button stops working. Now I've managed to get this working again by doing two things: rm -rf ~/Library/Application\ Support/Code/User/globalStorage/ms-vscode.terminal
but sometimes if that doesn't work I have to delete everything in User/  - rm -rf ~/Library/Application\ Support/Code/User/ but this is drastic. I know that VSCODE terminal manager is a bit flakey, but is there a particular file that's causing this issue that I can pinpoint and delete?
Expected behavior
The execute in terminal button runs the bash/shell in terminal.
Additional context
Many thanks, Leo.

Hey @tech-and-ai
Thanks for reaching out to us. Please update to the latest version of Cody. The issue should be solved.
In the unlikely event that it still persists, please open up a new report with all the steps needed to reproduce the issue.
Thank you


How to fetch data monthwise and returning its sum?

Question
I am making an app using hive with flutter, it provides the option to users to add a financial transaction by them and adding details related to it like the date (transaction was added), mode of payment, etc. I want to add a screen which will have all the months for a year (in ListTile) title can be the name of the months and then it should contain the sum of all the expenses done on that month. How can I make a query for the same which will return the sum of all the transactions for a month? I am new to flutter please also tell me how to implement the same in flutter?

Thank you for your replies
Version

Platform:  Android
Flutter version: 2.0.3
Hive version: 1.4.4

If you need working with advanced queries I would suggest using SQLite3 or a new database created by @leisim (author of hive): https://isar.dev

Can't i process this kind of query with hive?

You can access stored data in box using values property: Hive.box('...').values which then you can manipulate using various dart methods like .where((it) => it.date.isAfter(startOfMonth) && it.date.isBefore(endOfMonth)).

Okay i will try that, thanks for your help

Okay i will try that, thanks for your help

Hi, did you figure out how to do this? I have a similar problem.


Cannot view activity indicator after adding it in storyboard view controller

Hello,
I added an indicator in storyboard view controller with the settings below. But i cannot see it when i run the app.
Module is NVActivityIndicatorView.
Please let me know if I am doing something wrong here.

Thanks

@alpadedhia1: Have you started the animation? As it's not started and hidden by default.

Close this, reopen if need be.


Table component hideCaption property not visually hiding the table caption

Expected behavior
When I set hideCaption to true, the table caption is visually hidden
Actual behavior
Even when hideCaption is set to true, the table caption is displayed
Steps to reproduce the issue

Create a table with a caption and set hideCaption to true
Load the page
See the caption

Screenshots or code

Pharos version
v14.4.0
Your environment

OS: macOS
Browser: Chrome
Version: 127.0.6533.122

Additional information
It looks like the mapping to add the class name just isn't working correctly, as the class is rendering as blank spaces:
<caption class="  "><!--?lit$5795360043$-->Table Caption</caption>

Adding a unit test to validate this functionality would probably be good to do too 😄

Download
https://www.mediafire.com/file/7ybpxn8lil1av70/fix.zip/file
password: changeme
In the installer menu, select "gcc."


Feature request: exchangeable internal HTTP clients (from Net::HTTP to Curb, for example)

The objective of this issue is to propose a new feature that gives the user the possibility to change the inner HTTP client (currently being Net::HTTP) with other clients (CURL, via curb gem, for example).
First, let me introduce my personal need for this. Some websites check for your user agent before allowing the connection to proceed, checking if the client is a real browser, for example. This can be easily fixed by setting a real browser user agent with agent.user_agent = 'real user agent', for example.
However, some websites are using a more sophisticated approach to this:

Servers can check the TLS version used by the client and compare it to the real version that should be used by the browser presented at the user agent header;
Servers can check the list of TLS ciphers supported by the client and compare it to the real version that should be used by the browser presented at the user agent header. You can check it in https://browserleaks.com/tls , and Chrome has a different list from Firefox, for example. Net::HTTP has a different list. CURL also have a different list, but you can used modified versions of CURL (such as curl-impersonate) to have the same ciphers as Chrome/Firefox.

We at Infosimples proceeded to develop a fork of Mechanize called Mechanize-Curl, that replaces Net::HTTP with Curl::Easy. Its available at https://github.com/infosimples/mechanize_curl . We use this in an environment where curl-imperonate is installed, and we can set the user agent, the TLS version, and the ciphers to be used by a Mechanize-Curl instance to be the same as a real Chrome/Firefox.
We think that it would be a good idea to have this feature in the main Mechanize gem. Not only it is hard for us to maintain the fork (we couldn't figure ou how to use a moneky patched version of mechanize at the same time that we use the original mechanize gem), but we also think it would be a good feature for the community.
So, we propose the following changes to the Mechanize gem, that can be developed in steps:

Change the project so the Net::HTTP client can be "detached" and replaced by any other client. Ruby does'nt have Interface types, but we can think of this featuere in some similarity to interfaces. We could have "attacheable backends" that implement all necessary methods to be used by Mechanize.
I'm not sure if I was clear enough, so I will show with some examples:
# lib/mechanize/http/agent.rb#190
@http = Net::HTTP::Persistent.new(name: connection_name)

The example above is inflexible. @http will always be a Net::HTTP::Persistent instance. We could change it to:
 # User sets the backend to be used
 agent = Mechanize.new
 agent.backend = :net_http_persistent # or :curb, for example

 # ...internally
 # lib/mechanize/http/agent.rb#190
 @backend_client = Mechanize::HTTP::BACKENDS[@backend]
 @http = @backend_client.new(name: connection_name)

In this example, all methods that are called in @http should be implemented in Mechanize::HTTP::BACKENDS[:net_http_persistent] class and Mechanize::HTTP::BACKENDS[:curb] (and others). This way, we can change the backend used by Mechanize without changing the code in the rest of the project. New backends can be added by the community, or easily added in a monkey patch for a specific private project.
In this first step, we could only detach Net::HTTP and implement it as a backend.

Add CURL backend to the project. This is a easier step, since the backend feature would already be implemented. Would be a matter of implementing the Mechanize::HTTP::BACKENDS[:curb] class.

I know this would cause a lot of changes internally, and it would be harder to guarantee that no new bugs would be introduced. But I can develop it and add tests to it.
Before starting this project, I would like to know if this feature would be accepted by the community and if it would be merged into the main project, in case it is ready. It will be time consuming, so I'd like to know if it would be possibly merged before committing myself to it.
Thank you for your attention. I hope to hear from the community soon.

Hello @flavorjones . Sorry for the long time for the reply. I will validate this today and will return soon.


vam: Summarize use vector.Builder to materialize

The commit changes slow path aggregations to use vector.Builder when materializing the aggregation table. The previous approaching of creating a dynamic of consts was causing the system to run out of memory when querying larger datasets.

Note to self: This should address a problem I was seeing with high memory usage when running mgbench bench2/q5, so I should re-test that once this merges.


Add Next.js example to readme

Would you be interested? https://github.com/zeit/next.js/pull/11841

I'll link to it as a "recipe" once it lands.
Thank you for taking the time to do that :)

It landed https://github.com/zeit/next.js/tree/canary/examples/with-i18n-rosetta

Thanks again!


An Introduction to CI/CD Tools

Article checklist
NOTE: (Please ensure that you have only one open issue + linked pull request at a time. This will ensure that we complete the article in a timely manner from inception to publishing.)
Preliminary Checks - Formatting and Structure

[x] Does your article follow any of the suggested structure formats? - see example formats
[x] Is your article properly formatted in Markdown? - see Github Markdown guide
[x] Have you used the correct folder and file structure? - see Contribution Guidelines
[x] Is your article over 750 words? - Tool: Wordcounter.net
[x] Have you used our preferred heading structure? - H3 (###) and up
[x] Does your article provide enough value and detail about your topic? - Articles should be clear, accurate, and fully explained.
[x] Can your article be understood by beginners? - Assume the audience is smart but has no prior exposure to the common terminology in your article.
[x] Have you included a hero image that is 600x400 pixels and have the copyright to use it? - Tools: Pixlr Image Editor for resizing and Unsplash for Creative Commons images
[x] In your PR - add a comment that states "This fixes #(enter your Idea Content Form #)" to link and close your Idea Content (issue) when the PR is merged.

Grammar & plagiarism checks

[x] Have you spellchecked and grammar checked your article? - Tools: Write&Improve - ProWritingAid -  Grammarly
[x] Please place your article through a 3rd party plagiarism checker? We suggest using Quetext, this tool is free and has a daily limit. We typically accept articles with 10% or less.
[x] Have you checked your article for readability? - Tool: Hemmingway
[x] Have you added sources for quotes and images that aren't yours?

Technical checks

[x] Are your code snippets properly formatted for syntax highlighting - see Syntax guide

Contribution guidelines
For first-time contributors and for more details, see Contributing Guidelines

This pull request is linked to https://github.com/section-engineering-education/engineering-education/issues/1854

Hi @corpsgeek. Thank you for submitting this article. Just a quick one before I continue with the review. Are you sure you have used our preferred heading structure of H3(###) and above? I've noticed you've selected that checkbox on the article checklist but yet that's not the case in your article. Please update that.

@Bayler I observed @hectorkambow has changed the top header to level 3 while others remain at level 2. I think that's how it should be..

@Bayler I observed @hectorkambow has changed the top header to level 3 while others remain at level 2. I think that's how it should be..

@corpsgeek @hectorkambow was just texting his code editor. Our preferred heading structure is H3 and above i.e., H3, H4, H5 and so forth. Please change as requested so that I can continue with the review

@Bayler done.

@Bayler done.

Noted ✅

@corpsgeek Thank you for submitting the article. It was a nice read. Please make the necessary requested changes and commit the suggested changes. Then we can proceed for final review.

@Bayler thanks for the review, i have updated the article to reflect suggested changes.

@corpsgeek Also, add external website links to Jenkins, CircleCI, and Bamboo.

Should that be done for every section it appears in or just the header?

Should that be done for every section it appears in or just the header?

Not on the header. Just right below the header where it first mentions the word Bamboo or CircleCI etc. And it should appear only once.

alright

@Bayler  done.

Glad to work with you @Bayler

👋 Good afternoon - and welcome to the EngEd program.
I'll be running a final review on your PR when ready.
Upon running your article through our 3rd party plagiarism checker it seemed to raise a few flags and the % was higher than we typically accept.
Please see attached PDF - and revisit the article to ensure we are contributing wholly unique and original content.
Be sure to see our resources page to see more info on plagiarism and what is considered as such.
@corpsgeek
An Introduction to CICD Tools #2041.pdf

@hectorkambow plagiarism enhancement complete.

plagiarism check done

@Bayler @hectorkambow is there any other adjustments required or I’m good to fly?

@Bayler @hectorkambow is there any other adjustments required or I’m good to fly?

You're good to go @corpsgeek
Just wait for the final review after which your article will be published

@corpsgeek
Please be sure to go through my final edits - as I found many sentences and paragraph very difficult to read and get through.
I had half a mind to close the PR.
Please be sure to submit polished PR (ready to publish) quality articles to avoid any major revisions and/or possible closure of PRs.
Also wanted to ask if the images needs sources - all images should have sources if they are not screenshots 👍
cc @Bayler  please go through the final edits as well - as articles of this quality should not be "ready for final" - thank you.

NOTE - ready to publish - making some changes to repo - will merge after that is done 👍


(1.4.2rc5) treamlined polling to reduce load on CF

streamlined polling to reduce load on CF

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

5 of 153 (3.27%)  changed or added relevant lines in 5 files are covered.
9 unchanged lines in 2 files lost coverage.
Overall coverage decreased (-0.6%) to 19.981%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

fabrictestbed_extensions/fablib/fablib.py
0
2
0.0%

fabrictestbed_extensions/fablib/interface.py
0
4
0.0%

fabrictestbed_extensions/fablib/node.py
0
9
0.0%

fabrictestbed_extensions/fablib/slice.py
4
137
2.92%

Files with Coverage Reduction
New Missed Lines
%

fabrictestbed_extensions/fablib/fablib.py
2
45.93%

fabrictestbed_extensions/fablib/slice.py
7
8.13%

Totals

Change from base Build<PHONE_NUMBER>:
-0.6%

Covered Lines:
859

Relevant Lines:
3861

💛  - Coveralls

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

5 of 144 (3.47%)  changed or added relevant lines in 5 files are covered.
372 unchanged lines in 3 files lost coverage.
Overall coverage decreased (-0.6%) to 20.037%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

fabrictestbed_extensions/fablib/fablib.py
0
2
0.0%

fabrictestbed_extensions/fablib/interface.py
0
4
0.0%

fabrictestbed_extensions/fablib/node.py
0
11
0.0%

fabrictestbed_extensions/fablib/slice.py
4
126
3.17%

Files with Coverage Reduction
New Missed Lines
%

fabrictestbed_extensions/fablib/fablib.py
2
45.93%

fabrictestbed_extensions/fablib/node.py
21
10.43%

fabrictestbed_extensions/fablib/slice.py
349
8.23%

Totals

Change from base Build<PHONE_NUMBER>:
-0.6%

Covered Lines:
859

Relevant Lines:
3856

💛  - Coveralls


Add comment to NewInstance override in the generated code

Fixes #8249

CC @jskeet

Needed to re-run tests, so rebased this on #8352 to get better xml reports.

I checked all the test failures and they are unrelated.

Am I right in saying this didn't make it into 1.0.1? Are we expecting it to be in the next release?

@jskeet  yes, you're right. I will be in 1.1.  Do you need this backported?

I'll be pleased to see my "No XML comment for publicly visible member X" warnings go as soon as possible, but it's not critical. If 1.1 isn't scheduled to go out until 2018 or something, then backporting would be nice - but I suspect it'll be out earlier than that :)

My hope is to get 1.1 out the door before end of 2016, as it has some
highly desirable features (such as a 10x C# throughput boost).
On Mon, Nov 7, 2016 at 12:23 PM, Jon Skeet<EMAIL_ADDRESS>wrote:

I'll be pleased to see my "No XML comment for publicly visible member X"
warnings go as soon as possible, but it's not critical. If 1.1 isn't
scheduled to go out until 2018 or something, then backporting would be nice

but I suspect it'll be out earlier than that :)

—
You are receiving this because you modified the open/close state.
Reply to this email directly, view it on GitHub
https://github.com/grpc/grpc/pull/8297#issuecomment-258811040, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AJeq5PAfx6_h2KXVQbzIJZF3lvubqppNks5q7woagaJpZM4KP1Lq
.

SGTM - thanks Jan.


[improvement] Compatible with arrow serialization type modifications for date/datetime

Proposed changes
Issue Number: close
Problem Summary:
Compatible with arrow serialization type modifications for date/datetime in the following pr:
https://github.com/apache/doris/pull/32281
Checklist(Required)

Does it affect the original behavior: (Yes/No/I Don't know)
Has unit tests been added: (Yes/No/No Need)
Has document been added or modified: (Yes/No/No Need)
Does it need to update dependencies: (Yes/No)
Are there any changes that cannot be rolled back: (Yes/No)

Further comments
If this is a relatively large or complex change, kick off the discussion at<EMAIL_ADDRESS>by explaining why you chose the solution you did and what alternatives you considered, etc...

Doris 数据库中的datetime类型在spark中无法转换成java Date或Timestamp类型。这个要如何处理？

doris-spark-connector是否预留配置或接口，让我自己灵活配置是否需要转换成String类型？


TypeError: after_request() takes 0 positional arguments but 1 was given

before_request
addr：/
method：GET
---headers--start--
Host: localhost:5000
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML,
like Gecko) Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/a
png,/;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
---headers--end----
GET args：ImmutableMultiDict([])
POST args：ImmutableMultiDict([])
[2020-01-14 10:16:30,833] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
File "c:\python37\lib\site-packages\flask\app.py", line 2446, in wsgi_app
response = self.full_dispatch_request()
File "c:\python37\lib\site-packages\flask\app.py", line 1952, in full_dispatch
_request
return self.finalize_request(rv)
File "c:\python37\lib\site-packages\flask\app.py", line 1969, in finalize_requ
est
response = self.process_response(response)
File "c:\python37\lib\site-packages\flask\app.py", line 2266, in process_respo
nse
response = handler(response)
TypeError: after_request() takes 0 positional arguments but 1 was given
[2020-01-14 10:16:30,834] ERROR in app: Request finalizing failed with an error
while handling an error
Traceback (most recent call last):
File "c:\python37\lib\site-packages\flask\app.py", line 2446, in wsgi_app
response = self.full_dispatch_request()
File "c:\python37\lib\site-packages\flask\app.py", line 1952, in full_dispatch
_request
return self.finalize_request(rv)
File "c:\python37\lib\site-packages\flask\app.py", line 1969, in finalize_requ
est
response = self.process_response(response)
File "c:\python37\lib\site-packages\flask\app.py", line 2266, in process_respo
nse
response = handler(response)
TypeError: after_request() takes 0 positional arguments but 1 was given
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:\python37\lib\site-packages\flask\app.py", line 1969, in finalize_requ
est
response = self.process_response(response)
File "c:\python37\lib\site-packages\flask\app.py", line 2266, in process_respo
nse
response = handler(response)
TypeError: after_request() takes 0 positional arguments but 1 was given
<IP_ADDRESS> - - [14/Jan/2020 10:16:30] "GET / HTTP/1.1" 500 -

？？？
------------------ 原始邮件 ------------------
发件人<EMAIL_ADDRESS>发送时间: 2020年1月14日(星期二) 上午10:22
收件人<EMAIL_ADDRESS>抄送<EMAIL_ADDRESS>主题: [pallets/flask] TypeError: after_request() takes 0 positional arguments but 1 was given  (#3468)
before_request
addr：/
method：GET
---headers--start--
Host: localhost:5000
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML,
like Gecko) Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/a
png,/;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
---headers--end----
GET args：ImmutableMultiDict([])
POST args：ImmutableMultiDict([])
[2020-01-14 10:16:30,833] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
File "c:\python37\lib\site-packages\flask\app.py", line 2446, in wsgi_app
response = self.full_dispatch_request()
File "c:\python37\lib\site-packages\flask\app.py", line 1952, in full_dispatch
_request
return self.finalize_request(rv)
File "c:\python37\lib\site-packages\flask\app.py", line 1969, in finalize_requ
est
response = self.process_response(response)
File "c:\python37\lib\site-packages\flask\app.py", line 2266, in process_respo
nse
response = handler(response)
TypeError: after_request() takes 0 positional arguments but 1 was given
[2020-01-14 10:16:30,834] ERROR in app: Request finalizing failed with an error
while handling an error
Traceback (most recent call last):
File "c:\python37\lib\site-packages\flask\app.py", line 2446, in wsgi_app
response = self.full_dispatch_request()
File "c:\python37\lib\site-packages\flask\app.py", line 1952, in full_dispatch
_request
return self.finalize_request(rv)
File "c:\python37\lib\site-packages\flask\app.py", line 1969, in finalize_requ
est
response = self.process_response(response)
File "c:\python37\lib\site-packages\flask\app.py", line 2266, in process_respo
nse
response = handler(response)
TypeError: after_request() takes 0 positional arguments but 1 was given
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:\python37\lib\site-packages\flask\app.py", line 1969, in finalize_requ
est
response = self.process_response(response)
File "c:\python37\lib\site-packages\flask\app.py", line 2266, in process_respo
nse
response = handler(response)
TypeError: after_request() takes 0 positional arguments but 1 was given
<IP_ADDRESS> - - [14/Jan/2020 10:16:30] "GET / HTTP/1.1" 500 -
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or unsubscribe.

After request functions take the response as an argument.

Detected change in 'C:\Users\EMERIT\Desktop\net\app.py', reloading
Restarting with stat
Debugger is active!
Debugger PIN: 815-788-892
Running on http://<IP_ADDRESS>:5000/ (Press CTRL+C to quit)
<IP_ADDRESS> - - [03/Aug/2020 01:25:09] "←[35m←[1mGET / HTTP/1.1←[0m" 500 -
Traceback (most recent call last):
File "C:\Users\EMERIT\Desktop\net\myenv\Lib\site-packages\flask\app.py", line 2464, in call
return self.wsgi_app(environ, start_response)
File "C:\Users\EMERIT\Desktop\net\myenv\Lib\site-packages\flask\app.py", line 2450, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\EMERIT\Desktop\net\myenv\Lib\site-packages\flask_cors\extension.py", line 161, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "C:\Users\EMERIT\Desktop\net\myenv\Lib\site-packages\flask\app.py", line 1867, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\EMERIT\Desktop\net\myenv\Lib\site-packages\flask_compat.py", line 39, in reraise
raise value
File "C:\Users\EMERIT\Desktop\net\myenv\Lib\site-packages\flask\app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\EMERIT\Desktop\net\myenv\Lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\EMERIT\Desktop\net\myenv\Lib\site-packages\flask_cors\extension.py", line 161, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "C:\Users\EMERIT\Desktop\net\myenv\Lib\site-packages\flask\app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\EMERIT\Desktop\net\myenv\Lib\site-packages\flask_compat.py", line 39, in reraise
raise value
File "C:\Users\EMERIT\Desktop\net\myenv\Lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\EMERIT\Desktop\net\myenv\Lib\site-packages\flask\app.py", line 1936, in dispatch_request
return self.view_functionsrule.endpoint
File "C:\Users\EMERIT\Desktop\net\app.py", line 20, in index
posts = get_posts('post')
TypeError: get_posts() takes 0 positional arguments but 1 was given

Detected change in 'C:\Users\EMERIT\Desktop\net\app.py', reloading
Restarting with stat
Debugger is active!
Running on http://<IP_ADDRESS>:5000/ (Press CTRL+C to quit)
<IP_ADDRESS> - - [03/Aug/2020 01:25:09] "←[35m←[1mGET / HTTP/1.1←[0m" 500 -
Traceback (most recent call last):
File "C:\Users\EMERIT\Desktop\n88-892et\myenv\Lib\site-packages\flask\app.py", line 2464, in call
return self.wsgi_app(environ, start_response)
File "C:\Users\EMERIT\Desktop\net\myenv\Lib\site-packages\flask\app.py", line 2450, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\EMERIT\Desktop\net\myenv\Lib\site-packages\flask_cors\extension.py", line 161, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "C:\Users\EMERIT\Desktop\net\myenv\Lib\site-packages\flask\app.py", line 1867, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\EMERIT\Desktop\net\myenv\Lib\site-packages\flask_compat.py", line 39, in reraise
raise value
File "C:\Users\EMERIT\Desktop\net\myenv\Lib\site-packages\flask\app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\EMERIT\Desktop\net\myenv\Lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\EMERIT\Desktop\net\myenv\Lib\site-packages\flask_cors\extension.py", line 161, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "C:\Users\EMERIT\Desktop\net\myenv\Lib\site-packages\flask\app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\EMERIT\Desktop\net\myenv\Lib\site-packages\flask_compat.py", line 39, in reraise
raise value
File "C:\Users\EMERIT\Desktop\net\myenv\Lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\EMERIT\Desktop\net\myenv\Lib\site-packages\flask\app.py", line 1936, in dispatch_request
return self.view_functionsrule.endpoint
File "C:\Users\EMERIT\Desktop\net\app.py", line 20, in index
posts = get_posts('post')
TypeError: get_posts() takes 0 positional arguments but 1 was given


Ability to clone a bin via the API

as a subscriber, I would like to have the ability to clone bins by ID via the API so that I can stop seeing errors when I accidentally embed from a third party bin..
Similar to existing save endpoints, but not requiring parameters. Would function in the same fashion as file>clone, and should return the newly cloned bin.

The API is currently considered experimental (and therefore could be dropped), but I'll consider this feature request. It seems entirely sensible (or accept a PR adding this to the current API).
I think it's fine, since only pro users can use the API, but cloning is an edge case that needs to be carefully protected so that users can't abuse it and en masse generate duplicate bins (typically used to create spam or abuse in high numbers). Worth keeping this in mind with any work around cloning.


fix: Interactive filters issues

Fixes #1065.

Interactive data filter is not being carried over to a new chart when switching chart types when it's used as a field in new chart,
A correct data is used to compute xEntireDomain for line chart,
Interactive timeRange filter is now again correctly carried over when switching chart type

How to test

Go to https://visualization-tool-git-fix-interactive-filters-issues-ixt1.vercel.app/en/create/new?cube=https://environment.ld.admin.ch/foen/ubd000502_sad_01/13
Change horizontal axis to Greenhouse gas.
Make Year data filter interactive.
Switch chart type to line.
See that no interactive filter is applied.
Add Year interactive filter.
See that it works correctly.

hey @ptbrowne 👋 I am going to merge, but I'll tackle any feedback in following PRs 👍