Request: Tdarr (A media transcoder)

Hi, another part of the 'arr family ais Tdarr. It's description is 'a conditional based transcoding application for automating media library transcode/remux management'. Any chance of adding this? Thanks.

Thanks, I don't have much time for the moment but I'll keep this here for the moment.

Hi, the addon is up, let me know if it works! Thanks

Both configs and servers are exposed in the config location defined in the addon config

Hey ,thanks for adding this. I'm getting a '[FATAL] Tdarr_Server - Error in main thread:Error: write EPIPE' error in the log when I launh. Is this an issue you were getting?

Hi, mmh I don't have this error. What is your system configuration (at the start of the log you should have a banner with your key infos summarized)? Thanks!

Do you mean the user uid, gid banner?

I mean could you please post the full log? I would expect it to start with an informative banner on your system. Thanks!

And BTW, despite the error is it working or not? As the error seems to relate to plugins download?

Or simply restarting, indeed i see that sometimes it doesn't work on first try...

GID/UID
User uid:    0
User gid:    0
[cont-init.d] 10-adduser: exited 0.
[cont-init.d] 90-custom-folders: executing...
[cont-init.d] 90-custom-folders: exited 0.
[cont-init.d] 92-local_mounts.sh: executing...
[cont-init.d] 92-local_mounts.sh: exited 0.
[cont-init.d] 92-smb_mounts.sh: executing...
Mounting smb share(s)...
[20:11:48] INFO: ... //<IP_ADDRESS>/Library successfully mounted to /mnt/Library with options
[cont-init.d] 92-smb_mounts.sh: exited 0.
[cont-init.d] 99-custom-scripts: executing...
[custom-init] no custom files found exiting...
[cont-init.d] 99-custom-scripts: exited 0.
[cont-init.d] done.
[services.d] starting services
[services.d] done.
Starting Tdarr_Server
Starting Tdarr_Node
version: 2.00.16
linux_x64_docker_true
[2022-03-25T20:11:49.230] [INFO] Tdarr_Node - /tdarr/configs/Tdarr_Node_Config.json
[2022-03-25T20:11:49.236] [INFO] Tdarr_Node - {
nodeID: 'MyInternalNode',
nodeIP: '<IP_ADDRESS>',
nodePort: '8267',
serverIP: '<IP_ADDRESS>',
serverPort: '8266',
handbrakePath: '',
ffmpegPath: '',
mkvpropeditPath: '',
pathTranslators: [ { server: '', node: '' } ],
platform_arch: 'linux_x64_docker_true',
logLevel: 'INFO'
}
version: 2.00.16
linux_x64_docker_true
Preparing environment
[2022-03-25T20:11:49.324] [INFO] Tdarr_Node - Starting Tdarr_Node
[2022-03-25T20:11:49.334] [INFO] Tdarr_Node - Preparing environment
[2022-03-25T20:11:49.469] [INFO] Tdarr_Node - Updating plugins
[2022-03-25T20:11:49.476] [INFO] Tdarr_Node - Tdarr_Node listening at http://<IP_ADDRESS>:8267
[2022-03-25T20:11:49.581] [INFO] Tdarr_Node - ---------------Binary tests start----------------
[2022-03-25T20:11:49.589] [INFO] Tdarr_Node - handbrakePath:HandBrakeCLI
[2022-03-25T20:11:49.596] [INFO] Tdarr_Node - ffmpegPath:ffmpeg
[2022-03-25T20:11:49.604] [INFO] Tdarr_Node - mkvpropedit:mkvpropedit
[2022-03-25T20:11:49.605] [INFO] Tdarr_Node - Binary test 1: handbrakePath working
[2022-03-25T20:11:49.606] [INFO] Tdarr_Node - Binary test 2: ffmpegPath working
[2022-03-25T20:11:49.607] [INFO] Tdarr_Node - ---------------Binary tests end-------------------
[2022-03-25T20:11:49.815] [INFO] Tdarr_Server - /tdarr/configs/Tdarr_Server_Config.json
[2022-03-25T20:11:49.821] [INFO] Tdarr_Server - {
serverPort: '8266',
webUIPort: '8265',
serverIP: '<IP_ADDRESS>',
handbrakePath: '',
ffmpegPath: '',
logLevel: 'INFO'
}
[2022-03-25T20:11:49.854] [INFO] Tdarr_Server - Reading DB:>>>>>>>>>>(100%):0:SettingsGlobalJSONDB::Reading done
[2022-03-25T20:11:49.855] [INFO] Tdarr_Server - Reading DB:>>>>>>>>>>(100%):0:LibrarySettingsJSONDB::Reading done
[2022-03-25T20:11:49.855] [INFO] Tdarr_Server - Reading DB:>>>>>>>>>>(100%):0:NodeJSONDB::Reading done
[2022-03-25T20:11:49.855] [INFO] Tdarr_Server - Reading DB:>>>>>>>>>>(100%):0:StatisticsJSONDB::Reading done
[2022-03-25T20:11:49.855] [INFO] Tdarr_Server - Reading DB:>>>>>>>>>>(100%):0:StagedJSONDB::Reading done
[2022-03-25T20:11:49.962] [ERROR] Tdarr_Node - Failed to contact server, retrying...
[2022-03-25T20:11:50.130] [INFO] Tdarr_Server - exiftoolPath:/tdarr/Tdarr_Server/node_modules/exiftool-vendored.pl/bin/exiftool
[2022-03-25T20:11:50.182] [INFO] Tdarr_Server - ffprobePath:/tdarr/Tdarr_Server/node_modules/@ffprobe-installer/linux-x64/ffprobe
[2022-03-25T20:11:50.196] [INFO] Tdarr_Server - CCExtractorPath:/tdarr/Tdarr_Server/assets/app/ccextractor/ccextractor
[2022-03-25T20:11:50.204] [INFO] Tdarr_Server - Scanner test: Scanning file start
[2022-03-25T20:11:50.410] [INFO] Tdarr_Server - Tdarr started.
[2022-03-25T20:11:50.411] [INFO] Tdarr_Server - Tdarr documents folder:/tdarr/server
[2022-03-25T20:11:50.411] [INFO] Tdarr_Server - Checking directories
[2022-03-25T20:11:50.413] [INFO] Tdarr_Server - Tdarr_Server listening at http://<IP_ADDRESS>:8266
[2022-03-25T20:11:50.413] [INFO] Tdarr_Server - Tdarr_Server listening at http://<IP_ADDRESS>:8265
[2022-03-25T20:11:50.478] [INFO] Tdarr_Server - ---------------Binary tests start----------------
[2022-03-25T20:11:50.485] [INFO] Tdarr_Server - handbrakePath:HandBrakeCLI
[2022-03-25T20:11:50.493] [INFO] Tdarr_Server - ffmpegPath:ffmpeg
[2022-03-25T20:11:50.500] [INFO] Tdarr_Server - mkvpropedit:mkvpropedit
[2022-03-25T20:11:50.500] [INFO] Tdarr_Server - Binary test 1: handbrakePath working
[2022-03-25T20:11:50.501] [INFO] Tdarr_Server - Binary test 2: ffmpegPath working
[2022-03-25T20:11:50.501] [INFO] Tdarr_Server - ---------------Binary tests end-------------------
[2022-03-25T20:11:51.411] [INFO] Tdarr_Server - Database has finished initialising
[2022-03-25T20:11:51.413] [INFO] Tdarr_Server - Updating plugins
[2022-03-25T20:11:51.427] [INFO] Tdarr_Server - Job report history size is within limit. Limit:10737418240 Size:0
[2022-03-25T20:11:51.520] [INFO] Tdarr_Node - Node registered
[2022-03-25T20:11:51.968] [INFO] Tdarr_Node - Cloning plugins
[2022-03-25T20:11:52.281] [INFO] Tdarr_Server - Cloning plugins
[2022-03-25T20:11:52.837] [INFO] Tdarr_Server - Scanner test: Scanning file end
[2022-03-25T20:11:52.837] [INFO] Tdarr_Server - ---------------Scanner tests start----------------
[2022-03-25T20:11:52.837] [INFO] Tdarr_Server - Scanner test 1: FFprobe working
[2022-03-25T20:11:52.837] [INFO] Tdarr_Server - Scanner test 2: Exiftool working
[2022-03-25T20:11:52.837] [INFO] Tdarr_Server - Scanner test 3: Mediainfo working
[2022-03-25T20:11:52.837] [INFO] Tdarr_Server - Scanner test 4: CCExtractor working
[2022-03-25T20:11:52.837] [INFO] Tdarr_Server - ---------------Scanner tests end----------------
[2022-03-25T20:11:52.942] [INFO] Tdarr_Node - Finished downloading plugins!
[2022-03-25T20:11:52.943] [INFO] Tdarr_Server - Finished downloading plugins!

I've done numerous restarts, including a home assistant one. Everything works until it tries to transcode and then it fails.

mmh... what is your system ? x64 on homeassistant OS ?
Perhaps it's an issue with drivers

Is the moment where you try transcoding and it crashes in your log above?

I've following this guide (https://www.google.com/search?q=how+to+use+tdarr&oq=how+to+use+tdarr&aqs=edge..69i57j0i13j0i13i30l3j69i64.4096j0j4&sourceid=chrome&ie=UTF-8#kpvalbx=_Ing9YrOYEf7j7_UP9bqECA36), set all required paths, and it worked well...


Link with icon – inverse visual specs

User Story

As a [user role below]:

Designer

I need to:

provide visual specs for inverse link

so that:

it can be used within patterns.
Additional information

used within Callout quote pattern
{{user insights}}
{{user metrics}}

Acceptance criteria

[ ] Visual specs created
[ ] Visual spec file on Box
[ ] Notify BA and dev team of the update

@wonilsuhibm could you please review the inverse specs for Link with icon Box
Note:

We don't have a token for inverse disabled
We don't have a token for inverse visited (though we could change this to blue or not include a visited state)
I am recommending we hard code these values for now, and we can propose a token if we need.
I followed the interaction states that are shown on the Notification with a link, which you can see in the live demo, all the interactive states are the same color, but have varying text decorations when the link is inverted.

For this release, this seems like a good option until we determine if we should be using inline theming.
Once you approve, please let @photodow know he can review for updating the functional specs.

@oliviaflory thank you.
This all looks good.

We should look into removing the visited state color.
The disabled state has slightly higher contrast, which I like—just curious, do you know how they came to this particular color?

@photodow I think this is ready for func specs.


Missing "unclosed tag" error on child nodes.

outputs:
React.createElement("div", null, "\x3Cb\x3E")

rather than throwing an error that  is unclosed. The JSX transformer throws an error:
Expected corresponding JSX closing tag for

This is a consequence of how loose/dumb the parser is. I'm currently experimenting with a new implementation which would tighten up to the CJSX grammar a bit, in a way that would make detecting invalid tags much simpler.

Do you have any idea on when the new parser will be done? Do you have any insight how to fix this problem with the current parser?

No timeline on the new parser as yet. The current compiler could be made to fail if something which looks like a tag was detected in a CJSX 'text node', which isn't a very clean solution from a parsing perspective, but would probably catch most cases.


Border radius not getting applied when parent view has border radius.

When a view with border radius is written inside a parent view which also have a border radius, Then the childs border radius, and backgroundColor are not getting rendered.
I was trying to make a Custom Radio Button with a holo circular view as a parent and a filled circle within the parent. The inner filled circle not getting rendered properly.
React Native version: 0.61.1
Steps To Reproduce

Create a View with non zero borderRadius in its style prop
Add a child view inside the view which also have a borderRadius in style prop
The childs borderRadius and backgroundColor, not geting rendered untill you remove parents borderRadius
My View is as bellow

  <View style={{
        height: 24,
        width: 24,
        borderRadius: 12,
        borderWidth: 2,
        borderColor: '#00b34f',
        alignItems: 'center',
        justifyContent: 'center',
      }}>
              <View style={{
               height: 12,
               width: 12,
               borderRadius: 6,
               backgroundColor: '#00b34f',
              }} />
</View>

Add information, child view(with text) rendered, background color child view NOT rendered
Steps To Reproduce
<View style={{width: 300, height: 300, backgroundColor: 'red', borderRadius: 6}}>          <View style={{width: 200, height: 200, backgroundColor: 'green', borderRadius: 4}}>                  <Text>TEST TEXT</Text>          </View> </View>

Fixed on 0.61.2

No. Still have the issue after updating to 0.61.2


New cop for yoda expressions

Inspired by https://palantir.github.io/tslint/rules/binary-expression-operand-order/
This is in addition to existing Style/YodaCondition cop.
# bad
y = 1 + x

# good
y = x + 1

Seems like a good idea to me.

@fatkodima @bbatsov I'd like to take a jab at this.


Fix CI

Is there an existing feature request for this?

[X] I have searched the existing feature requests

Is your feature request related to a problem? Please describe.
CI is failing, and tests need to be updated. However, there are some things to be updated on the CI itself, other than self-hosted runner #35.
Describe the feature you are requesting, as well as the possible use case(s) for it.
Update CI that include:

Pipeline fixes
Status report update
Codecov report

Indicate the importance of this feature to you.

[X] Must-have
[ ] Should-have
[ ] Nice-to-have

Anything else?
No response

We need to run tests on every merge to main to keep relevant coverage updates.  Also, update Continuous Delivery to Build.


Betfair scraper doesn't work. Warning sign appear!

ENVIRONMENT:
https://admin.peviitor.ro/
Browser: Chrome
Device: Laptop
OS: Windows 10
STEPS TO REPRODUCE:
Enter URL in browser
Go to "https://admin.peviitor.ro/" and check "Cont" from top bar
Click on "Scraperi"
Click on "Actualizeaza" button
Click on figure/picture "based_scraper_py"
Check BETFAIR scraper
Click on BETFAIR scraper
EXPECTED RESULTS:
BETFAIR scraper must to run .
ACTUAL RESULTS:
Scraper doesn't work. Warning sign appear - see below screenshot:

Scraperul a rulat ...


When video pause, how can i dismiss the ui "more video"?

To hide 'More Videos' section
Go to ayp_youtube_player.html#L116 add this function and call this function from inside onReady state and it will hide the popup
function hideMoreVideosPopup() {
            setInterval(() => {
                const playerIFrame = document.querySelector("iframe");

                if (!playerIFrame) {
                    return;
                }

                const frameDoc = playerIFrame.contentDocument;

                if (!frameDoc) {
                    return;
                }

                 const overlayContainer = frameDoc.getElementsByClassName("ytp-pause-overlay-container")[0];
                  if (!overlayContainer) {
                    return;
                }
                 overlayContainer.style.display = 'none';

            }, 100);
        }

thanks a lot，but is it legal？how about title and logo？I find issue to hide title, but no method to hide logo

And if I use sdk, is there any method to change ayp_youtube_player.html?

I think unless you don't hide the YouTube logo at the bottom corner it should be legal to hide anything else (eg : you can hide title,channel,etc..)
But i am not sure you should read the official documentation to be sure.
And to be able to edit this library in your project you can just add this library as a module in Android Studio.

hi~I finid this way to change quelity, did it work? should getQualityList after onReady callback?

Yes it works. But i don't recommend you to call getAvailableQualityLevels from onReady callback because onReady is calling just once after you load the player view and if you load another video onReady will not be called again.You can call it from somewhere else for example PLAYING_STATE

FYI: altering the UI of the IFrame player UI in any way might give you issue with YouTube terms of service if you're publishing the app on the PlayStore.

understood! thanks a lot

Can I use this with custom view. And how to use ayp_youtube_player with the Iframe player I am currently using
val options: IFramePlayerOptions =
IFramePlayerOptions.Builder().controls(0).rel(0).build()


MTLIGAccelBuffer addDebugMarker:range:]: unrecognized selector

I receive this error message:
   Compiling wgpu v0.4.0 (/Users/da1/Sources/rust/wgpu-rs)
    Finished dev [unoptimized + debuginfo] target(s) in 6.35s
     Running `target/debug/examples/cube`
2019-11-25 14:56:16.620 cube[16426:135436] -[MTLIGAccelBuffer addDebugMarker:range:]: unrecognized selector sent to instance 0x7fdfe35a14c0
[2019-11-25T13:56:16Z ERROR relevant] Values of this type can't be dropped!
[1]    16426 segmentation fault  cargo run --example cube

when running the cube example or the skybox one.
I am on Mac OS "El Capitan", MacBook Pro (Retina, 13-inch, Mid 2014).
GPU Intel Iris 1536 MB.

We seem to be missing a check for addDebugMarker selector to be supported.

What's the proper way to fix this, to test if addDebugMarker is allowed?
Failing that, how can i get wgpu to use a modified version of this crate with the calls to add_debug_marker commented out?

@counterfactual-regret-minimization we could add a field like supports_debug_markers: bool to PrivateCapabilities.
supports_debug_marker should be true or false based on whether the macOS or iOS/tvOS versions meet the minimum requirements for the addDebugMarker API (see the right pane), so something like:
supports_debug_markers: if is_mac {
        caps.has_version_at_least(10, 13)
    } else {
        caps.has_version_at_least(11, 0)
    }

Then whenever we use add_debug_marker we could check caps.supports_debug_markers first.

Did that, now the device.rs line 119 assertion platform does not support specialization panics.
I don't know what that does, but putting another self.shared.private_caps.supports_debug_markers check around the assertion lets the quad example work.
Are you sure those are the right version numbers? It says "macOS 10.12+", which i'd interpret to mean 10.12 or higher, and where does the major version 11 come from for non-macOS OSes?

Oops, you're right – I meant to write (10, 12) for macOS and (10, 0) for iOS+tvOS 😄
Fixing the specialization issue fully will take some more work. The idea here is that we have a default value for some variable in our shader (say x = 3) and later change this constant (x = 4) just before we use it. This creates a "specialized" shader where x is always 4.
On Metal we specialize functions by using MTLFunctionConstantValues. Unfortunately this feature is only available on macOS 10.12+ and iOS/tvOS 10.0+ (already included in PrivateCapabilities as caps.function_specialization). If we disable the assertion then we'll fallback to the default value (x = 3). So in order to fully fix the specialization issue for macOS <10.12 or iOS/tvOS < 10.0 we'll need to specialize shaders in another way:

One possibility is to update the shader source directly when we generate MSL with spirv_cross. If you're interested in looking into this, please let me know and I can help you
A workaround for now is to simply disable the assertion for now which will use the default value for specialization constants (e.g. x = 3  from the example above), and instead log an error message (with error!). We don't really use specialization constants in wgpu-rs so the error! logging might be sufficient if that's what you're interested in.

Yeah, i'm just trying to get wgpu working on my oldish macbook, and unfortunately don't know anything about spirv_cross or MSL.
Would an error message like error!("Shader constants not specialized, using default values: {:?}", specialization); be ok?

wgpu doesn't use specialization, so it shouldn't be a blocker for you


Switch to GitHub Actions

This is already tested separately here on the master branch here:
https://github.com/morganwillcock/ags-manual
As best I can tell it should match what exists at the moment, the main benefits being:

this removes the need for additional bot accounts to interact with GitHub services
this moves all builds into a single service
...which enables checks that builds come out the same on each platform
builds are pretty fast

I think that just the build checks (they already revealed some issues) and removal of bot accounts  is reason enough to switch, but the downsides are:

GitHub Actions itself seem to be fundamentally limited in its design, to the point that the matrix system is not usable if you want to have job outputs, and workflows need to be duplicated to react to different events (e.g. a PR vs a release)
interactions with other GitHub services actually seems more problematic than when using other CI systems, because the Actions for basic operations like release upload and deployment seem to have a lack of development or do not exist (creating a lot of confusion about which are 'official', which are abandoned, and which actually work)

To try and avoid continual copy and paste errors I've added some templates to the workflows directory so that changes are made in a single place (make clean && make && git diff will show you what you've changed). The use of the templating allowed an easy way to create a second workflow that just handles the release process, so there is now a split in the builds between testing that the build system actually works and building the public copies. It also works around the limitations of the job matrix to allow data to be passed directly between jobs, which is what enables the build output to be compared without being forced to re-download all of the build artifacts.
The only functional change would be to the release process, because the relevant Action wants to create the release to pass its reference for the asset upload. So creating and pushing a tag that begins with a 'v' is now how you would create a release.
I don't think I can submit as a PR since the current repository names would need changing for the result to be valid, so I thought to open this issue instead and if no-one objects then I will push the changes directly and update the repository names at the same time.

I think it's best to move to GitHub Actions too for the manual - much better integration with GitHub! I also found your usage of m4 super interesting.

I think it's best to move to GitHub Actions too for the manual - much better integration with GitHub! I also found your usage of m4 super interesting.

I think it's best to move to GitHub Actions too for the manual - much better integration with GitHub! I also found your usage of m4 super interesting.

The templating isn't ideal but it actually made the individual builds have fewer steps than if the all jobs had been defined through the matrix. I think it is likely that at some point the matrix issues will be addressed, and perhaps the build process itself will also become simpler.

I have some questions but they are more me trying to understand how the actions work... What is 2-9-1?

To be able to have jobs using different OS configurations and different Pandoc versions the names are generated as build-$OS-$SHELL-$PANDOCVERSION, but GitHub Actions doesn't consider it valid to have '.' characters in the job name (I think because the data selection expressions use '.' as part of the syntax), so I converted them to '-' to end up with job names which are valid.
So '2-9-1' means that it came from Pandoc version '2.9.1'.

And where/when is GitHub pages built and uploaded?

It is through a separate workflow which only runs when pushing a tag that starts with a 'v'.
https://github.com/morganwillcock/ags-manual/blob/master/.github/workflows/release.yml
This creates a release for the same tag, uploads the CHM file and wiki source as release assets, and deploys the HTML version to GitHub Pages. This sequence was very limited by the working Actions that I could find. For example, the asset upload Action originates from GitHub, but is not officially maintained, and requires creation of the release as a pre-requisite.

I think it's best to move to GitHub Actions too for the manual - much better integration with GitHub! I also found your usage of m4 super interesting.

The templating isn't ideal but it actually made the individual builds have fewer steps than if the all jobs had been defined through the matrix. I think it is likely that at some point the matrix issues will be addressed, and perhaps the build process itself will also become simpler.

I have some questions but they are more me trying to understand how the actions work... What is 2-9-1?

To be able to have jobs using different OS configurations and different Pandoc versions the names are generated as build-$OS-$SHELL-$PANDOCVERSION, but GitHub Actions doesn't consider it valid to have '.' characters in the job name (I think because the data selection expressions use '.' as part of the syntax), so I converted them to '-' to end up with job names which are valid.
So '2-9-1' means that it came from Pandoc version '2.9.1'.

And where/when is GitHub pages built and uploaded?

It is through a separate workflow which only runs when pushing a tag that starts with a 'v'.
https://github.com/morganwillcock/ags-manual/blob/master/.github/workflows/release.yml
This creates a release for the same tag, uploads the CHM file and wiki source as release assets, and deploys the HTML version to GitHub Pages. This sequence was very limited by the working Actions that I could find. For example, the asset upload Action originates from GitHub, but is not officially maintained, and requires creation of the release as a pre-requisite.

I am sure GitHub will eventually improve actions, it feels they are moving carefully to filter the good things from Pipelines/VSTS but making it nicer, but I like the solutions you came up with. I also liked the artifacts on the pipeline, very nice to quickly inspect what happened.

I am sure GitHub will eventually improve actions, it feels they are moving carefully to filter the good things from Pipelines/VSTS but making it nicer, but I like the solutions you came up with. I also liked the artifacts on the pipeline, very nice to quickly inspect what happened.

Lol, of course they did. If you want, I do have it backed up - I need to look for, but I do have it somewhere.

Lol, of course they did. If you want, I do have it backed up - I need to look for, but I do have it somewhere.

There are pre-built chmcmd binaries in the Free Pascal releases but they are buried within large archives with no way to efficiently download them. The Linux one is in a large uncompressed tar file, then there is another tar file inside that. The Windows one is inside their InnoSetup installer archive. I've not checked macOS yet, but likely there will be a build somewhere within the dmg image.
I've been trying to think of the best way to get them during the build, legally I don't think there would be a problem (effectively it would be a partial copy of what is officially distributed and the licence and source could be bundled with it) but I'm still not sure on the best place to put it. Possibly a repository just to host it (and possibly upload to GitHub Pages) would be OK, since it would effectively be a disposable copy that wouldn't pollute anything else.
I've only had a very quick look, but it seems the CHM file produced by chmcmd is working correctly. The latest version doesn't have the problem with internal page links being flagged as broken, in-fact it flagged up that one of the image links was broken in the Markdown source.

There are pre-built chmcmd binaries in the Free Pascal releases but they are buried within large archives with no way to efficiently download them. The Linux one is in a large uncompressed tar file, then there is another tar file inside that. The Windows one is inside their InnoSetup installer archive. I've not checked macOS yet, but likely there will be a build somewhere within the dmg image.
I've been trying to think of the best way to get them during the build, legally I don't think there would be a problem (effectively it would be a partial copy of what is officially distributed and the licence and source could be bundled with it) but I'm still not sure on the best place to put it. Possibly a repository just to host it (and possibly upload to GitHub Pages) would be OK, since it would effectively be a disposable copy that wouldn't pollute anything else.
I've only had a very quick look, but it seems the CHM file produced by chmcmd is working correctly. The latest version doesn't have the problem with internal page links being flagged as broken, in-fact it flagged up that one of the image links was broken in the Markdown source.

The generated search index (what you use from the 'Search' tab, not the 'Index' tab) seems to be much smaller when using the chmcmd build, so instead I've switched the download links for the Microsoft CHM compiler for archive.org versions.
I happened to already distrust the download and store the checksum, so the installation step will fail if someone tampers with the archive.org copy, and right now it passes the verfication check. I don't think this would count as distribution, so legally it should be fine.
So unless I spot any further issues I'll commit all changes in a few days.

The generated search index (what you use from the 'Search' tab, not the 'Index' tab) seems to be much smaller when using the chmcmd build, so instead I've switched the download links for the Microsoft CHM compiler for archive.org versions.
I happened to already distrust the download and store the checksum, so the installation step will fail if someone tampers with the archive.org copy, and right now it passes the verfication check. I don't think this would count as distribution, so legally it should be fine.
So unless I spot any further issues I'll commit all changes in a few days.

I think HTML Help Workshop from archive.org is fine but if you want to download from GitHub, you can create a branch for storing it on the repository itself and once it's not used anymore - say we switched for offline pages read using a webview in the Editor in the future - the branch can be removed, deleting the file from git history. Alternatively upload it in an issue or Release and pull from there.
I don't remember, but I think HTML Help Workshop size is relatively small.

I'm not sure if it would be legal to host a copy of the compiler. The Chocolatey package maintainer says he is speaking to them about what to do, I've suggested that they also pull it from archive.org but it is questionable whether caching that would be classed as redistribution. The Free Pascal compiler probably needs minimal changes to completely replace or surpass the Microsoft one, so if any further issues come up I think that is probably the path to follow. In the back of my mind I am also considering that documentation is likely going to have to be branched along with large design changes, and I've always thought it best that the scripting implementation supplies doc strings to stay in-sync with the implementation.
I've switched the CI to use GitHub Actions now, although the commit is marked as a failure because it still notified AppVeyor. I've removed the webhooks for AppVeyor and Travis CI now too.
I have a second change that I will open as a Pull Request to check what happens when one is opened.
Closed via https://github.com/adventuregamestudio/ags-manual/commit/c7e8dcdf67b55fffaf913adfb193bf780f9cc1db


Add RedisCluster Error Base Class

To make client just need to know RedisCluster::Error to handle error from this client.

Codecov Report

Merging #19 into master will decrease coverage by 0.84%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##           master      #19      +/-   ##
==========================================
- Coverage   98.93%   98.09%   -0.85%
==========================================
  Files          27       28       +1
  Lines        1413     1418       +5
==========================================
- Hits         1398     1391       -7
- Misses         15       27      +12

Impacted Files
Coverage Δ

lib/redis-cluster.rb
96.35% <100.00%> (-2.18%)
:arrow_down:

lib/redis_cluster/client.rb
90.90% <100.00%> (-0.17%)
:arrow_down:

lib/redis_cluster/cluster.rb
98.01% <100.00%> (ø)

lib/redis_cluster/error.rb
100.00% <100.00%> (ø)

spec/redis_cluster_spec.rb
86.48% <0.00%> (-8.11%)
:arrow_down:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 6156ad8...e928d58. Read the comment docs.


Prevent parallel writes to rotational media

During parallel plotting when copying multiple plots to dest simultaneously, if dest is HDD it'll result in slowdown and FS fragmentation.
This patch tries to detect whether dest is rotational media and if so, uses flock() to prevent multiple simultaneous writes to dest.
Linux only, on other platforms the behavior is unchanged.
Adds a log message notifying if parallel writing is enabled:
Starting plotting progress into temporary dirs: . and .
Final dir: . (parallel writing: disabled)
ID:<PHONE_NUMBER>3717545b0a6f0c0dde9710e4d3fe2d5cc6cc0a090a0b818bab0f17
Plot size is: 18
Buffer size is: 11MiB
Using 16 buckets
Using 2 threads of stripe size 4000

since there's no way to gracefully abort plotting (yet), it's likely to be killed with SIGKILL. Is there any risk the lock on the directory will be orphaned and just keep it locked in that case? or is the lock associated with the process and released automatically if the process is killed?

Fixed merge conflicts.

Please do not merge, found a problem with symlink (i.e. /mnt/dest -> /mnt/real-hdd) being incorrectly being detected as non-rotational media.

Now works correctly with symlinks.

@arvidn It was incorrect to zero-out minor device id. I changed the logic to generate a device path using both major and minor id, resolve the resulting symlink then traverse the final path up to the root looking for "queue/rotational". If not found, media is assumed to be non-rotational.
Example:

/mnt/testlink has major id 65, minor id 178

Generate path (symlink): "/sys/dev/block/65:178"

Resolve symlink to:
/sys/devices/pci0000:00/0000:00:03.1/0000:09:00.0/host2/target2:1:4/2:1:4:0/block/sde/sde2

Append "/queue/rotational" and check if file exists:

/sys/devices/pci0000:00/0000:00:03.1/0000:09:00.0/host2/target2:1:4/2:1:4:0/block/sde/sde2/queue/rotational - not found

Try root path until found:

/sys/devices/pci0000:00/0000:00:03.1/0000:09:00.0/host2/target2:1:4/2:1:4:0/block/sde/queue/rotational - found

If file contains '1' - media is rotational

@arvidn Would it be possible to merge this PR? If any changes needed, please let me know.


Update readme, network ports, branding, Dockerfile

Update readme.
Update ports.
Update branding (SVG in readme).
Update Dockerfile.

Thanks! I knew I missed some port changes somewhere

Appreciate the logo too :)


Possible BUG

Hello,
First of all thank you for your work and commitment.
I plan to use serial2mqtt in my home automation project. For the moment i am playing with it just to know what is going on

everything was compiled on Linux debian 4.9.0-6-amd64 #1 SMP Debian 4.9.88-1+deb9u1 (2018-05-07) x86_64 GNU/Linux without any modifications
Dry run with empty config (without config - defaults hardcoded in Serial2Mqtt.cpp) on my host - virtual machine WITHOUT USB ports

LOG:
serial2mqt I | 16:08:26.398  | debian |        main.cpp:  39 | version : Sep  8 2019 12:51:26
serial2mqt I | 16:08:26.398  | debian |        main.cpp:  40 |  argv[0] : Debug/serial2mqtt
serial2mqt E | 16:08:26.398  | debian |      Config.cpp: 243 |  couldn't parse config '' , dropped old config !
serial2mqt I | 16:08:26.398  | debian |      Config.cpp: 248 |  config loaded : {}
serial2mqt I | 16:08:26.398  | debian |        main.cpp:  65 |  configuring port : /dev/ttyUSB0
USB0 I | 16:08:26.398  | debian |        main.cpp:  74 |  starting thread 0
USB0 I | 16:08:26.398  | debian | Serial2Mqtt.cpp: 595 |  MQTT connecting tcp://test.mosquitto.org:1883 ... for USB0
USB0 I | 16:08:26.398  | debian | Serial2Mqtt.cpp: 581 |  MQTT connection state MS_DISCONNECTED => MS_CONNECTING
USB0 I | 16:08:26.399  | debian | Serial2Mqtt.cpp: 581 |  MQTT connection state MS_CONNECTING => MS_CONNECTING
USB0 I | 16:08:26.399  | debian | Serial2Mqtt.cpp: 291 | Connecting to '/dev/ttyUSB0' ....
USB0 E | 16:08:26.399  | debian | Serial2Mqtt.cpp: 296 | connect: Unable to open '/dev/ttyUSB0' errno : 2 : No such file or directory
USB0 I | 16:08:27.106  | debian | Serial2Mqtt.cpp: 581 |  MQTT connection state MS_CONNECTING => MS_CONNECTED
USB0 I | 16:08:27.106  | debian | Serial2Mqtt.cpp: 170 | MQTT_CONNECT_SUCCESS USB0
USB0 I | 16:08:27.106  | debian | Serial2Mqtt.cpp: 642 | Subscribing to topic dst/debian.USB0/# for client debian.USB017509 using QoS0
USB0 I | 16:08:27.107  | debian | Serial2Mqtt.cpp: 653 |  subscribe send
USB0 I | 16:08:27.651  | debian | Serial2Mqtt.cpp: 186 | MQTT_SUBSCRIBE_SUCCESS USB0
USB0 I | 16:08:28.652  | debian | Serial2Mqtt.cpp: 291 | Connecting to '/dev/ttyUSB0' ....
USB0 E | 16:08:28.652  | debian | Serial2Mqtt.cpp: 296 | connect: Unable to open '/dev/ttyUSB0' errno : 2 : No such file or directory
Everything is normal as i told you it is virtual machine without usb
....Log truncated and all of a sudden i got this
USB0 E | 15:47:38.649  | debian | Serial2Mqtt.cpp: 296 | connect: Unable to open '/dev/ttyUSB0' errno : 2 : No such file or directory
USB0 W | 15:47:38.749  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 I | 15:47:38.749  | debian | Serial2Mqtt.cpp: 581 |  MQTT connection state MS_CONNECTED => MS_DISCONNECTED
USB0 W | 15:47:38.749  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.749  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.749  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.749  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.749  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.749  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.749  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.749  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.749  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.749  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.749  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.749  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.749  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.749  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.749  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.749  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.749  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.749  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.749  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.750  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.750  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.750  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.750  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.750  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.750  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.750  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.750  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.750  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.750  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.750  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.750  | debian | Serial2Mqtt.cpp: 209 | received signal '11 for USB0
USB0 W | 15:47:38.750  | debian | Serial2Mqtt.cpp: 181 | MQTT_DISCONNECTED USB0
USB0 I | 15:47:39.751  | debian | Serial2Mqtt.cpp: 291 | Connecting to '/dev/ttyUSB0' ....
What worries me is that the received signal '11 for USB0  - probably means SIGSEGV???
If we get SIGSEGV it is a siign of some race condition and memmory corruption.
Can you comment
10X
Meanwhile i will try to build it for debug and hopefully send you more info what is actually happening
Best
Loshia

Hi Loshia,
thanks for the feedback !
The 'signal' here is not a Linux signal, but the communication mechanism used internally between the 2 threads that implement Serial2Mqtt. See enum type Signal in Serial2Mqtt.h.
Message comes from line 209 in Serial2Mqtt.cpp
Signal 11 is here MQTT_PUBLISH_FAIL, meaning the Paho-mqtt-c library did a callback to serial2mqtt telling that the MQTT publish failed.
The fact it cannot publish to the broke is because serial2mqtt lost the connection to test.mosquitto.org.
See 'USB0 I | 15:47:38.749 | debian | Serial2Mqtt.cpp: 581 | MQTT connection state MS_CONNECTED => MS_DISCONNECTED'
I'll have a check why serial2mqtt keeps publishing to MQTT as the connection is lost.
MQTT connection lost can be caused by different issues, mostly network issues or trying to use the same userid to connect twice to the MQTT broker.
Hope this helps,
Lieven

Hi,
Thank you very much for your feedback!
You are absolutely right:)
It was my mistake. Just for the record i recompiled the project with gdb enabled and left it run for night (and still running). All is good no core dumps or whatsoever.
I am still waiting for my PI and Arduino mega to arrive. I i will definately use it (little modified of course) for my home automation. No ethernet shields, no pubsubclient:)
Maybe it is a good idea to drop a note in Audroino app about default serial TX/RX buffer size of 64 bytes. I will  increase mine to 512 in my Arduino Mega build for sure:) Just to be on a safe side.
Keep the good work!
thank you very much once again!

Hi,
I guess this closes the issue.
On my todo list :
1/ the note about the 64 byte buffer limit. I'll think about throttling from serial2mqtt.
2/ disconnection handling, avoid publishing when connection has been lost
3/ a new arduino example based on Json Array instead of Json Object as it uses less buffer.
Lieven

Hi,
Sounds great!
hank you very much once again!
Best Loshia
PS: I guess that most of the folks are aware of buffer/memory limitations.

Hi,
I just wanna share my experience with arduinio ->serial2mqtt(PI)/(PI)(MQTT+ Node red Dash board) serial2mqtt-is communicating with PI - MQTT over localhost - Same PI
Changing Hardware RX/TX buffers of arduino is not working as expected so i did following:

My Arduino Writes are like this:

//Some safety check before calling fun
if(logtxt.length()>MAX_LOG_MSG_SIZE)
logtxt=logtxt.substring(0,MAX_LOG_MSG_SIZE);
logpublic(logtxt);
static void logpublic( String message ) {
String outbuf="";
uint16_t spos = 0;
uint8_t written = 0;
DynamicJsonDocument data(256);
data["t"] = "l/0";
data["m"] = message;
serializeJson(data, outbuf);
  while(outbuf[spos]!='\0') {

    Serial.print(outbuf[spos]);
    spos++;
    written++;

    if(written==64) {
      Serial.flush();
      written=0;
    }
  }
  Serial.print("\n");
  Serial.flush();

}
You can see the following:

QOS and CMD are removed in order to save space - serial2mqtt was hacked accordingly and qos is hardcoded as 2 always, cmd by default is publish always, 'message' and 'topic' were renamed to 'm' and 't' accordingly to save space
As you can see i am writing up to 64 bytes and always FLUSHING Serial buffer - Works perfect
MQTT -> serial2mqtt -> Arduino - I made sure that my JSON strings are always < 64 bytes so no
issues with RX Arduino buffer overflow. I made it for my particular app and i am sending topic + message as a complete son string in one GO always!
Finally i did implement  MQTT <-> Arduino Locking so that on each message from MQTT to Arduino MQTT LOCKS TX until it gets echo back for arduino that MSG is well received or timeout expires (i case i am pocking around with FW upgrade of arduino or whatever else bad happens). This works great also and i am not missing not a single messages due to RX buffer FULL

What was driving me crazy during my development was this:
around line 493
// if(token[1].compare(_mqttDevice) != 0) {
//INFO("subscribed topic differ %s <> %s ", token[1].c_str(), _mqttDevice.c_str());
//sleep(30);
//_mqttDevice = token[1];
//_mqttSubscribedTo =  _mqttDevice + "/#";//"dst/" +
//mqttSubscribe(_mqttSubscribedTo);
That stuff drove me nuts until realised "Auto Subscribe Feature" :)
And now all is rock solid works 100% Perfect
Some logs

ttyACM0/u/# - from arduino to MQTT
ttyACM0/d/# from MQTT to arduino
ttyACM0/rx Arduino ACK to MQTT - Locking

You see YOUR WORK IS EXCELLENT THANK YOU SO MUCH
mosquitto_sub -h <IP_ADDRESS> -p 1883 -v -t '#' | xargs -d$'\n' -L1 bash -c 'date "+%Y-%m-%d %T.%3N $0"'
2019-09-24 17:35:47.805 ttyACM0/u/4 22.33,62.21,1
2019-09-24 17:35:48.879 ttyACM0/d/3 00.00,00.00,0
2019-09-24 17:35:48.953 ttyACM0/rx 1
2019-09-24 17:35:50.197 ttyACM0/u/5 22.30,64.71
2019-09-24 17:35:50.879 ttyACM0/d/4 26.20,25.60,1
2019-09-24 17:35:50.926 ttyACM0/rx 1
2019-09-24 17:35:52.608 ttyACM0/u/0 22.32,64.71,0
2019-09-24 17:35:52.892 ttyACM0/d/0 00.00,00.00,0
2019-09-24 17:35:52.953 ttyACM0/rx 1
2019-09-24 17:35:54.901 ttyACM0/d/1 00.00,00.00,0
2019-09-24 17:35:54.953 ttyACM0/rx 1
2019-09-24 17:35:55.008 ttyACM0/u/1 22.32,64.70,0
2019-09-24 17:35:56.912 ttyACM0/d/2 00.00,00.00,0
2019-09-24 17:35:56.963 ttyACM0/rx 1

Hi,
Thanks for you comments.
My arduino loop is as follows:

Send publish when needed to  ttyACM0/u/
send RX ack on each message ttyACM0/rx 1
Send some logs to Node Red  log topic
I hacked serial2mqtt to auto subscribe each device to  ttyACM0/d/# That is all i need to hear back in arduino:) Nothing more.
And some udev rules to assign appropriate arduino/FW (i plan to have at least three of them) to correct  ttyACM and that is all:). So that on a first place i was frustrated hearing back the echo of all my messages send from arduino back to itself (Because of "auto subscribe") :):)

By the way about CRC checks. Do you think it is necessary to implement them?
as long as Serial itself must have enough protection against errors and you are not overflowing its buffers?
During my tests i was sending (echo back) all JSON including errors received from arduino to my log -  Node Red topic. I did not find any single error for thousends of mesagges  received. And most important count of sent messages from Node Red equals to cont of echoed back messages from arduino.
Test Scenario
All what was sent from Node Red -> serial2mqtt->Arduino was echoed back Arduino >-serial2mqtt->Node Red (LOG) and all was perfect without any CRC cheks
Do you think it is worth to implement CRC? I can hack serial2mqtt to inject CRC and arduino accordingly to check it but i think it is not worth the extra effort...
What is your opinion?
Thank you very much once again

Hi,CRC check would only be needed for high speeds or long serial lines, where you risk to have noise on the line. I guess this is not your context.

Yes sure.. it is not my context you are correct.
just a suggestion:
During my tests i was publishing messages to arduino in an endless loop without delay. I found out Arduino RX buffer (software+hardware) was unable to consume such a flood
For the other folks out there or by default you can implement sending json (in a loop) in 64 bytes chunks max with delay about 100-200ms (or configurable) in between.
void Serial2Mqtt::serialTxd(const string& line)
{
int erc = write(_serialFd, line.c_str(), line.length());
if(erc < 0) {
INFO("write() failed '%s' errno : %d : %s ", _serialPort.c_str(), errno, strerror(errno));
}
}
When message is bigger than 64 bytes that will give time to arduino or whatever else is there to consume its RX buffers and Flush them eventually and receive bigger messages. At the moment i doubt that this will work with arduino at all by default when json is bigger than 64 bytes.
I did not done it because i do not need to :)
Best
void Serial2Mqtt::serialTxd(const string& line)
{
int erc = write(_serialFd, line.c_str(), line.length());
if(erc < 0) {
INFO("write() failed '%s' errno : %d : %s ", _serialPort.c_str(), errno, strerror(errno));
}
}

Some arduino code that works on different micro controller boards : https://github.com/vortex314/mqtt2serial. It recovers from disconnections and uses compact Json arrays to communicate, I was able to connect 4 different boards to 1 serial2mqtt instance.


Pendot Designer traceback

In Glyphs 3.3 (3307) using Python 3.11.9 (Glyphs), and the latest Dotter (d3c2445) I get the following traceback in the Macro Panel output: (No Pendot Designer dialog box shows)
Dot Size 15
Dot Spacing 15
Prevent Overlaps True
Split Paths False
Contour Source <Default>
Stroker Width 50
Stroker Height 50
Stroker Angle 0
Start Cap round
End Cap round
Join Type round
Remove External False
Remove Internal False
Segment Wise False
Dot Size 30
Traceback (most recent call last):
  File "Pendot Designer.py", line 599
    setattr(GSApplication, "_pendotdesigner", PendotDesigner())
                                              ^^^^^^^^^^^^^^^^
  File "Pendot Designer.py", line 346, in __init__
    self.on_layer_change()
  File "Pendot Designer.py", line 516, in on_layer_change
    self.reload_values()
  File "Pendot Designer.py", line 528, in reload_values
    self.reload_guidelines()
  File "Pendot Designer.py", line 473, in reload_guidelines
    [
TypeError: 'NoneType' object is not iterable

oops, this was fixed locally but I didn't commit it.

If I open a New Font, with nothing in it, I get:
Traceback (most recent call last):
File "Pendot Designer.py", line 600
setattr(GSApplication, "_pendotdesigner", PendotDesigner())
^^^^^^^^^^^^^^^^
File "Pendot Designer.py", line 275, in init
instance = self.selectedInstance or Glyphs.font.instances[0]
~~~~~~~~~~~~~~~~~~~~~^^^
File "GlyphsApp/GlyphsApp/init.py", line 2087, in getitem
File "GlyphsApp/GlyphsApp/init.py", line 567, in _validate_idx
IndexError: list index 0 out of range 0


Clarification in "parallels to process economis"

In chapter 1, Concurrency versus parallelism , "Let's draw some parallels to process economics" ,  "Alternative 3", it's written:

[...] you calculate that they now only just over 20 seconds on an order. You've basically eliminated all the waiting. Your theoretical throughput is now 240 beers per hour.

If its 20 seconds per hour, the theoretical throughput shouldn't be (60 * 60) / 20 = 180 beers?  Am I missing something?

Hi @Tudyx. You've not missed anything.
You just caught a mistake that I'm frankly embarrassed that I didn't catch myself on one of the many proofing passes on the book. Very observant of you, and thanks for reporting it.
In the first version of the example, I used 10 + 5 seconds for pouring and topping up the beer (60*60) / 15 = 240. I later changed it to 15 + 5, making the whole process take exactly 2 minutes, so it's easier for readers to do the math in their head.
Apparently, I failed to update the actual calculations for alternative 3 and 4 to reflect that.
Fortunately, the exact numbers are not the most important part of the analogy, which is probably why neither I nor the reviewers caught this in one of our many passes. I can only assure you that it doesn't reflect the work that's gone into ensuring the quality of the rest of the book.
The correct numbers should be:
Altnernative 3:
Theoretical throughput: 180 beers/hour
With an additional bartender, you'll have the same theoretical throughput as you had with 12 bartenders.
Actual throughput: 150 beers/hour.
Alternative 4:
Actual throughput 170 beers/hour each, giving a total throughput of 340 beers/hour.
I'll have to go over the numbers and the corresponding text once more when I have a little more time since it's very late where I am right now, but I will add it to the errata of the book.
I apologize for this mistake, and I hope it doesn't detract from the underlying message I wanted to convey with this analogy.

Thank you for your quick answer and the erratum. Don' t worry, as you said the most important part was the analogy, which is very good by the way.
I'm only at the beginning of the book, and I'm enjoying the journey so far.


Ruby spec files misclassified as Python

I noticed several of the Ruby spec files in https://github.com/ruby-formatter/rufo/pull/12/files are being misclassified as Python files.
The contents of the files, like this example: https://github.com/bweave/rufo/blob/890662841e84cb93fd1822b71803e87d7c8fc6cb/spec/lib/rufo/formatter_source_specs/semicolons.rb.spec can be easily confused with Python syntax.
It is surprising these files are misclassified because their file extensions include .rb.

It is surprising these files are misclassified because their file extensions include .rb.

Does that even have a bearing on classification if .spec is registered as a Python extension...?

The .spec extension is associated to RPM Spec, Ruby, and Python, so it's expected that there would be some misclassifications, especially for small files.
We could add the .ruby.spec extension for Ruby, but is that widespread enough?

@Alhadis @pchaigno thanks for comments. As @pchaigno asks, this doesn't appear to affect a large number of projects or files, and am closing this out.


The background seems do not work on Windows

Hi, the theme work well, but I have the impression that the main background of the discussion is not working. There is a picture of flowers instead of the dracula background 🤔
Telegram's version: 2.8.11 x64

my bad, we have to use the tiled.png file xD


Fix CI

This change is necessary to fix CI.

This corresponds to:
commit 8d70f7e632fe7c665ce0a5432515b918e88fe76c
Author: Domen Kožar<EMAIL_ADDRESS>Date:   Wed Nov 29 14:06:14 2017 +0000

    quick fix for hscolor nondeterminism

...
deepfire@andromedae:~/stack2nix$ git diff 89009ec..b48605b
diff --git a/89009ec..b48605b b/b48605b
index 89009ec..b48605b 100644
--- a/89009ec..b48605b
+++ b/b48605b
@@ -158,7 +158,7 @@ toNix Args{..} remoteUri baseDir BuildConfig{..} =
           case result of
             (ExitSuccess, pkgs, _) -> do
               -- TODO: filter out pkgs that are part of bcPackages/bcDependencies
-              let pkgs' = ["hscolour", "jailbreak-cabal", "cabal-doctest", "happy", "stringbuilder"] ++ lines pkgs
+              let pkgs' = ["hscolour-1.24.2", "jailbreak-cabal", "cabal-doctest", "happy", "stringbuilder"] ++ lines pkgs
               hPutStrLn stderr "Haskell dependencies:"
               mapM_ (hPutStrLn stderr) pkgs'
               mapPool argThreads (curry handleStackDep outDir) (pack <$> pkgs') >>= mapM_ (handleStackDepResult 1)

Which looks good.


ratatui-core/src/text/line.rs and ratatui-core/src/text/text.rs are executable

Description
The Rust source files mentioned in the title are executable. This breaks building ratatui and any Rust crates that depend on ratatui on Fedora and Fedora-based distros.
This is because rpmbuild by default tries to mangle shebangs in all files that are executable, and doesn't understand that the #![attr] syntax in Rust (the first line of ratatui-core/src/text/text.rs) is not actually a shebang, so the build fails.
To Reproduce
Attempt to build ratatui RPM
Expected behavior

Don't make Rust source files executable.
Screenshots

Environment

OS: Fedora Linux
Terminal Emulator: GNOME Terminal
Crate version: 0.29.0

Additional context

A build of a crate that has a ratatui dependency succeeded in July so the change happened sometime between then and now.

Good catch! Will be fixed in #1577
We should probably look into why/when this had happened...

Thank you so much for the prompt response!

There's no obvious attack vector here by marking these as executable (please correct me if I'm wrong and we'll raise an advisory about it). I checked where these come from and it's all the same user:
eb79256ceea151130c6b80930b51098b9ad43f5b
f29c73fb1cf746aea0adfaed4a8b959e0466b830
c69ca47922619332f76488f5d9e70541b496fe1c
a52ee82fc716fafb2652b83a331c36f844104dda
I'm assuming probably some sort of file system issue on their end.


LooksRare still allows listing and selling even with new contract address

It seems some new operator addresses were added for LooksRare (https://github.com/ProjectOpenSea/operator-filter-registry/issues/7), however it appears that listing, selling, and buying still works on LooksRare.
tx: https://etherscan.io/tx/0x40d78b8381f03b8b6176bdc2277680d005679c0d2d78e1548f65268db96b057e

0xf42aa99F011A1fA7CDA90E5E98b277E306BcA83e was not included in the transaction as stated in #7 and is not in the denylist yet.

I'm sorry, I am not following, the transaction above is after 0xf42aa99F011A1fA7CDA90E5E98b277E306BcA83e was added to the filter

Thanks for re-raising. Here is the new transaction - will keep open until we confirm.
https://etherscan.io/tx/0x3feb68f3426c9f07dbcea410456ed628ae5eab8d65d2be6161395543993294ba

looks good to me

Worked on mainnet after this update. Thank you. Users can list, but not purchase on LR, which makes sense since it edits the transfer event.


Added comments regarding deprecated networks.

This pull request is due to the deprecation of Kovan, Ropsten, Rinkeby testnets which is going to be discontinued by Infura and Alchemy by October 5.
This PR also moves these networks down the list of networks.
Also added goerli Arbitrum and goerli Optimism in the network list.

@codenamejason Yeah, I think we should removed them completely.
Even if some of them are still up, alchemy/infura/etherscan/etc just deprecated them.
@EngrGord Could you update? Thanks! :)

Sure!

@codenamejason @carletex The deprecated networks has been removed from this PR. Thanks


TimeDisplay - Typo in f-string in print statement

It works after removing the = sign.
Thanks again for this app!

https://github.com/CodeMouse92/timecard/blob/e524401613de36189fd21ea8ae93f96ffda580c3/timecard/interface/timedisplay.py#L79

Oh crikey, I completely forgot to remove that. Eep! New change incoming.

Okay, updated in v2.0.4, which I just pushed to PyPI. Thanks for catching this, and I'm glad you enjoy the app!


Display information

Hello,
Could you please upload the information to add the OLED display.

I'm currently away and won't be able to get to this until late next week. Will post an update then.

I've added a .pdf that shows how to add the OLED display. You'll find it here.
Note that I used a typical 0.96"128x64 OLED display when designing my case. If you have something different, you'll need another case design.

Thank You


SR-4083 Generated projects should have an aggregate target for every product that doesn't have any other target

This adds to the Xcode project generation logic so that, after adding all the targets for the modules in a package and its dependencies, it also adds an aggregate target for each of the products that doesn’t already have a target with the same name.  This makes it possible to build all the modules that go into a defined product in a single build in Xcode.
As for the implementation: I am on the fence about whether it's most appropriate to say that an aggregate target has no product type (i.e. to make the product type optional) or whether to say that there is a new product type called "none".  The former feels to be a philosophically better fit, and is what diffs show.  If there is a lot of feedback that the other way is better, then we could certainly implement it that way instead.

@swift-ci please test


Jenkins QueueJob: cancelling VSTS build doesnt cancel/abort the Jenkins build job/workflow?

Environment

Server - VSTS

Issue Description
Cancelling VSTS build does not cancel or abort the Jenkins Build Job/Workflow. Basically, We've integrated the "Jenkins QueueJob" as part of the VSTS build definition and successfully kickoff a Jenkins build job/Workflow, but its not cancelled when the VSTS build is cancelled (by clicking Cancel Build ). Basically it only wait for successful or failure of Jenkins output.

The current behavior is by-design, so we'll consider this as a feature request.  Since this is likely not something every user will want, it would probably be implemented as an option on the task.  We'll add this to our backlog and post updates back here.

This issue is stale because it has been open for a year with no activity. Remove the stale label or comment on the issue otherwise this will be closed in 5 days

We have Jenkins builds that take 2-3 hours, so people cancelling and re-queuing the Azure DevOps pipelines that drive them quickly saturates our build capacity with useless work. How do I reactivate this?

We have Jenkins builds that take 2-3 hours, so people cancelling and re-queuing the Azure DevOps pipelines that drive them quickly saturates our build capacity with useless work. How do I reactivate this?

@emul8ed let me reopen this since it's still actual

@emul8ed let me reopen this since it's still actual

This would be really important for me too.
Our Jenkins build for PR verification takes approx. 1 hr. When devs push new changes shortly after an automatic PR verification build started, the Pipeline stops and the jenkins build continues without reason and blocks lots of resources.
Would be really appreciated if this could be implemented.

This would be really important for me too.
Our Jenkins build for PR verification takes approx. 1 hr. When devs push new changes shortly after an automatic PR verification build started, the Pipeline stops and the jenkins build continues without reason and blocks lots of resources.
Would be really appreciated if this could be implemented.

The worst combination is if the jenkins multibranch pipeline only allows 1 concurrent job per branch if the user starts PR verification or a build from AZP to quickly restart a newer one ( automated or "by hand") with somewhat sensible timeouts - because if the queueing timeout in AZP is something like 1,5 times the normal build duration, the second build will fail because it runs into the timeout which a dev that is not so pipeline savvy will not understand.

The worst combination is if the jenkins multibranch pipeline only allows 1 concurrent job per branch if the user starts PR verification or a build from AZP to quickly restart a newer one ( automated or "by hand") with somewhat sensible timeouts - because if the queueing timeout in AZP is something like 1,5 times the normal build duration, the second build will fail because it runs into the timeout which a dev that is not so pipeline savvy will not understand.

Keeping this active

That stale notification resulted in me taking another look at the issue.
I have written a small script to be used in the pipeline, it just needs to be inserted after the "JenkinsQueueJob@2" job.
      - script: |
          building=1
          i=1
          while [ $i -le 5 ] && [ $building -eq 1 ]; do
            echo "Trying to stop running Jenkins job $(JenkinsCI.JENKINS_JOB_ID) for branch $(pipeline.JenkinsAPIbranchName), attempt number: $i"
            curl -X POST --silent --user $(JenkinsAPIUsername):$(JenkinsAPIToken) https://myjenkins:443/job/MyJob/job/$(pipeline.JenkinsAPIbranchName)/$(JenkinsCI.JENKINS_JOB_ID)/stop

            j=1
            while [ $j -le 12 ] && [ $building -eq 1 ]; do
              sleep 10
              echo "Verify if job is already stopped..., attempt number: $j"
              curl --silent --user $(JenkinsAPIUsername):$(JenkinsAPIToken) https://myjenkins:443/job/MyJob/job/$(pipeline.JenkinsAPIbranchName)/$(JenkinsCI.JENKINS_JOB_ID)/api/json?tree=building | grep "\"building\":true"
              if [ $? -ne 0 ]; then
                echo "Jenkins job $(JenkinsCI.JENKINS_JOB_ID) for branch $(pipeline.JenkinsAPIbranchName) is now stopped!"
                building=0
              fi

              let j=j+1
            done

            let i=i+1
          done

          if [ $building -eq 1 ]; then
            echo "##vso[task.logissue type=warning;]Jenkins job $(JenkinsCI.JENKINS_JOB_ID) for branch $(pipeline.JenkinsAPIbranchName) could not have been stopped!"
          fi
        condition: and( canceled(), ne(variables['JenkinsCI.JENKINS_JOB_ID'], '') ) # run only when canceled and a job id was already assigned
        displayName: "Cancel Jenkins if pipeline is canceled"

I know its not perfect and you need to take care about the variables and all that, but probably it helps somebody else.

Still relevant


fix fram line + added uram

free ram should be awk 'NR=1 {print $4} not $7.

$7 shows real available RAM. This topic was discussed earlier on Telegram group of lowendtalk.

Ah sorry.. my htzner box display error on https://paste.ubuntu.com/p/gfXKfPGHC3/
But if i'm running it on other box.. no error.
Just close this pr xD


Dynamic Route Parameters Options

Is your feature request related to a problem? Please describe.
So, I'm using a dynamic route in a file /path/[slug]-[id].svelte. If I navigate to /path/foo-1, the variables are assigned as follows
slug === "foo"
id === "1"
Instead, when I navigate to /path/foo1-foo2-1, then the variables are assigned as follows
slug === "foo1"
id === "foo2-1"
Describe the solution you'd like
What I expect is for the first dynamic parameter to match the longest possible pattern. Otherwise, at least, have a way to specify it. For instance the regex [a-zA-Z-]*-[a-zA-Z] matches the pattern with the last characters after - to be in the second part, but this is not a valid name for a file.
Also, the docs IMHO could be more extensive regarding this subject.
Describe alternatives you've considered
One can match the entire part of the route and then split it.

Hmm. This is difficult because the URL is ambiguous with respect to the pattern. In your case the request makes sense, but if someone else had [id]-[slug] they'd probably want the opposite (though I think your URL looks nicer in that case). Or another example would be if someone wanted [slug]-[date] where date is something like 2021-04-28.
Maybe we need a way to provide regexes and slug extraction to the router

One of the reasons for implementing route fallthrough was so that we could get rid of Sapper's regex route params.
I don't have strong opinions about how to resolve this. Maybe it would be nice for SvelteKit to provide all different partitionings of the path and try them in some arbitrary order, but that sounds annoying.
A simpler solution would be to pick one way to handle this, document it, and also document that if people want different behavior, they can use a single param for the folder name or filename and then do their own splitting and fall through if appropriate.

I hadn't thought of the single param solution. I agree that's the best way to handle this and documenting it would be nice

As @benmccann suggested, a single dynamic parameter can be matched against a regex in the load function. Though the developer has then to redirect to a 404 Not found url. It could become tricky to maintain, especially for big projects.
Another possibility could be to specify a regex that sveltekit can use to match against the dynamic parameter and handle the routing in case of 404. In case the route exists/is valid, one will then access the parameter and split it wherever more appropriate.

the developer has then to redirect to a 404 Not found url

We can already take advantage of fallthrough by not returning in the load function, so non-matches would already turn into a 404.

Sorry to type in here again but this is not working for me:
"We can already take advantage of fallthrough by not returning in the load function, so non-matches would already turn into a 404."
Instead of falling back to 404 page it says:
"Bad request in load function: failed to fetch undefined"

There's an open bug for that: https://github.com/sveltejs/kit/issues/2041


update EntitySpec conversion/trimming names

the name change done in #607 was less than optimal. Here a set of names are updated to be (hopefully) more consistent.

👍


Enable AUTO_RELOAD_PLUGIN_CERTS by default

Bug Description
This was introduced 18 months ago, had been used by many folks. time to enable this by default.
Please comment if you have any objections!
Version
1.15

Additional Information
No response

We donot support root cert reload, so i am not sure what's the use case to reload others

It is fairly common to reload intermediate certs.


Tagging for events is incorrect

This is really more of an issue with the TA, but the tagging on the events is incorrect. The URL filtering items should go be tagged as "web" and "proxy". I would also suggest excluding the file identification events from the "ids" "attack" tags, as they create a ton of noise.

You're correct, the way the different log types are currently classified in CIM is not granular enough.  An improvement to this is almost ready for release and will be available in the next TA feature release.

Resolved by commit PaloAltoNetworks/Splunk_TA_paloalto@0732aabea1961294390484f3442cfbb2e34a6670


AWS ElasticBeanstalk Deployments Fail due to Entrust

We are using AWS ElasticBeanstalk for our development and production environments.  I had implemented Entrust per your documentation and when I would deploy it would fail on the composer install step.  It would complain about the Laravel 5.3 cache directories not existing.
https://paste.laravel.io/bkApE
I was using version 5.2.x-dev per your documentation and even tried using dev-master and received the same issue.  Something in your library is causing composer to fail when running the install through the elasticbeanstalk deployment process.
I verified this by removing Entrust from the composer.json and also removed the Service Providers, Alias and the User Trait.  Deployments worked perfectly fine after that.
I am not sure what could be causing the issue but figured I would log a ticket with you since a lot of people may be using Laravel and AWS ElasticBeanstalk for deployments.
When using Entrust this is what I received for an error upon deployment
 ~/Dropbox/Work/RYNO/htdocs: eb deploy ryno-development
Creating application version archive "app-e9c94-170526_130425".
Uploading: [##################################################] 100% Done...
INFO: Environment update is starting.
INFO: Deploying new version to instance(s).
ERROR: [Instance: i-030aa614c7bdaeb99] Command failed on instance. Return code: 1 Output: (TRUNCATED)...timize

  [InvalidArgumentException]
  Please provide a valid cache path.

Script php artisan optimize handling the post-install-cmd event returned with error code 1.
Hook /opt/elasticbeanstalk/hooks/appdeploy/pre/10_composer_install.sh failed. For more detail, check /var/log/eb-activity.log using console or EB CLI.
INFO: Command execution completed on all instances. Summary: [Successful: 0, Failed: 1].
ERROR: Unsuccessful command execution on instance id(s) 'i-030aa614c7bdaeb99'. Aborting the operation.
ERROR: Failed to deploy application.

ERROR: Failed to deploy application.

After removing and before integrating Entrust this is what the deployment process looked like
 ~/Dropbox/Work/RYNO/htdocs: eb deploy ryno-development
Creating application version archive "app-c7c2-170526_130929".
Uploading: [##################################################] 100% Done...
INFO: Environment update is starting.
INFO: Deploying new version to instance(s).
INFO: New application version was deployed to running EC2 instances.
INFO: Environment update completed successfully.

6 days without a response, I opted to write my own code for roles and permissions.  Lack of responses made us decide we couldn't use this library!

@jcrawford Use Laratrust instead of Entrust.  https://github.com/santigarcor/laratrust

In your config/ folder you should have and edit the entrust.php file for your needs.
It depends by your .env file on which cache driver are using. I suggest to use  CACHE_DRIVER=array.

@PaoloFalomo I had changed the configs and we are using Memcached for caching but thanks.  This package would just not work at all on AWS ElasticBeanstalk when deployed.

I am using it right now on some apps deployed on AWS ElasticBeanstalk - working perfectly.


Lexi 561 1

Closed: This pull request is a duplicate of LEXI-561. It was a backup to test merge before pushing the real one.


fix swapped danger zone buttons

Clicking on "Delete This Index" currently opens the "Delete All Documents" modal and vice versa.

@vintagesucks Thx!


[WIP] Fix TOC CSS

Summary
Fix align of Toc and behavior when clicked in titles of toc

Thanks! Closing as the real PR on the main repo was merged :tada:


Extract out useful sub-crates.

parking_lot contains a number of useful pieces that are relatively independent. The implementation of SpinWait for example could come in handy for a number of other projects. Any chance of these being split out into independent crates that are then used by parking_lot?

I haven't looked around, buts its possible that some things could go in https://github.com/mvdnes/spin-rs if they only rely on core. For one, that library doesn't do any exponential backoff while SpinWait does.

Seems reasonable. It'd also be good to expose SpinWait directly, as it can be useful without the locking mechanism too (e.g., if you're implementing your own synchronization primitives).

Ping @mvdnes to see if that'd be a tractable option.

The problem is that SpinWait will fall back to OS-based thread yielding, which isn't available in a no_std context.

Could the yield fallback be placed under a #cfg for the no_std case?

I guess you could do that. In any case, this issue should probably be moved to spin-rs, unless there is some other part of the code that you think would be useful to split off into a separate crate.

Hmm, lock elision and thread parker maybe, though both of those are less clear. I'll file a request over in the spin-rs repo and link back here.

Isn't elision be a good candidate for spin too?

SpinWait  is now available in parking_lot_core.


Detect "writing help" in link text

Currently "writing service" in link text is reported, but "writing help" is not. This expression comes up too:
https://metasmoke.erwaysoftware.com/search?utf8=✓&title=&body=writing+help&username=&why=&site=&post_type=&feedback=&autoflagged=&reason=&user_rep_direction=>%3D&user_reputation=0&commit=Search

!!/approve


az ssh vm only works when VM has public IP

az feedback auto-generates most of the information requested below, as of CLI version 2.0.62

Related command
az ssh vm -n  -g
az ssh vm --ip
az ssh vm -n  -g  --prefer-prviate-ip
Describe the bug
Trying to SSH from Azure cloud shell into Azure Linux VM using AADSSHLoginForLinux extension using above commands however it doesnt work and needs a public IP instead.
To Reproduce
Using a VM with only private IP and using above commands, it doesnt work. But as soon as you use a public IP, it starts working.
Expected behavior
Its expected to let me login to VM from cloud shell using the private IP instead of having to connect a public IP to the VM NIC.
I believe it works if you have private connectivity to your VM using VPN or ER, but not from cloud shell. My understanding was it uses azure backbone to connect to the VM if Im to use cloud shell-
Environment summary

Additional context

@jaypee1990, Cloud Shell does not have any additional visibility to the private IP address. You can use Cloud Shell in a VNET to access the machine over a private IP, but the default Cloud Shell experience does cannot view into the VNET and does not use any Azure backbone.


change max line length to 88 for formatters, linters

We've discussed increasing the max line length from 79 to 88 (the default for the black formatter) as many people find 79 causes code to become too spread out vertically, especially when using black.

I think we also need to set this for pylint:
[tool.pylint.format]
max-line-length=88


Possible issue with Exporter

Exporter needs to be set up as addresses[security] to be able to export funds which means a migrate function needs to be used. Exporter itself doesn't have migrate functionality so it's a one-way trip.
https://github.com/OpenFinanceIO/smart-securities-standard/blob/4c4ea4cf814a79a380354296173530a94349f003/contracts/Exporter.sol#L32
Also how Exporter will get a balance on ERC20 contract?
https://github.com/OpenFinanceIO/smart-securities-standard/blob/4c4ea4cf814a79a380354296173530a94349f003/contracts/Exporter.sol#L33
Perhaps I'm missing something here. I didn't find any Exporter tests so I'm not 100% sure how that's working.

Exporter was experimental and we've decided not to support it for the time being, so I have removed the contract.


enhancement: send plain text, render on the fly

I prefer plain text mail, no HTML. It would be nice, if markdown-here rendered markdown (if detected) on the fly when viewing mails (received ones or those sent). The mails are transferred in plain text, which is perfectly readable with a text only client, but are displayed as rendered markdown.

+1
Plain text are still the best way to exchange emails. It is a little pity that a email wrote in markdown would not be render properly if I open it with mutt (without html configuration).
Markdown here should enhance the way we read markdown (coloration?) but with an option to no convert it to html.

Similar to #24 and #15. This is too much of a departure from Markdown Here.
(It also has the downside of requiring that recipients have the extension installed. And won't work on extension-less mail readers, like the Gmail app.)

Your decision. But in my and others opinion this feature made perfectly sense. MD is very readable in non-rendered form (a design feature of MD), so sending plain text non-rendered MD would be no problem.


ADCB: allow mobileconfigs to install

This respects the current settings but allows mobileconfigs to be installed in the image.

Does AutoDMG handle profiles natively?

Yes.
Sent from my iPhone
On Aug 18, 2016, at 4:20 PM, Nick McSpadden <notifications<EMAIL_ADDRESS>wrote:
Does AutoDMG handle profiles natively?

You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHubhttps://github.com/facebook/IT-CPE/pull/35#issuecomment-240885947, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AFa_GGD45B7C-YrwjwtNpAa1PdFLwquKks5qhOjAgaJpZM4Jn0N4.

Please provide a test plan showing how this was tested and the results.

I use this internally while I don't have chef in production. It downloads the profiles (except for items I've marked as exceptions) and bakes them in the image. AutoDMG properly handles profiles and installs them. This allows me to have some prebaked munki settings ready to go.
Not sure what else you guys need here. AutoDMG handles the profiles and the defaults I set make sure that there are no breaking changes to current users of ADCB.

I think that context is all we needed. Thanks!


Translation process breaks

We have errors running on the Github action resulting after a successful PR to the AVD checklist. For example:
https://github.com/Azure/review-checklists/actions/runs/3180533115/attempts/3
The translation job typically run in under 2 minutes, but in this case the job takes longer than 10 minutes.
The error seems to indicate a problem with JavaScript heap memory. I have tried the workaround described in  https://github.com/actions/runner-images/issues/70, but the problem still persists.

CC @mikewarr

Translation of other checklists seems to be working fine, here verified with AKS:

Github action job: https://github.com/Azure/review-checklists/actions/runs/3181856224 (run in 37 secs)
Generated PR https://github.com/Azure/review-checklists/pull/254

Hey @mikewarr I have changed the way in which translations are performed, now I am using a custom Python script instead of a Github action. It seems to work now :-)

Closing since no additional broken actions ahve been observed since we modified the translation process


Adding Tabs at the bottom of an App Bar

Is your feature request related to a problem? Please describe.
Could it be possible to add a new slot/prop to the mwc-top-app-bar to support tab bar navigation - maybe just below the app bar. At the minute the app bar has no option at all to add a navigation, therefore my work around is as follows:

First app bar for the brand name and action buttons - like languages and theme switch
Second app bar for the tab bar for the general navigation on the website

Describe the solution you'd like
A clear and concise description of what you want to happen.
Surely, there should be a more elegant way of achieving the above, my code looks like that at the minute:
  <mwc-top-app-bar class="top-app-bar">

Aegis Cyber

            <mwc-icon-button
              slot="actionItems"
              icon="languages"
            ></mwc-icon-button>
            <mwc-icon-button-toggle
              onIcon="nights_stay"
              offIcon="wb_sunny"
              slot="actionItems"
            ></mwc-icon-button-toggle>
          </mwc-top-app-bar>

          <mwc-top-app-bar
            class="top-app-bar-secondary"
            dense
            @MDCTopAppBar:nav=${() => (this.drawer.open = !this.drawer.open)}
          >
            <mwc-icon-button
              slot="navigationIcon"
              icon="menu"
              id="hamburger"
            ></mwc-icon-button>
            <my-menu slot="actionItems" id="nav"></my-menu>
          </mwc-top-app-bar>

EDIT: Also I think that giving flexibility for the placement of the tab bar should be a must, either it would take the full width, be left/centred or right aligned.

Would also be useful if a part (e.q. tabs section) of such header could be made "sticky" and remain visible during page scrolling while the rest scrolls away

See the following link for use cases where multiple headers or subheaders/tab-bars are required:
https://mui-treasury.com/layout/features/multiple-headers/

It seems like what you actually want is multiple rows in the Top App Bar, and have tabs in the second row.
We have an open issue about tabs in Top App Bar, #781, but it's not clear right now if the design of Top App Bar is intended to have multiple rows.
We'll have to talk with designers to check if that is permitted in the Material spec.

As I noted in my issue (#781), this is explicitly shown, with several examples, in the MD spec. Virtually all the examples illustrating usage of tabs show them in the top or (rarely) bottom app bar. It's a very basic and common pattern.
https://material.io/components/tabs#usage
The upstream issue is here; it has been open since Sep 2018, with no signs of progress.
https://github.com/material-components/material-components-web/issues/3633

We're keeping this issue open to investigate adding arbitrary rows within an app bar. While the technical structure is available to support this, we are not sure if this is within spec and we need to check with design for guidance.
For example: styling an app bar with two different colored rows or having multiple rows with different content (including but not limited to tabs).
#781 will remain the issue for the Material Design guidance for tab + app bar interaction.


Appearance

Make some new tabs,colours and style to your page

It can't behave as a twin duck right??

Could it be incorporated with mmc so it behaves like USB / UFD, with the intent of camouflage also storage of payload or minimal data.

At the moment the option of adding a mmc is not in consideration.
It will encrease price and volume. Which will lead in looking for another USB case.
That will encrease the price even more.
Overall the ratio benefit/time wasted is not worth it.
WHID was mainly created to wraponize usb gadgets or deployed by the attacker itself.
The twin ducky style was not considered intentionally.
P.s. the original repo for Hardware related questions (i.e. Cactus WHID) is https://github.com/whid-injector/WHID

Also right now in software if the victim and device are connected to the same network there are several WiFi based exfiltration options HTTP and FTP and a login credential phisher, see the ESPloit readme.

Is it possible to automatically connect to victim's network? I tried but could not and had to configure it manually with condition of knowing the condition of password, IP and SSID.

You need to be on the same network for those exfiltration methods to work, meaning you need access to their WiFi credentials, so crack it before hand or much easier just do the reverse and have the victims pc connect to the esploit device's network when its running as an access point, see the exfiltration page when connected to the esploit web ui, I believe I show some examples of how to do this.  You can also exfiltrate to an online alternative like pastebin instead of straight to the device running esploit.

This issue has gone way off course but here is an example of commands to force the victim to connect to ESPloit's network when in access point mode.
Windows: netsh wlan set hostednetwork mode=allow ssid="SSID-HERE" key="WIFI-PASSWORD-HERE"
Linux: nmcli dev wifi connect SSID-HERE password WIFI-PASSWORD-HERE

i'm a frontender :) if want i can do cosmetic improvements


Implement UnBanCommand.cs

Working in kevin/AdminCommand

Implemented correctly and notifies the admin that the targetUser is unbanned.


"effect" parameter ID for "Deploy VM backup" policy; case sensitive for Identity management group.

Community Note

Please vote on this issue by adding a 👍 reaction to the original issue to help the community and maintainers prioritize this request
Please do not leave "+1" or "me too" comments, they generate extra noise for issue followers and do not help prioritize the request
If you are interested in working on this issue or have submitted a pull request, please leave a comment

Versions

terraform: "1.7.1"
azure provider: "3.99.0"
module: "5.2.1"
Description
Describe the bug
I'm trying to set the "effect" parameter on the "Deploy-vm-backup" policy assignment on the Identity Management group(MG).
Setting the value as "Effect" does not work on identity MG. It will instead set "Effect" parameter. The  "effect" parameter is not set/overridden. The  default parameter "effect" value stays in place.
Setting "Effect" on landing-zone, decommissioned, sandbox will set the "effect" parameter.
The  default parameter "effect" value will be set/updated.
This means that the same config gives different results - case sensitivity depending on the MG.
Other MG tested are able to handle/interpret case sensitivity for the "effect" parameter except the Identity MG.
Setting the "effect" parameter will update all MGs according to custom value set.
terraform apply screenshot below shows the issue.
In summary:
Identity MG = 2 parameter: Effect and effect
Landing-zone, connectivity, decommissioned MGs = 1 parameter: Effect/effect
I

Steps to Reproduce

option 1: archetype extend

step 1 - create archetype extension  files for connectivity MG, and Landing-zone MG. Congiure
step 2 - in settings.core.tf, archetype_config_overrides add config to change "Effect" parameter for  "Deploy-vm-backup" policy assignment  to "auditIfNotExists"
step 3  - add config to change "Effect" parameter for  "Deploy-vm-backup" policy assignment  to "auditIfNotExists"; apply to the identity MG, connectivity MG, and Landing-zone MG files.
you get it...
Policy parameters "effect" is still set to "deployIfNotExists" for Identiy MG. Policy parameter "Effect" is set to  "auditIfNotExists".
Policy parameters is still set to "auditIfNotExists"  for landing zone MG, connectivity MG etc.

Screenshots
Tf plan

archetype extend files

Additional context
Allowed values for the parameter are;
"allowedValues": [
"auditIfNotExists",
"AuditIfNotExists",
"deployIfNotExists",
"DeployIfNotExists",
"disabled",
"Disabled"

Screenshots

Additional context

in addition, The "Effect" parameter on the Identity MG doesn't show up on the portal or config files afaik and checked.


Crash on Fatal Exception: java.lang.IncompatibleClassChangeError

When calling on ChannelManager$androidChannelNeedsUpdate on Android platform App crash.
Fatal Exception: java.lang.IncompatibleClassChangeError: The method 'boolean java.lang.Object.equals(java.lang.Object)' was expected to be of type interface but instead was found to be of type virtual (declaration of 'ci.d' appears in /data/app/com.xxxxxxxxxx.xxx-pf3kfUpOmWmEUh25xxxx==/base.apk:classes2.dex)
       at me.carda.awesome_notifications.notifications.managers.ChannelManager.androidChannelNeedsUpdate(ChannelManager.java:234)
       at me.carda.awesome_notifications.notifications.managers.ChannelManager.saveAndroidChannel(ChannelManager.java:207)
       at me.carda.awesome_notifications.notifications.managers.ChannelManager.saveChannel(ChannelManager.java:165)
       at me.carda.awesome_notifications.AwesomeNotificationsPlugin.setChannels(AwesomeNotificationsPlugin.java:1145)
       at me.carda.awesome_notifications.AwesomeNotificationsPlugin.setDefaultConfigurations(AwesomeNotificationsPlugin.java:1088)
       at me.carda.awesome_notifications.AwesomeNotificationsPlugin.channelMethodInitialize(AwesomeNotificationsPlugin.java:1070)
       at me.carda.awesome_notifications.AwesomeNotificationsPlugin.onMethodCall(AwesomeNotificationsPlugin.java:438)
       at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:262)
       at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:295)
       at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0(DartMessenger.java:319)
       at io.flutter.embedding.engine.dart.DartMessenger.$r8$lambda$TsixYUB5E6FpKhMtCSQVHKE89gQ(DartMessenger.java)
       at io.flutter.embedding.engine.dart.DartMessenger$$InternalSyntheticLambda$0$ceffc6bae7d364cb48afaf1aaebd60bf9050360d0efb9035ebc54f0851df0a05$0.run(DartMessenger.java:12)
       at android.os.Handler.handleCallback(Handler.java:808)
       at android.os.Handler.dispatchMessage(Handler.java:101)
       at android.os.Looper.loop(Looper.java:166)
       at android.app.ActivityThread.main(ActivityThread.java:7529)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)

Follow the logs I think the problem is caused by comparing CharSquence with String
androidChannel.getName().equals(channelModel.channelName)

Can I fix it by changing this line intoandroidChannel.getName().toString().equals(channelModel.channelName)?

Hi! Sorry for taking so long to respond to your issue on GitHub. I was focused on releasing the new 0.7.0 version of awesome_notifications and awesome_notifications_fcm and i didn't had time enough to do both. But now I can answer all your questions.
So now i'm asking you to recreate this topic using the new issue template. There's a lot of missing informations that i need to understand your problem, and all the instructions are already in the new issue template. Also, remember to check beforehand if your issue was posted by another user.
So I will automatically close all previous issues so far.
Sorry for the inconvenience and i will be waiting for your new issue request.
Thank you so much for your support!


Remove deprecated mixins in favor of session service

Removes DataAdapterMixin, ApplicationRouteMixin, AuthenticatedRouteMixin, UnauthenticatedRouteMixin, OAuth2ImplicitGrantCallbackRouteMixin
Refactors classic-test-app to use session service
Configures ESA for classic-test-app in ember-cli-build to get rid of automatic session initialization deprecation
Modifies documentation to no longer link to mixins

@snewcomer already did some of the work before back when we were blocked by other dependencies.
I forgot about this and noticed only now when all of the mixins got removed moments ago 😓
Sorry!
https://github.com/mainmatter/ember-simple-auth/pull/2339
https://github.com/mainmatter/ember-simple-auth/pull/2337


docs(readme) declare code blocks as jsx

Not all code blocks were declared as jsx therefore some examples had broken syntax highlighting

Example of broken syntax highlighting:

awesome! thank you @pixelass!


bug(mat-stepper): MatStepper and MatStep not working through content projection

Is this a regression?

[ ] Yes, this behavior used to work in the previous version

The previous version in which this bug was not present was
No response
Description
Hello. I'm not sure if this is by design, but I'd expect this code to work. MatStepper is already using descendants: true in it's @ContentChildren query so I'd assume this is allowed.
import 'zone.js/dist/zone';
import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';
import { bootstrapApplication } from '@angular/platform-browser';
import { MatStepperModule } from '@angular/material/stepper';

@Component({
  selector: 'my-app-stepper-container',
  standalone: true,
  imports: [MatStepperModule],
  template: `
  <mat-stepper>
    <ng-content></ng-content>
  </mat-stepper>
  `
})
export class StepperContainer {}

@Component({
  selector: 'my-app',
  standalone: true,
  imports: [CommonModule, MatStepperModule, StepperContainer],
  template: `
    <my-app-stepper-container>
      <mat-step>my step</mat-step>
    </my-app-stepper-container>
  `,
})
export class App {
  name = 'Angular';
}

bootstrapApplication(App);

ERROR
Error: R3InjectorError(Standalone[App])[MatStepper -> MatStepper -> MatStepper]:
NullInjectorError: No provider for MatStepper!

Reproduction
Steps to reproduce:
https://stackblitz.com/edit/angular-tnkyk1?devToolsHeight=33&file=src/main.ts
Expected Behavior
MatStepper and MatStep work through content projection.
Actual Behavior
NullInjectorError is thrown.
Environment

Angular: 15.2.0
CDK/Material: 15.2.0
Browser(s): Chrome 110.0.5481.177 (Official Build) (x86_64)
Operating System (e.g. Windows, macOS, Ubuntu): macOS

The stepper uses ContentChildren to pick up the steps that have been projected. ContentChildren doesn't work if the children have been defined inside the stepper element. This is how it works at the framework level and we don't have an alternative.


2.0 Script Export

Just this file was throwing a script error because it happened to be still in 3.x export format and not 4.0

Thanks! Not sure how we missed this one!