read.maf remove samples with low mutation rate

Hi, I encountered an issue that read.maf seem to remove the samples with very low mutation rates (eg. only one mutation for that specific sample). Since the data I am using is panel based somatic mutation, which is very likely to have low mutation rates and I want to keep them in the downstream analysis.  Can you please help me fix this and keep all when applying read.maf?
Thank you.

@xiw588 You can set vc_nonSyn to manually keep the mutation variation type.
@PoisonAlien I notice that many people have needs to keep all mutations, maybe a TRUE or 'ALL' option could be supported in the vc_nonSyn to keep ALL mutations.

@PoisonAlien @ShixiangWang Thank you for your prompt response! Actually I had tried this but still got one sample removed. I guess if there is any other filter measuring the total number of mutations per sample that lead this (only one mutation and the type of variant has already been included) to be removed.

Hi @xiw588 ,
read.maf won't remove any non-synonymous variants. Could you please post your commands?
@ShixiangWang Thanks for the suggestion, I can include all as an option.

@xiw588 If your case is true, then there should be a bug in read_maf(). However, this function works well for most of people. So please share a reproducible example data and your commands (including your R session information) for checking.

Hi Shixiang,
Thank you for your response. I could provide the data, but it seems to be too large (35Mb) to be shared through this comment.  Do you know if there is anyway that I could share the data with you?  Thank you.
Here I show the R session information
R version 4.0.3 (2020-10-10)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Big Sur 10.16
Matrix products: default
LAPACK: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRlapack.dylib
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base
other attached packages:
[1] reshape_0.8.8          dplyr_1.0.3            ggsci_2.9              GGally_2.1.1
[5] rms_6.2-0              SparseM_1.78           Hmisc_4.5-0            Formula_1.2-4
[9] lattice_0.20-41        pROC_<IP_ADDRESS>          survivalROC_1.0.3      qvalue_2.22.0
[13] table1_1.2.1           clusterProfiler_3.18.0 msigdbr_7.2.1          readxl_1.3.1
[17] ggrepel_0.9.1          survminer_0.4.8        ggpubr_0.4.0           ggplot2_3.3.3
[21] survival_3.2-7         maftools_2.6.05
loaded via a namespace (and not attached):
[1] shadowtext_0.0.7     backports_1.2.1      fastmatch_1.1-0      plyr_1.8.6
[5] igraph_1.2.6         splines_4.0.3        BiocParallel_1.24.1  TH.data_1.0-10
[9] digest_0.6.27        htmltools_<IP_ADDRESS>    GOSemSim_2.16.1      viridis_0.5.1
[13] GO.db_3.12.1         fansi_0.4.2          magrittr_2.0.1       checkmate_2.0.0
[17] memoise_2.0.0        cluster_2.1.0        openxlsx_4.2.3       graphlayouts_0.7.1
[21] matrixStats_0.57.0   sandwich_3.0-0       prettyunits_1.1.1    enrichplot_1.10.1
[25] jpeg_0.1-8.1         colorspace_2.0-0     blob_1.2.1           haven_2.3.1
[29] xfun_0.20            crayon_1.3.4         scatterpie_0.1.5     zoo_1.8-8
[33] glue_1.4.2           polyclip_1.10-0      gtable_0.3.0         MatrixModels_0.4-1
[37] car_3.0-10           BiocGenerics_0.36.0  abind_1.4-5          scales_1.1.1
[41] DOSE_3.16.0          pheatmap_1.0.12      mvtnorm_1.1-1        DBI_1.1.1
[45] rstatix_0.6.0        Rcpp_1.0.6           progress_1.2.2       viridisLite_0.3.0
[49] xtable_1.8-4         htmlTable_2.1.0      foreign_0.8-81       bit_4.0.4
[53] km.ci_0.5-2          stats4_4.0.3         htmlwidgets_1.5.3    fgsea_1.16.0
[57] RColorBrewer_1.1-2   ellipsis_0.3.1       pkgconfig_2.0.3      farver_2.0.3
[61] nnet_7.3-15          utf8_1.1.4           tidyselect_1.1.0     labeling_0.4.2
[65] rlang_0.4.10         reshape2_1.4.4       AnnotationDbi_1.52.0 munsell_0.5.0
[69] cellranger_1.1.0     tools_4.0.3          cachem_1.0.1         downloader_0.4
[73] cli_2.2.0            generics_0.1.0       RSQLite_2.2.3        broom_0.7.3
[77] stringr_1.4.0        fastmap_1.1.0        knitr_1.31           bit64_4.0.5
[81] tidygraph_1.2.0      zip_2.1.1            survMisc_0.5.5       purrr_0.3.4
[85] ggraph_2.0.4         nlme_3.1-151         quantreg_5.83        DO.db_2.9
[89] compiler_4.0.3       rstudioapi_0.13      curl_4.3             png_0.1-7
[93] ggsignif_0.6.0       tibble_3.0.5         tweenr_1.0.1         stringi_1.5.3
[97] forcats_0.5.1        Matrix_1.3-2         KMsurv_0.1-5         vctrs_0.3.6
[101] pillar_1.4.7         lifecycle_0.2.0      BiocManager_1.30.10  conquer_1.0.2
[105] data.table_1.13.6    cowplot_1.1.1        R6_2.5.0             latticeExtra_0.6-29
[109] gridExtra_2.3        rio_0.5.16           IRanges_2.24.1       codetools_0.2-18
[113] polspline_1.1.19     MASS_7.3-53          assertthat_0.2.1     withr_2.4.1
[117] multcomp_1.4-16      S4Vectors_0.28.1     mgcv_1.8-33          parallel_4.0.3
[121] hms_1.0.0            grid_4.0.3           rpart_4.1-15         tidyr_1.1.2
[125] rvcheck_0.1.8        carData_3.0-4        ggforce_0.3.2        Biobase_2.50.0
[129] base64enc_0.1-3      tinytex_0.29

@xiw588 You can put an example data with a few samples which can reproduce the error situation as you described. And please also put your processing command.


node_modules_imported is incomplete

I have a highly modular project and I'm trying to build a Kotlin/JS application to run on NodeJS. Since we need to write lots of expect stuff I'm creating a gradle module for each NPM and there I write the expect stuff alongside with some extra extensions and helper functions and classes (to use suspend instead of callbacks for example).
So I have a build.gradle like this:
dependencies {
    compile project(':environment:js:headers:helmet-npm')
    compile project(':environment:js:headers:node-npm')
    compile project(':environment:js:headers:windows-cpu-npm')
    compile project(':environment:js:headers:minimist-npm')
    compile project(':environment:js:headers:source-map-support-npm')
}

kotlinFrontend {
    npm {
        dependency "windows-cpu"
        dependency "mime-lookup"
        dependency "express"
        dependency "helmet"
        dependency "minimist"
        dependency "source-map-support"
    }

    webpackBundle {
        bundleName = "main"
        sourceMapEnabled = true
    }
}

Note: Notice that I added a "-npm" suffix to the gradle project's name, that was needed because it was overriding the actual NPM modules as they were getting the same JS name.
When I run:
./gradlew clean
./gradlew build

It fills node_modules_imported only with some dependencies, not all:

If I try to run my main function using the npm run configuration and pointing to the produced js file (build\classes\kotlin\main\node-manager.js in my case), this happens:

But if after that I run a clean build targeting the sub-module:
./gradlew clean
./gradlew build
./gradlew :network:node-manager:clean
./gradlew :network:node-manager:build

The node_modules_imported directory gets fully built:

And the same npm run configuration works as expected (also supporting sourceMap).
So the issue is that the gradle plugin isn't waiting all dependencies be ready before building the node_modules_imported directory.

I also noticed the example that I provided is also incomplete.
If I reference my dependencies directly like I did in my previous message, the JS module will not be linked to the node_modules_imported directory and NPM will not be able to run it!
To get everything working I had to create an other module which is neighbor to the actual module (resides on the same parent directory) and apply the actual dependencies to it and finally link that module as dependency to my actual module.
apply plugin: 'kotlin-platform-js'
//apply plugin: 'kotlin-dce-js'
apply plugin: 'org.jetbrains.kotlin.frontend'

def indirect = project.path+'-indirect'
project(indirect) {
    apply plugin: 'kotlin-platform-js'
    dependencies {
        compile project(':environment:js:headers:helmet-npm')
        compile project(':environment:js:headers:node-npm')
        compile project(':environment:js:headers:windows-cpu-npm')
        compile project(':environment:js:headers:minimist-npm')
        compile project(':environment:js:headers:source-map-support-npm')
    }
}

dependencies {
    compile project(indirect)
}

kotlinFrontend {
    npm {
        dependency "windows-cpu"
        dependency "mime-lookup"
        dependency "express"
        dependency "helmet"
        dependency "minimist"
        dependency "source-map-support"
    }
}

Now I will be able to get all modules in the node_modules_imported and node_modules directory doing these commands:
./gradlew clean
./gradlew build
./gradlew :network:node-manager:clean
./gradlew :network:node-manager:build

I've uploaded a sample project showing this issue.
It has a module named 'sample-module' with the main code and a bunch of submodules inside of environment:
There's a bat file to clean, build and run the project.
The "should-work" branch shows how I was trying to organize the project originally, directly referencing my submodules as dependencies and trying to build it fully with gradlew clean build.
https://github.com/joserobjr/kotlin-frontend-plugin-issue-104/tree/should-work
Dependencies of :sample-module
runtimeClasspath - Runtime classpath of source set 'main'.
+--- project :environment:js:headers:minimist-npm
|    \--- project :environment:js
|         +--- project :environment:core
|         |    +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.2.61
|         |    \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-common:0.25.0
|         |         +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.2.61
|         |         \--- org.jetbrains.kotlinx:atomicfu-common:0.11.3
|         |              \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.2.61
|         +--- org.jetbrains.kotlinx:kotlinx-coroutines-core-js:0.25.0
|         |    +--- org.jetbrains.kotlin:kotlin-stdlib-js:1.2.61
|         |    |    \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.2.61
|         |    +--- org.jetbrains.kotlinx:atomicfu-js:0.11.3
|         |    \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-common:0.25.0 (*)
|         \--- org.jetbrains.kotlin:kotlin-stdlib-js:1.2.61 (*)
+--- project :environment:js:headers:source-map-support-npm
|    \--- project :environment:js (*)
\--- project :environment:js (*)

The module "workaround" shows what I had to do to make it work, which is adding an indirect modules to indirectly add dependencies to what I need and adding two extra commands for each Kotlin/JS project that I need to run the main function to the batch.
https://github.com/joserobjr/kotlin-frontend-plugin-issue-104/tree/workaround
Dependencies of :sample-module
runtimeClasspath - Runtime classpath of source set 'main'.
+--- project :sample-module-indirect
|    +--- project :environment:js:headers:minimist-npm
|    |    \--- project :environment:js:indirect
|    |         \--- project :environment:js
|    |              +--- project :environment:core
|    |              |    +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.2.61
|    |              |    \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-common:0.25.0
|    |              |         +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.2.61
|    |              |         \--- org.jetbrains.kotlinx:atomicfu-common:0.11.3
|    |              |              \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.2.61
|    |              +--- org.jetbrains.kotlinx:kotlinx-coroutines-core-js:0.25.0
|    |              |    +--- org.jetbrains.kotlin:kotlin-stdlib-js:1.2.61
|    |              |    |    \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.2.61
|    |              |    +--- org.jetbrains.kotlinx:atomicfu-js:0.11.3
|    |              |    \--- org.jetbrains.kotlinx:kotlinx-coroutines-core-common:0.25.0 (*)
|    |              \--- org.jetbrains.kotlin:kotlin-stdlib-js:1.2.61 (*)
|    +--- project :environment:js:headers:source-map-support-npm
|    |    \--- project :environment:js:indirect (*)
|    \--- project :environment:js:indirect (*)
\--- project :environment:js:indirect (*)

I personally ran into the same issue and worked around it the same way.


Unable to replicate results on CIFAR10

Hello, thank you for providing this codebase!
Unfortunately, I am unable to to replicate the reported results on the CIFAR10 dataset (MNIST seems to work fine). I am using the conda environment provided in the repo, and running as described (albeit on a slurm cluster).
The evaluation results I get for the backbone CIFAR10 model are:
Accuracy: 0.763000
Coverage: 0.989100
Size: 3.685510
For the baseline fine-tuned model:
Accuracy: 0.762930
Coverage: 0.989310
Size: 3.701350
And conformal training fine-tuned:
Accuracy: 0.760380
Coverage: 0.989150
Size: 3.764270
I can also provide the training logs if needed. It seems that the size loss is not decreasing much (or at all) during fine tuning. I believe I am following the instructions as described, however I could be missing something. Please let me know if you'd like any further information. Thank you!

It is a bit hard to debug without details, but I think the main problem is that the base accuracy is too low. Our model in the paper obtained 82% intead of 76% (see Table F in the appendix). The difference in terms of inefficiency on CIFAR10 (between baseline and conformal training) is usually rather small and depends strongly on accuracy. I don't think your cluster should be the problem. This could also be a wrong configuration in this repository compared to the model we used for the paper. I just checked the original model and it indeed gets ~82% accuracy and it seems to use the same configuration (resnet 34, 4 channels flip+crop data augmentation), but I wasn't able to match all the details - it could be that data augmentation details or something similar changed in the meantime.
If it is critical for you to reproduce the paper results, I'd suggest playing around with data augmentation/number of channels to get to 82% or higher accuracy. Let me know what you think.

Hi @davidstutz, thanks for your response. I agree that the config parameters do seem to match what is reported in the paper. I believe only the weight decay value isn't reported in the paper, so I'm not sure if there are differences there. However I am still familiarizing myself with the codebase.
I did try increasing the number of channels to 8 & 16, here are some of the results:
8 channel
backbone:
acc: 0.825710
coverage: 0.98940
size: 2.890260
baseline:
acc: 0.825520
coverage: 0.9892200
size: 2.907480
conformal:
acc: 0.82500
coverage: 0.9895100
size: 2.913100
16 channel:
backbone:
acc: 0.859080
coverage: 0.988810
size: 2.530480
baseline:
acc: 0.859750
coverage: 0.988630
size: 2.616380
conformal:
acc: 0.858120
coverage: 0.989130
size: 2.530860
With 8 channels, the the model achieves ~82% accuracy however the conformal training results still seem to be higher than expected. 16 channels achieves higher accuracy and smaller set sizes, but here the conformal sets are similar to the regular backbone ones.
I was able to replicate the reported results on Fashion MNIST (in addition to MNIST), so the discrepancy probably does lies in the CIFAR config parameters.
It does seem odd that your local codebase performs differently, with the same number of channels / augmentations. I wonder if there is still some differences between the configurations; however I have not been able to find them. I would like to integrate your codebase into my own work, and so it would be great to be able to confirm that I have it working properly first. Are there other things you might suggest to look into? If you have the time, would you be able to run this version of the code and confirm the results I am seeing, just to rule out any issues with packages/installation I might have on my end?
I can also provide training logs or additional information if it would be helpful. Thank you!


Load session prior to uri as the initialization of Uri does some session handling for the active language

Refs https://github.com/getgrav/grav/issues/842

I don't see any issues with this.


fix: typo in README

There was an additional space in constructing a link.

@e0ipso - thanks so much for the catch on this. Really appreciate it. 🎉


feat(bru-rmvar): add bru.rmVar(varType, key) command

Description
Referencing issue #2464
Add a new bru.rmVar() command that helps replicate pm.environment.unset()
The command is recognized in the UI and can edit content from envVariables, collectionVariables and also processEnvVars.
How to use : bru.rmVar([varType], [key])

Contribution Checklist:

[x] The pull request only addresses one issue or adds one feature.
[x] The pull request does not introduce any breaking changes
[x] I have added screenshots or gifs to help explain the change if applicable.
[x] I have read the contribution guidelines.
[x] Create an issue and link to the pull request.

Note: Keeping the PR small and focused helps make it easier to review and merge. If you have multiple changes you want to make, please consider submitting them as separate pull requests.
Publishing to New Package Managers
Please see here for more information.

The commands #1714 are also interesting, and considering those are simple and necessary, while the PR is more than 3 months old is crazy #

If there are setVar/getVar and setEnvVar/getEnvVar methods why not to have rmVar and rmEnvVar?
In my eyes it is better as to introduce some weird and long varType strings which will be error prone because of typos during typing it.

Thank for taking time to work on this @bpoulaindev
Bruno now supports bru.deleteVar() which was implemented as a part of another PR
Closing this PR.


CHIMP handcannon

About the PR

Adds the CHIMP, a handheld form of the APE.
This is just a fun little unlock for science. It should honestly be its own tech but it can wait for the rework.
Uses some unique bullets.
Also starts filled because i am an enemy of the state.
Media

[x] I have added screenshots/videos to this PR showcasing its changes ingame, or this PR does not require an ingame showcase

Changelog

:cl:

add: Added the C.H.I.M.P. handcannon, a hand-held version of the A.P.E.

zamn r we getting the bfg?

you need to add color marks to the sprites cartridge

you need to add color marks to the sprites cartridge

it is done


Display time in calendar

Hi,
actually I test the new MagicMirror² a little bit and I've seen some differences between the old and the new version in the calendar functions (time). The old version has more functionality in my opinion. For example:
old version: ManCity - PSG in 2 hours
same moment on the new version: ManCity - PSG Today
There are a few more examples with since 2 hours etc. Will you implement those features in future?
Regards
Maurice

I'll probably add this in the future. Feel free to send a pull request.

It's the same like #166 . I tested it: Those entry's aren't whole day events and it shows no exact time.

Thanks for reporting ... I put it on the todo list.

Could you supply a test feed?

I have a nice example:
Right now on my MM² Raspi:

Right now on my MM1 Raspi:

The first event is over since 4 hours (on MM1 everything is correct). Actually I think MM² thinks all events are whole day events.

Yes, I understand the issue. Do you have a test .ics feed which gives you this issue?

Yes. I made a new open feed in my icloud with a couple of events:
webcal://p35-calendars.icloud.com/published/2/qsud2R2XlRhT3puEVfrzkeSd3X_QSfCMBmpgTsjVqOD2W_fyy0Y-5QskbvWw2jOQB_cPsmcjpGtcg1a3jBQ_QIS2H0XWSxjqCa8LX0dznpE

Thanks, I will look into it.

I've just pushed an update. Could you give it a try?

Looks a little bit better, but now event "Test 1" isn't there anymore. But Test 1 is from 12 to 15 o clock. So it has already begun.

Exactly. It is in the past, so it is filtered out.

It only shows future events.

Yes, thats clear. But on MM1 it was possible to see how long the event goes. Do you understand what I mean?

So it showed the event while it was still going ... ?

Example: Test 1 12-15 o' clock. We have 13 o'clock. So MM1 says: 2 hours left

Hmm, ok ... let met look at it.

Did you remove Test 1 from your feed?

No, I don't.

Ok ... let me check.

Ok, give it an other try.
Make sure you set the runningText text property in your config to the german string. (The default is: ends in). So it needs to be something like: endet am

Thanks! Still no Test 1 event.

Are you sure you restarted the backend?

Yes, but I'll make a shutdown -r 0 now.

Ah, great Michael, looks good now!
PS: In this case, in german we say noch :)

Ah, just like "Nog" in dutch! ;)
Can I close this issue?

Yes, you can :).

Hi Michael,
I've seen another constellation. As you can see, MM1 says: "Tomorrow at ***" and MM² "in 19 hours". Perhaps it's possible to use the whole event/time function from MM1 for MM²
MM²:

MM1:

Here is a test-feed for you:
webcal://p35-calendars.icloud.com/published/2/Biw06VYAVT31nDd3JqdQkTjbAzFrzU2zZjtbhH40WZ-frGU2hWaZDyG3nXBZUgk7rvBJ0x6T-SdsFyDkzkYbVP4Onr4Eb1_4BptAPzWALA4
Thanks,
Maurice

Did you see that or should I open a new issue?

All get back to this asap.

This is fixed. If a event is within 48 hours, it shows the absolute time.
Note: This does not happen for fullday events.
I close the issue for now, if you still like some changes, feel free to let me know.

I hope it's okay that I use this "issue" again:
Today I've seen another behavior. I had an event at 16 o'clock. I looked on the mirrors at 15 o'clock:
MM1: in 1 hour
MM²: today at 16 o'clock
Is it possible to put this absolute time function in your MM² app?
Another point is, that there might be another issue. On 22.04 I had a whole day event (birthday). But today I can see this event on the MM² calendar (he says that the event is tomorrow?! I checked my event in icloud, everything is fine.
I made a feed for you:
webcal://p35-calendars.icloud.com/published/2/0gmYv_8AnTjRjR2SWtoyc7_eCWfFKOEj-ZVz7-eJ0elAZ4SDdsiCZVslxdjR-NxRhcM6N4hwTKuay0bpJSR7a9THwnMmyHEzyYFB4cpSxlA

today at 16 o'clock is an 'absolute time'. Or do you prefer a relative time?

I don't know how you solve that in MM1. A few hours before the event starts MM1 says not today at ***** anymore but in 3 hours or in 23 minutes. I hope you understand what i mean.
BTW: Did you change anything in the calendar module? runningText: 'noch' doesn't work anymore. In german I see Endet in (like ends in).

Yes, but that's a personal preference. We could make it configurable. I suggest you open a separate issue for that, I'll mark it as "enhancement" and might add the feature when I have time. (Could take a while).
Also, I checked your example feed. Which event is incorrect?
About the translation: that's correct. We implemented a translation system. The strings are now translated in the language files (only the calendar for now.) See: https://github.com/MichMich/MagicMirror/issues/191

Okay I'll do that. For me, your solution in MM1 was great.
Event "Test 8" is incorrect. It's a whole day event yesterday.
I understand. So you should update the wiki, if it doesn't work anymore :).

Please send a pull request to fix both the documentation and the translation if you can.

First I made an new issue for the "personal" feature. What should I do next? Create one pull request for the whole day issue and another pull request for the language problem?

I'll look into the incorrect Test 8 date. If you could create a pull request for the language issues, that would be awesome.

I've never done a pull request, I can try ;).

Looking forward to it! :)

Your Test 8 issue is fixed. Please update and restart :)

Thanks, I'll check that.
Do you see my pull request?

Nope :(

Sorry, it's the first time. I forked the project, edit the file and made the request:

You are probably trying to merge an update from MM to your fork. It should be the other way around. If you go to the MM repo (not your fork), You'll see a green Pull Request button.

Sieht bei mir so aus: Robiv8/MagicMirror dann erscheint auch der Grüne button §New pull request"

@Robiv8
Danke dir! Ich hab's schon gefunden und Michael hat's auch schon gemerged :).

In this theme I would like to suppress the exact time - its good enough to know the day it happens. So as an enhancement suggestion I created a new config variable, defaulting to true, but false for my need
displayTime: false,
then added the conditional in the building loop - I'm sure the conditional logic could be improved, but this works for me.
			if (this.config.displayTime){
				if (event.fullDayEvent) {
					if (event.today) {
						timeWrapper.innerHTML = this.translate("TODAY");
					} else if (event.startDate - now < 24 * 60 * 60 * 1000 && event.startDate - now > 0) {
						timeWrapper.innerHTML = this.translate("TOMORROW");
					} else {
						timeWrapper.innerHTML =  moment(event.startDate,"x").fromNow();
					}
				} else {
					if (event.startDate >= new Date()) {
						if (event.startDate - now > 48 * 60 * 60 * 1000) {
							// if the event is no longer than 2 days away, display the absolute time.
							timeWrapper.innerHTML = moment(event.startDate,"x").fromNow();
						} else {
							timeWrapper.innerHTML = moment(event.startDate,"x").calendar();
						}
					} else {
						timeWrapper.innerHTML =  this.translate("RUNNING") + ' ' + moment(event.endDate,"x").fromNow(true);
					}
			}} else {
				if (event.today) {
					timeWrapper.innerHTML = this.translate("TODAY");
				} else if (event.startDate - now < 24 * 60 * 60 * 1000 && event.startDate - now > 0) {
					timeWrapper.innerHTML = this.translate("TOMORROW");
				} else {
					timeWrapper.innerHTML =  moment(event.startDate,"x").fromNow();
				}};

CommanderB: I would recommend starting a new post, as opposed to tagging along on this one as it's a different issue.

Hey @MichMich, you can probably close this issue now as the request from the original OP has been released. And what @CommanderB has requested above is a different issue all together.

Great, thanks.


[BUG] Delta Standalone 3.0.0rc1 shades Delta Storage 3.0.0rc1 classes

Bug
Delta Standalone 3.0.0rc1 shades Delta Storage 3.0.0rc1 and also depends on it at compile time.
It causes the issue, because a 3rd party project dependent on Delta Standalone has two sets of Delta Storage classes.
Describe the problem
Steps to reproduce

Unzip delta-standalone_2.12-3.0.0rc1.jar to check that storage classes are there.
Check that delta-standalone_2.12-3.0.0rc1.pom has Delta Storage dependency.

Observed results
Comparison of Delta Standalone 0.6.0 and Delta Standalone 3.0.0rc1

Expected results
Delta Standalone shades Delta Storage OR Delta Standalone depends on Delta Storage
Further details

Environment information

Delta Lake version: 3.0.0rc1
Spark version: -
Scala version: 2.12

Willingness to contribute
The Delta Lake Community encourages bug fix contributions. Would you or another member of your organization be willing to contribute a fix for this bug to the Delta Lake code base?

[ ] Yes. I can contribute a fix for this bug independently.
[x] Yes. I would be willing to contribute a fix for this bug with guidance from the Delta Lake community.
[ ] No. I cannot contribute a bug fix at this time.

Thanks for bringing this to our attention! Seems like you could look at the build.sbt diff between the delta-connectors repo 0.6.0 and the delta-lake repo 3.0.0 to spot the issue?

There seems to be a similar issue for Iceberg jar https://github.com/delta-io/delta/issues/1903.
I changed "Willingness to contribute" to "No", because after some exploration I found that unfortunately I don't have necessary experience with sbt.


Scheduled task executes at non-scheduled times

I have the following for scheduled tasks:
    private void setScheduler() {
        // DB Keep Alive
        var dbKeepAlive = new DbKeepAlive(datasource);
        scheduler.addExecutor(dbKeepAlive);
        scheduler.addTask(dbKeepAlive.createTask().frequencySpecification(EVERY_TWO_HOURS)
                .planned(Date.from(ZonedDateTime.now().plusHours(1).toInstant())));
        // Social Publisher
        socialPublisher = new SocialPublisher(this);
        scheduler.addExecutor(socialPublisher);

        // LastWatched Schedule
        final var lastWatched = new LastWatched(this);
        scheduler.addExecutor(lastWatched);
        scheduler.addTask(lastWatched.createTask().frequencySpecification(EVERY_TWO_HOURS));

        // TootsDuJour Schedule;
        final var hour = 2;
        final var now = ZonedDateTime.now();
        final ZonedDateTime firstTime;
        if (now.getHour() < hour) {
            firstTime = now.withHour(hour).withMinute(0).withSecond(0); // today 2 AM
        } else {
            firstTime = now.plusDays(1).withHour(hour).withMinute(0).withSecond(0); // tomorrow 2 AM
        }
        final var tootsDuJour = new TootsDuJour(this, firstTime);
        scheduler.addExecutor(tootsDuJour);
        scheduler.addTask(tootsDuJour.createTask().frequencySpecification("0 " + hour + " * * *")
                .planned(Date.from(firstTime.toInstant())));

        // Start scheduler
        scheduler.start();
    }

The tootDuJour task is set up to run at 2 am, yet at times it runs around midnight:
15-May-2023 00:00:30.001 INFO [343] net.thauvin.erik.blog.executors.DbKeepAlive.executeTask DbKeepAlive activated.
15-May-2023 00:00:34.420 INFO [net.thauvin.erik.blog.executors.TootsDuJour] net.thauvin.erik.blog.executors.TootsDuJour.post Toots du Jour (May 14) have been posted (9225)

It always happens when another task is running around midnight.
This is what it looks like when it is executed around 2 AM:
8-May-2023 02:00:30.001 INFO [net.thauvin.erik.blog.executors.DbKeepAlive] net.thauvin.erik.blog.executors.DbKeepAlive.executeTask DbKeepAlive activated.
18-May-2023 02:00:30.773 INFO [net.thauvin.erik.blog.executors.TootsDuJour] net.thauvin.erik.blog.executors.TootsDuJour.post Toots du Jour (May 17) have been posted (9233)

Am I doing something wrong, or is it a bug?

The .planned specification is really only for once shot executions, it shouldn't be used together with repeating tasks.
Also, using a specific pre-defined frequency is intended to be done through the .frequency(Frequency) method. The .frequencySpecification(String) method takes a full cron-like string specification. It wouldn't matter here, but you're doing needless conversions to string and then back to a frequency instance.

@gbevin To recap what we talked about:

If .planned is not used, all tasks will execute at startup and on the frequency.
I don't think that any of this explains why the tootsDuJour task is sometime executing at midnight, instead of 2 AM.

This is my configuration with the last snapshot:
private void setScheduler() {
        // Social Publisher
        socialPublisher = new SocialPublisher(this);
        scheduler.addExecutor(socialPublisher);

        // LastWatched Schedule
        final var lastWatched = new LastWatched(this);
        scheduler.addExecutor(lastWatched);
        scheduler.addTask(lastWatched.createTask().frequencySpecification(EVERY_TWO_HOURS));

        // TootsDuJour Schedule;
        final var tootsDuJour = new TootsDuJour(this);
        scheduler.addExecutor(tootsDuJour);
        scheduler.addTask(tootsDuJour.createTask().frequencySpecification("0 2 * * *"));

        // Start scheduler
        scheduler.start();
    }

The tootsDuJour task executed at 00:00 today, not 02:00.
26-Aug-2023 00:00:32.843 INFO [net.thauvin.erik.blog.executors.TootsDuJour] net.thauvin.erik.blog.executors.TootsDuJour.post Toots du Jour (Aug 25) have been posted (9432)

What does EVERY_TWO_HOURS look like?

What does EVERY_TWO_HOURS look like?

    private static final String EVERY_TWO_HOURS = "0 */2 * * *";

Are you using a memory or a database scheduler?

Are you using a memory or a database scheduler?

    public final Scheduler scheduler = new MemoryScheduling().createScheduler();

@gbevin Triggered again at around midnight with today's snapshot.

@ethauvin nothing strange happened in my isolated run, guess I'll switch to hours instead of minutes and try again

If you hover over the date, you can see the posting date/time:
https://erik.thauvin.net/blog/search?cat=mastodon
Seems to be 00:30 more often than not. It almost never fires at the scheduled time.

Yeah I'm trying to reproduce it, but can't. This is a vary laborious process since I can't reproduce it at the minute scale either. So anything I try takes ages to verify. Next on my list is to try to write tests that could spoof the current time, but I'd have to adapt the scheduler code to be able to use that.

Yeah I'm trying to reproduce it, but can't. This is a vary laborious process since I can't reproduce it at the minute scale either. So anything I try takes ages to verify. Next on my list is to try to write tests that could spoof the current time, but I'd have to adapt the scheduler code to be able to use that.

@gbevin Miight be a shot in the dark, but have you tried with Tomcat instead of Jetty?

Yeah I'm trying to reproduce it, but can't. This is a vary laborious process since I can't reproduce it at the minute scale either. So anything I try takes ages to verify. Next on my list is to try to write tests that could spoof the current time, but I'd have to adapt the scheduler code to be able to use that.

If you give me some guidance on what you'd like to see output; I can put it on my server, and we'll have data by midnight.

I'm trying to get it to happen locally so that I can debug it. At this point I have no clue where to start looking in the code.


How to prepare my own training datasets

I am trying to prepare my own datasets for use with the  model builder example, but it is not clear to me what is the right way to do so.
For example, in the config file deeplearnjs/demos/model-builder/model-builder-datasets-config.json there are specifications for "images" and "labels" for CIFAR-10, which point to https://storage.googleapis.com/learnjs-data/model-builder/cifar10_images.png and
https://storage.googleapis.com/learnjs-data/model-builder/cifar10_labels_uint8 respectively. However, the images file does not appear to be a simple mosaic of the training images, and the labels file is not a simple text file containing plain-text labels.
Any information about this is much appreciated!

Hi Kaihu,
The collage for the model builder is a flattened version, you can generate that collage with this script, you will need to write your uint8 ndarray to a file (numpy has a ndarray.tofile method which you can use):
https://github.com/PAIR-code/deeplearnjs/blob/master/scripts/convert_uint8_tensor_to_png.py
The uint8 labels file is simply the uint8 byte packed file using the ndarray.tofile on a uint8 ndarray. The type of the file is specified in the model-builder-datasets-config.json.
Hope this helps, let me know if you need anything else. Looking forward to seeing what you do with this, please do send a link when you have something interesting!

By the way, you can use all of these without the model-builder, if you like - all the building blocks that we're talking about above just by using this file:
https://github.com/PAIR-code/deeplearnjs/blob/master/demos/xhr-dataset.ts
Then you can just construct your own graph (model builder only allows sequential models, that is, a model of layers where the data gets completely transformed between operations).

@nsthorat  Thanks for your prompt reply.
FYI, what I am doing here is a preliminary study to see if I am able to use deeplearnjs to build a ML-based tool suitable for a large number of non-programmers to use (e.g., a bug or plant disease recognizer that a farming expert can train, and then to be used by farmers eventually) . Deeplearnjs is ideal for my purposes, since it will allow such a system to scale way better/cheaper than the typical server-centric ML setup.
There is something I still do not quite understand about the 'collage' issue. Based on your description and the code (i.e., convert_uint8_tensor_to_png.py) it seems that the assumed input is an array of 3D tensors. However, what I have to start with is actually a set of JPEG/PNG files instead. I wonder if there is any tool that will allow me to convert such JPEG/PNG files to the target flattened version, without having to convert them to tensors first. Thanks!

Wow that is super cool!
Ah yes, we assume a numpy 3d array. You could modify that script to read in your images through scipy or PIL, or you could write a script that uses those to aggregate all of the numpy arrays with the methods above and write the resulting aggregated numpy array to a file. Then, you could run our scripts directly without changes.
I would probably go with the first approach, but it's up to you.
Hope this helps, let me know if you have any more questions!

@nsthorat
Found out that the labels must be encoded in the one-hot format (I think), which wasn't obvious to me earlier. At this point my dataset kind of runs normally, except that for some reasons it seems to be picking up only one class of examples during training.
More specifically, I have a dataset with three classes (A, B, and C) and a total of 534 training examples (as shown in the Model Build screenshot below). The model used here is a copy of CIFAR-10's but with the output changed from 10 to 3. The 'INFERENCE' column shows only one class (i.e., the class C) of examples (expecting 3 there). I noticed that if I reverse the order when flattening the training images, then it will still train on only one class (i.e., the class A).  Any help is appreciated!

Found some more clues here. The problem seems to have something to do with the size of the training set.
I reduced the size of the training set to just 3 example (one per class, just to debug), everything looks in order, but the code somehow picks only one example for training. Same thing with 6 examples, or 534 examples. Replicated the images in the training set to yield 3000 examples, then the problem went away and all's well. Got the dataset with 534 examples and replicated it 5 times to yield 2670 example, and it also worked well.
Now that I know how to work around it, it is not really a problem, since I am also supposed to be using larger training dataset anyways. Hope this will help somebody.

Ah glad you got it working, I will investigate why smaller datasets don't seem to work.
I'll also spend a little time making it easier to plug into the model-builder, we never really spent the cycles to make it extensible :)

@kaihuchen to expedite this, could you send me the dataset with only a few examples (the one that breaks the model builder)?
Thanks

Attached are the data files (labels and images) for 3 classes of flowers (named simply as 'A', 'B', and 'C'), with two samples per class for a total of 6 samples. Hope this helps.

@nsthorat Just realized that my labels files might not have gone through when I attached it, since I can't see it in my post. Wonder if you did get it?

@nsthorat  @kaihuchen, for one hot encoding for labels, i noticed that for CIFAR10, n_value seems to be set at "60000", should i follow same for encoding my labels, i have only 5 though, or "auto" n_value will work same? I am not able to run and check due to issue#50. Any guidance would be helpful, thanks

@JainVikas   Not sure what you meant by 'n_value', but for the one-hot encoding of the labels I usually set the size of each one-hot vector to be the same as the number of classes in the data. So if you have 5 classes then using an one-hot vector of size 5 should work. Overall in the 'labels' file there should be N (N=number of data samples) such vectors laid out sequentially in the file (for a total of 5*N bytes, assuming 5 classes), where each byte should be an uint8 of either 0 or 1.
Hope this helps!

I didn't get the labels. Could you send it to me on a private github mail?
What @kaihuchen said is right. Regarding #50, we will be fixing that bug soon (once we get our hands on a windows machine).

How to make dataset use my own images

I'm also trying to make my own dataset. I don't have experience with Python nor TensorFlow. So not exactly sure what to do. Does this approach make sense?
Generate inputs
    paths_to_images = [
        'a.png',
        'b.png',
        ... etc
    ]

    loaded_images = []
    for path_to_image in paths_to_images:
        image = Image.open(path_to_image)
        image_as_array = np.asarray(image)  # width x height x channels
        loaded_images.append(image_as_array)

    a = np.array(loaded_images)

    print('Read', a.shape[0], 'images')
    print('min/max pixel values: ', a.min(), '/', a.max())

    # Make each image take a single row in the big batch image by flattening the
    # width (2nd) and height (3rd) dimension.
    # a has shape N x (Width*Height) x Channels.
    a = a.reshape([a.shape[0], -1, FLAGS.num_channels]).squeeze()
    im = Image.fromarray(a)
    out_path = 'output' + '.png'
    im.save(out_path)
    print('Saved image with width/height', im.size, 'at', out_path)

I guess this works correctly.
Generate labels

??? Some way to encode an n-dimensional array in binary ???

Import in model-builder

Add data to model-builder-datasets-config.json
??? Some way to re-use model-builder-demo.html ???

I've tried to run npm run prep followed by npm run build. This puts compiled JavaScript in the build folder and downloads dependencies from bower. I'm unsure how to link this to model-builder-demo.html? If I open model-builder-demo.html directly, I get an error it can't find deeplearnjs/demos/model-builder/bundle.js .

@digitalheir @hbtech-ai it does, as a matter of fact, I have used the same approach.
Generate inputs
Read image files and create a combined ndarray for all images.
ndarray to be passed to create a flattened image, where ndrray will be a consolidated file for all images.
The collage for the model builder is a flattened version, you can generate that collage with this script, you will need to write your uint8 ndarray to a file (numpy has a #ndarray.tofile method which you can use): https://github.com/PAIR-code/deeplearnjs/blob/master/scripts/convert_uint8_tensor_to_png.py
Generate labels
use onehotencoder to generate labels file.
http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html
Modify model builder demo
add to model-builder-datasets-config.json
"myTestData": {     "data": [{       "name": "images",       "path": "<<flattened image file path>>"       "dataType": "png",        "shape": [32, 32, 3]     }, {       "name": "labels",       "path": << encoded labels files>>",       "dataType": "uint8",       "shape": [10]     }],     "labelClassNames": ["airplane", "automobile", "bird", "cat", "deer", "dog", "frog", "horse", "ship", "truck"],     "modelConfigs": {       "Convolutional": {         "path": "cifar10-conv.json"       }     } 	}

@digitalheir  I use you method to make dataset, but now is error like

@nsthorat I hope you can give developer some help for make dataset

@hbtech-ai I had an error in the way that I encoded the labels file - you need to specify to numpy that you work with uint8 numbers. If you get this error, set a breakpoint in getNDArray() in xhr-dataset.ts to inspect whether the number of examples and number of labels is equal. I got it to work in the end, at least with some dummy data. Will check if I get to do real training later this week.

@digitalheir Thanks for your help,I find labels is not unit8

@digitalheir my own dataset is work,Thanks

If it helps anybody, here is a little Python program that I wrote for converting the training dataset to a form as required by deeplearnjs :  http://www.smesh.net/docs/deeplearnjs/preprocess.py
The program is not polished, and there are certainly lots of room for further improvement. If anybody wants to take it and improve upon it, you are very much welcome to do so.

Sorry I'm late to this thread.
@digitalheir Are you interested in formalizing this into a tutorial that we host? I think that would be really valuable for others.
@kaihuchen Would you want to check that script into our scripts directory? I think others would find that useful. BTW, we're going to make better tooling around bringing data into the browser in the near future.

@nsthorat sure. But I think it's only really valuable once we can save trained weights. Is there any word on that yet? (https://github.com/PAIR-code/deeplearnjs/issues/33#issuecomment-323891195)

@digitalheir to be clear, you need weight saving for the model builder or for arbitrary graph code?

For the model builder. I think the model builder is a great tool to quickly prototype any machine learning project.

@nsthorat  FYI, I have created a pull request for the said script. Let me know if any change is needed.

@nsthorat I'm ready to write a tutorial. I've prepared an example data set to recognize runes.
How do I write a tutorial? Add a markdown files to gh-pages/docs/tutorials & pull request?

@kaihuchen Awesome! I will review the PR tomorrow afternoon, we are preparing for a presentation in the morning now :)
@digitalheir Actually it's a little confusing right now - if you want to check in demo code, put it in a directory master/demos/yourdemo and put your markdown file in that directory. Our Jekyll setup is smart enough to crawl the demos and find the markdown files and index them. If you don't want to check in any code with it, put it in master/docs/tutorials/yourtutorial and then we'll run the make website script which will push the tutorial to the website (we're planning on moving away from gh-pages entirely pretty soon).

@nsthorat    Good luck with your presentation! I hope that you will tell your audience that deeplearnjs is not just for quick prototyping, but rather it could lead to a paradigm change in large-scale distributed ML, as well as some serious business opportunities.

@nsthorat Please review
https://github.com/digitalheir/deeplearnjs/blob/rune_recognition_tutorial/demos/rune_recognition/rune_recognition.md
Should I also add the example images I've prepared to the repo? It's about 650kb. I thought it might bloat the code repository a bit too much.

@kaihuchen  Thanks for your script
process_images_for_training.py
It help me a lot for my testing program.
I am working on OCR base on the rune recognition demo but input gray image
I found it need to add code for pack gray image.
def preprocessImages(FLAGS):
=>  num_channels = FLAGS.num_channels //deal with gray image when set --num_channels=1
=>  b = a.reshape([a.shape[0], -1, num_channels ]).squeeze()

TensorFlow.js has launched (https://js.tensorflow.org) and we will be working on data APIs in the coming months. Please re-open another issue in our new repo if you want to continue this discussion: https://github.com/tensorflow/tfjs


Add method for creating file

It is needed for configuration, where we should create and pack addition file with environment settings.

Can this function be called directly from product_config yeah?
According to this review the function is a part of product configs API

@GoAlexander Possibly we need to call this function in several configs, so its better to make it a part of API

@GoAlexander Possibly we need to call this function in several configs, so its better to make it a part of API

Great, it is 100% what wanted.


Minor formatting changes.

Corrected semantics (-> ≠ →), gave a code block language (sh) to have comments in code-block marked in gray and gave a title to a link.

Thanks for the fix.


⚠ Minecraft has degraded performance

In fb94745, Minecraft (https://www.minecraft.net) experienced degraded performance:

HTTP code: 200
Response time: 1563 ms

Resolved: Minecraft performance has improved in b7bac3b.


Does not work with SQL Server 2016

The HttpWebRequest returns the HTML for the Reporting Services Web Portal, not the report content, when using the sample code with SQL Server 2016.
I found the same issue reported in a MSDN forum. Based on the forum post, this sounds like an issue specific to SQL Server 2016. SQL Server 2014 is probably fine, though I have not tested it myself.

Using the ../Report path created a 401 error in my case.
But I also have seen the 404 error (and many 50x).
In my case the Variable ‘Report Server Folder’ was missing. The Variable should have the same name as the folder on the Report Server.

Today I have seen a similar effect while creating a regular Report Service launched from an Item.
When using Firefox, I only got the RSGateway.aspx as download result, but not the report content. I am quite sure, that this was different in the past. Chrome and IE gave me the direct (Excel)-file.


BIDS reader function

Write a function that you provide with a subject id and returns a dict with the full bids information about that subject (not only files, but also parameters)

Hi @rwblair, I think this is already solved in your settings. Do you think we can merge it?


Drop ModalRoot

None of the associated modals are used, each being defunct. And we're providing all existing modals independently. Seems we have little use for this component.

utACK
Ready to merge when you are


build: export adapter.h into include/opae/plugin

Install adapter.h so to facilitate the development of a project
implemeting a plugin.
Signed-off-by: Rodrigo Rojo<EMAIL_ADDRESS>

Coverage increased (+0.03%) to 65.363% when pulling e5b9164ac462eaefb0245b75196c492d75d283fb on rrojo/export-adapter into a55dd1eafea9195dec2608fdd1a238045963cd8d on master.


SELinux: httpd_sys_rw_content_t flag missing on docroot

Recently, SELinux support was added to the module, but it seems that the httpd_sys_rw_content_t flag was missed. This causes the Dispatcher module to not be able to create cache files / directories.
So I propose to add this to puppet-aem:
      File["/var/www/html"] {
        seltype => 'httpd_sys_rw_content_t',
      }

Because the docroot is owned and managed in the Apache module. That is where this flag should be set.

@bstopp True, the docroot is not managed by the Puppet-AEM module. But, the normal use-case for the docroot is to not have the Apache-software be able to write to it, so it will never be added in that module.
Now, that leaves only 2 options:

Let users of this module add it to their own code.
Add it to this module, so users don't have to worry.

In both cases, a change should be done in this module: either document that users with SELinux enabled need to set this flag in order for their Dispatcher to actually work. Or add this flag to the module, so users don't have to worry.
I think adding it to this module is better, since I think you would want to provide a complete and working solution. This is really an aspect of the way the Dispatcher module works and therefore should be added to this module.
WDYT?

I see what you mean now. I need to validate some assumptions before i push out a change. Can you please open this on the Adobe puppet-dispatcher module instead? That is where i'll publish an update.

I originally posted that i would be looking into this. But as i wrote it, i ran my test and what i thought would happen, happened.
Because Apache is managing the file for the docroot - my module cannot add/change parameters to that resource. If i attempt to modify the resource to add the seltype, the result is:

Error: Only subclasses can override parameters (file: /tmp/vagrant-puppet/environments/local/manifests/site.pp, line: 169) on node vagrant.aem

And since this module (or the Adobe Puppet-Dispatcher replacement) does not manage the vhost directory, or any of its parents. It still falls on that module or the individual consumers to set this flag.
My suggestion is to set manage_docroot to false on the Apache Vhost, and define the File resource directly in your containing profile.

What about this? https://github.com/adobe/puppet-dispatcher/issues/4

Can this issue be reopened? @bstopp

@henrykuijpers  - I added support for this in the new module. Here's the pr.
A release for that module is coming as soon as the Forge password is fixed.


Restructure Documentation

Update current documentation structure to the one proposed below:

Getting Started

Platform overview
Quick start guide
How to leave feedback on Bastyon
FAQs

Community and Support

Community guidelines
Support channels
Feature requests and bug reporting

Contribution Guide

How to contribute to Bastyon
Code of conduct
Development workflow

User Guide

Account setup and management
Using the social platform features
Messenger functionality
Authorship on Bastyon
Tutorials and How Tos
Troubleshooting

Architecture and Design

System architecture
Decentralization and blockchain integration
Security features

Developer Documentation

API reference
SDK documentation
MiniApps development guide
Best practices and examples
Tutorials

Documentation Roadmap
Documentation is not the goal in itself but rather a perpetual process of refinement  of what is being communicated to project participants or users. Nevertheless, there is a sequence of the execution that we can follow to build robust processes.

[ ] Assessment and Planning

[ ] Audit existing documentation
[ ] Identify key stakeholders and their needs

[ ] Create documentation channel and invite the stakeholders

[ ] Communicate to key stakeholders the expectations and the proposed changes
[ ] Get an agreement from stakeholders
[ ] Define documentation goals and metrics

[ ] Infrastructure Setup

[ ] Choose a new documentation platform (e.g., GitBook, ReadTheDocs, MediaWiki, etc ) that supports user feedback, or use the existing one.
[ ] Choose other tooling (We need something for translation, dead links scanner, etc)
[ ] Set up version control integration with feedback.
[ ] Establish a contribution workflow
[ ] Implement, "you make the change, you document the update" principle for developer community.

[ ] Content Creation

[ ] Develop a style guide
[ ] Create templates for different document types
[ ] Begin writing/updating core documentation sections

[ ] Review and Iteration

[ ] Implement peer review process
[ ] Gather user feedback
[ ] Continuously improve and update content

[ ] Launch and Promotion

[ ] Promote documentation through various channels

[ ] Maintenance and Expansion

[ ] Regular content audits and updates. Can we use some sort of tooling to identify dead links, etc?
[ ] Expand documentation based on user needs and platform growth
[ ] Create online groups for discussions related to documentation
[ ] Train community contributors

It looks amazing! I would reverse paragraphs 3 and 4


Add version: ransome1.sleek version 1.0.6

[X] Have you signed the Contributor License Agreement?
[X] Have you checked that there aren't other open pull requests for the same manifest update/change?

[ ] Have you tested your manifest locally with winget install --manifest <path>?
[X] Does your manifest conform to the 1.1 schema?

Microsoft Reviewers: Open in CodeFlow

@wingetbot run


Add proxy_abi_version_X_Y_Z

Please export proxy_abi_version_0_1_0() function, otherwise recent versions of proxy (including upcoming Istio Proxy 1.5.0) won't be able to load extensions written using this SDK.
See: https://github.com/envoyproxy/envoy-wasm/pull/438
@yuval-k @ilevine

Hi @PiotrSikora,
I think @yuval-k added that function already at: https://github.com/solo-io/proxy-runtime/blob/master/assembly/exports.ts#L13.
I'm just trying to help here. I'm studying the project you guys are working on and evaluating the language we should use to write our envoy filter HTTP plugin.
BTW, It would be great to hear your thoughts about it.
Thanks,
Mario

this was added. closing as solved; thank you @PiotrSikora and @mariopmartins


HTML Closing tag does not preserve indentation

When coding an HTML page I open the tag

        ...cursor is here

Then the cursor automatically goes inside the div, which is expected, but if I enter closing tag instead of this:

I'm getting thise:

Upon completion of a closing tag it goes back to the beginning of the line, not the right indentation of the object.

VSCode Version: 1.22.2
OS Version: Microsoft Windows 10 Home

I can't reproduce that with a bare VSCode. Do you have any extensions or installed? Maybe format-on-save enabled?

Hi,
Format-on-save is definitely false.
Extensions I have:
AgolaDark Theme
Apache Conf
Apache Conf Snippets
Egoist One
ESLint
Git Indicators
hihglight-matching-tag
IntelliSense for CSS class names
mssql
Paper-tmTheme
PHP Debug
PHP Extension Pack
PHP IntelliSense
PL/SQL
SQL Formatter
Stary any shell
but I haven't installed anything particular

Please try to reproduce with all extensions disabled and see if the issue reproduces:
See here for more information: https://github.com/Microsoft/vscode/wiki/Performance-Issues#run-with-extensions-disabled


Dependencies

Update dependencies and replace tar-rs fork with upstream version.

Coverage remained the same at 100.0% when pulling b24fbc023cd61bf3a5f517bb54820f78468df3ae on dependencies into 8e643b7987169edea8d32b819f3f29b2900ee2c6 on master.


Test/Fix launch pre-load and pickup and launch wing note Autons for Week 1

Blue/Red Subwoofer 1 wing 0 center
Blue/Red Amp 1 wing 0 center
Blue/Red Podium 1 wing 0 center

Duplicate


Travis improvements, PSR-4, small changes

Thanks :+1:
I made some updates regarding to your PR
https://github.com/NAYZO/NzoUrlEncryptorBundle/pull/20

Thank you @NAYZO!
Would you be open for a feature update to this repo: i'd like to implement an AES version with openssl?

@tgabi333
ok, send a PR, and I will check it out :+1:


Certificate Shadow Slots

According to the SPDM 1.2 specification (given below) the certificates returned by the Responder must be consistent with the negotiated ALGORITHMs, and apparently this also holds for 1.0 and 1.1, even though it was never explicitly stated in those specifications. libspdm does not comply with this, as it does not check the certificate type when processing a DIGESTS or CERTIFICATE response, technically making this a bug.

With the successful completion of the ALGORITHMS message, all of the parameters of the SPDM connection have been determined. Thus, all SPDM message exchanges after the VCA messages shall comply with the selected parameters in ALGORITHMS, with the exception of GET_VERSION and VERSION messages, or unless otherwise stated in this specification. To explain this behavior, suppose a Responder supports both RSA and ECDSA asymmetric algorithms. For an SPDM connection, the Responder selects the TPM_ALG_RSASSA_2048 asymmetric algorithm in BaseAsymSel and the TPM_ALG_SHA_256 hash algorithm in BaseHashSel. If the Requester on that same connection issues a GET_DIGESTS, the Responder returns TPM_ALG_SHA_256 digests only for those populated slots that can provide a TPM_ALG_RSASSA_2048 signature for a CHALLENGE_AUTH response. The Responder would violate this requirement if the Responder returns one or more digests of populated slots that perform ECDSA signatures or uses a different hash algorithm.

Unless otherwise stated in this specification and with the exception of GET_VERSION, if a Requester issues a request that violates one or more of the negotiated or selected parameters of a given connection, the Responder shall either silently discard the request or return an ERROR message with an appropriate error code.

it does not check the certificate type

Would you please be more specific on what check is needed?

That the public key algorithm of the leaf certificate returned in CERTIFICATE is the same as ALGORITHM.BaseAsymSel. Alternatively, this could be left entirely to the libspdm integrator; ie, after VCA the integrator determines the negotiated BaseAsymSel algorithm and only supplies certificates that are consistent with that algorithm.

Ah, this is early detection before digital signature verification in CHALLENGE_AUTH or KEY_EXCHANGE. In case there is issue, it can be found earlier.
We still need rely on final signature verification to prove the integrity of certificate.

Since this is now part of the specification, libspdm could force the integrator to specify the public key algorithm during libspdm_set_data(LIBSPDM_DATA_LOCAL_PUBLIC_CERT_CHAIN). libspdm would then check the slot's public key algorithm against BaseAsymSel during the DIGESTS and CERTIFICATE responses. This way libspdm can enforce the specification, rather than leaving it entirely to the integrator.


Plugins controlled by MV

I'm new to Github so i hope i got the right spot for this.
Hello first of all.
I'm Suroh
I got a question. A friend and I just rent a Server and we got multiple worlds running on the Server. Because he wants to use different plugins then i prefer we come to the problem, that every plugin is global. Is there a possibility to make plugins localized, so that they only work in chosen Levels?
I'm very confussed right now and need some help :O
Thanks

Unfortunately this definitely isn't something Multiverse controls, and if I remember right isn't really even possible. You might look into setting up a permissions plugin to deny access to different plugins depending on what world you're in.


StrictMode: TabContent uses componentWillReceiveProps

Issue description

components: TabContent
reactstrap version 6.0.1
import method es
react version 16.4.0
bootstrap version 4.1.1

What is happening?
TabContent uses componentWillReceiveProps.
What should be happening?
componentWillReceiveProps should be replaced with getDerivedStateFromProps or UNSAFE_compnoentWillReceiveProps: https://reactjs.org/docs/react-component.html#unsafe_componentwillreceiveprops
Steps to reproduce issue
Use TabContent in <StrictMode>.
Error message in console
Warning: Unsafe lifecycle methods were found within a strict-mode tree:

componentWillReceiveProps: Please update the following components to use static getDerivedStateFromProps instead: TabContent

Learn more about this warning here:
https://fb.me/react-strict-mode-warnings

I think this will be a breaking change since we support react 16.0.0 and getDerivedStateFromProps is new in 16.3.0. I don't think we can support both since we cannot remove componentWillReceiveProps unless getDerivedStateFromProps is supported, which means minimum version of 16.3.0 and we cannot leave it in there (AFAIK) without triggering that warning.

This is not a breaking change if you use react-lifecycles-compat.

@TheSharpieOne want to add react-lifecycles-compat?

Yeah, seems lightweight enough.


[Automation] Generate Fluent Lite from Swagger specification/workloads/resource-manager/Microsoft.Workloads/SAPVirtualInstance/readme.md#package-2024-09

[Automation] Generate Fluent Lite from Swagger specification/workloads/resource-manager/Microsoft.Workloads/SAPVirtualInstance/readme.md#package-2024-09

API change check
APIView has identified API level changes in this PR and created following API reviews.
com.azure.resourcemanager:azure-resourcemanager-workloadssapvirtualinstance


Duniverse v15.0.0

I've elected to make a new patch rather than re-apply the existing patches from previous versions because I found a few problems with them:

unnecessary dependency on uchar (redundant now that uucp depens on ocaml >= 4.03)
there was a rule to build the src/*_data.ml files with a dune rule but those generated files were also checked in
there was also a rule to download the support/ucd.xml file used to generate the above files but I don't think that's necessary since they are checked in

If I understand correctly you run ocaml pkg/pkg.ml build at package time and include the generated ML files. I assume this is to avoid a dependency on topkg? But maybe there is a way to generate these targets as part of a dune rule instead?

As with my port of uunf (https://github.com/dune-universe/uunf/pull/1) I checked in the result of the topkg command because it downloads a file (a zipped xml file) during the build and uses it to generate code. To avoid the download we could check in the xml file instead of the ml files and generate the ml files with dune rules, but I think if we're running a command as part of the porting process anyway it might as well be the command that generates the ml files as that would simplify the dune files.

I removed my changes to the gitignore. @Leonidas-from-XIV anything else I should change before merging?


Split Timeline in TimeSegment with fixed duration

I would like to be able to split a timeline in multiple TimeSegment with a specific Biz::Duration.
It's similar to partitioning a TimeSegment in multiple TimeSegments.
see : Lists.partition in Java
Biz.periods
  .before(Time.utc(2015, 5, 5, 12, 34, 57)).timeline
  .for(Biz::Duration.minutes(3_598))
  .each_slice(Biz::Duration.minutes(120)).to_a

#=> [#<Biz::TimeSegment start_time=2015-05-05 11:00:00 UTC end_time=2015-05-05 12:34:57 UTC>,
#  #<Biz::TimeSegment start_time=2015-05-05 10:00:00 UTC end_time=2015-05-05 12:00:00 UTC>,
#  #<Biz::TimeSegment start_time=2015-05-05 09:00:00 UTC end_time=2015-05-05 11:00:00 UTC>,
#  #<Biz::TimeSegment start_time=2015-05-05 08:00:00 UTC end_time=2015-05-05 10:00:00 UTC>,
#  #<Biz::TimeSegment start_time=2015-05-05 07:00:00 UTC end_time=2015-05-05 09:00:00 UTC>,
...]

I'm having trouble understanding your example. Shouldn't the returned time segments be non-overlapping?
Could you provide more information about your use case?

Yes,  you are right. At first, I was thinking about two values introducing duration and some king of lapping Mike half an hour our one hours in this case. But slicing together with after/before is enough to introduce this kind of behavior.
Nooverlapping is the way to go even if in fact I will be using it twice with two before space by half an hour.

I found a nice workaround using the configuration.
s = Biz::Schedule.new do |config|
  config.hours = {
    thu: {'10:00' => '11:00','11:00' => '12:00','13:00' => '14:00'}
  }
  config.holidays = [Date.new(2016, 1, 1),Date.new(2016, 7, 4),Date.new(2016, 11, 24)]
  config.time_zone = 'Europe/Paris'
end

s.periods.after(Time.utc(2015, 1, 10, 10)).timeline.until(Time.utc(2015, 1, 29, 10, 34)).to_a

[#<Biz::TimeSegment:0x007f948c8799c0 @start_time=2015-01-15 09:00:00 UTC, @end_time=2015-01-15 10:00:00 UTC>,
#<Biz::TimeSegment:0x007f94879f7e28 @start_time=2015-01-15 10:00:00 UTC, @end_time=2015-01-15 11:00:00 UTC>,
#<Biz::TimeSegment:0x007f94879f61e0 @start_time=2015-01-15 12:00:00 UTC, @end_time=2015-01-15 13:00:00 UTC>,
#<Biz::TimeSegment:0x007f94879f4188 @start_time=2015-01-22 09:00:00 UTC, @end_time=2015-01-22 10:00:00 UTC>,
#<Biz::TimeSegment:0x007f948c882638 @start_time=2015-01-22 10:00:00 UTC, @end_time=2015-01-22 11:00:00 UTC>,
#<Biz::TimeSegment:0x007f948c880b08 @start_time=2015-01-22 12:00:00 UTC, @end_time=2015-01-22 13:00:00 UTC>,
#<Biz::TimeSegment:0x007f9487a1eac8 @start_time=2015-01-29 09:00:00 UTC, @end_time=2015-01-29 10:00:00 UTC>,
#<Biz::TimeSegment:0x007f9487a1ce80 @start_time=2015-01-29 10:00:00 UTC, @end_time=2015-01-29 10:34:00 UTC>]

Cool! I'm glad you got it worked out.
I'm going to close this issue since I don't see anything actionable at the moment.


Fix typos & slightly improve code

Fix typos in Scope names and a method name.

Ugh, my bad - thanks for the fixes! Will include in the next release.


Ensure important journal data is persisted

What was wrong?
https://github.com/ethereum/py-evm/commit/f6ffc5e5f78557133f348074fb17be2f2bcc383d introduced a regression in which important data wasn't persisted anymore. (See #606)
How was it fixed?
This is a hacky way to resolve the issue in a short term manner by sprinkling two more persist() calls over the code paths that use the journal while we investigate a more robust way forward.
Cute Animal Picture

Let's wait a bit with this. I may have a less hacky solution brewing here: https://github.com/ethereum/py-evm/pull/610

I'm gonna close this for now as I personally would like to promote #610 (ready for review) as a better step into the right direction. If something with #610 turns out to be wrong I'll do the requested changes on this PR and reopen.


Don't fail on empty array

IMHO catch all exception and continue as usual. (display warning?)

fixed with #v0.2.0


Documentation: add a link to MOTIVATION.md

Hi !
In the README.md , I believe it could be cool to add a link to the file https://github.com/onivim/oni2/blob/master/docs/MOTIVATION.md
Actually there is no link into the README.md, therefore probably a reader could not read this very important document. Often a reader doesn't check the Github tree to see if under the folder doc there is a such important document !
Thanks in advance ;-)

Sounds good to me! Thanks for adding this @JulioJu 👍


⚠ ClamAV has degraded performance

In 4adb1b7, ClamAV (https://spamassassin.apache.org/) experienced degraded performance:

HTTP code: 200
Response time: 203 ms

Resolved: ClamAV performance has improved in 359a520.


How to check if user exists?

How to check if user exists?

How to check if user exists?

try:
     user=scratch3.get_user("probablynonexistentusername")
except scratch3.exceptions.UserNotFound:
     print("User not found")
     user=None

if user is not None:
     print("User's about me:", user.about_me)

How to check if user exists?

try:
     user=scratch3.get_user("probablynonexistentusername")
except scratch3.exceptions.UserNotFound:
     print("User not found")
     user=None

if user is not None:
     print("User's about me:", user.about_me)

thx


EPPlus core (Password)

PowerShell before 5 continue to use "net40", PowerShell Core use "netstandard2.0", fixes NET Core, EPPlus and -Password #1184

Maybe need more testing as dll are loaded differently and new dependencies dlls to see if it brake something?
Note that I tried at first EPPlus <IP_ADDRESS> but 2 tests failed (only on PS 5.1), not sure if problem with tests or EPPlus, anyway I left the version as it was (<IP_ADDRESS>)

Enabled tests, Windows Core password tests failed on Azure, run it again passed 🤷♂

Didn't dig into it, those are the 2 errors (only on 5.1) https://github.com/ili101/ImportExcel/runs/8623601775

@ili101 Thanks for putting this together. IIRC the last version of EPPlus introduced many issues. Need to come up with a broad UAT and burn in approach. Not sure if that'll happen.


Nothing is rendered

I am  reporting an issue.
I used this the Example Code from the API at
Artboard. I used the example and added a new folder in the examples folders.
Unfortunately it doesn't render a thing :(
Code:
import React from 'react';
import { render, Artboard } from 'react-sketchapp';

const Document = props =>
<Artboard
  name='My Artboard'
  style={{
    width: 480
  }}
>
  <Text>Hello world!</Text>
</Artboard>

export default (context) => {
  render(<Document />, context.document.currentPage());
}

Sketch version:
43.1
A Screenshot:

@KatGr a few things happening here:

if you're using skpm, you shouldn't need to set up babel or webpack! anything you add to webpack.config.js will override skpm's config, so you can just add the extra loaders (and you don't need json-loader since webpack@2 :))
I don't think style-loader / css will work right now (though I'd love to be proved wrong!) - see discussion in #29

I'd suggest commenting out your custom config until it starts working again, then carefull add things back in

I completly deleted the webpack config.
It still doesn't show anything :(

I found that having a .babelrc file will also result in nothing being rendered into Sketch.

@KatGr weird :( . can you upload a .zip of your folder?
@zmdavis that's to be expected - it will override skpm's default config. We're using babel-preset-airbnb & babel-plugin-add-module-exports - feel free to use a different config at your own risk!

Yep, not a problem -- I just thought it might be why @KatGr is still having trouble.  From her first screenshot it looks like she added a .babelrc file.

I deleted the .babelrc but it also didn't work. So i deleted the whole thing and cloned it again. No example runs on npm run render:

But the npm run link-plugin works fine  o.o
But now I need some loaders (Even if I am not sure if they are going to work), how can I add them as writing a completely new webpack.config.js wasn't the right way?

there is a space in your path WYSIWYG - Projekt, that's why is failing. @jongold, it's coming from https://github.com/jongold/run-sketch-plugin/blob/master/src/index.js#L12, probably need to wrap ${coscript} in double quotes or something

Sorry for the delay!
🐞  I published<EMAIL_ADDRESS>— if you try deleting your node_modules directory and reinstalling it should work
re: loaders — which ones?


⚠ ClamAV has degraded performance

In b995517, ClamAV (https://spamassassin.apache.org/) experienced degraded performance:

HTTP code: 200
Response time: 67 ms

Resolved: ClamAV performance has improved in 3f0db63.


Problem: .signInWithPopup -> Popup does appear but not load any content

Version info
Angular: 6.1.9.
Firebase: 5.5.1
AngularFire: 5.0.2
How to reproduce these conditions
Steps to set up and reproduce
I imported these packages
import { AngularFireAuth } from '@angular/fire/auth'; import { auth } from 'firebase/app';
and just called that function after clicking a button
 constructor(public afAuth: AngularFireAuth){} login() {     this.afAuth.auth.signInWithPopup(new auth.GoogleAuthProvider()).then(() => {     });   }
The Popup appears but after waiting a while it still shows no content .. Screenshot below

There are no errors in my console or in that from the popup
Expected behavior
Popup with Google Login
Actual behavior
Empty Popup

When using .signInWithRedirect it routes me to a correct google Login site but redirects me (of course) to the hosted site. So this would be a workaround but not suitable for development

Resolved: Problem was that Kaspersky blocked the scripts


Game Pass Browser - Include EA Play Games

If possible, add the ability to view the EA Play games that are included with Game Pass.

I wonder if the recent Xbox app update to allow searching for EA Play titles helps here?


Add a note indicating that corner radius will not show up in screensh…

Add a note indicating that corner radius will not show up in screenshots if hardware acceleration / clipToOutline is not supported (it may depend on rendering framework / screenshot framework). With robolectric+roborazzi, it doesn't seem to work currently (remoteviews use clipToOutline). However, one can use a emulator and take screenshot with hardware bitmap if they'd like corner radius to appear).

@secondsun PTAL


[VL] Set correct default spill strategy config in native

@zhztheplayer

The bug should start from 6.23 https://github.com/oap-project/gluten/pull/2370/files#diff-013353c1aa2ebe3f4c5c014b936dd52b2f91bef0a51421c1a901a57cac361f17R83


Correction: KB5025230 displayed in the wrong position

Incorrect line wrapping caused it to appear on the next line.

@lzw29107 - Thanks for the formatting fix!


Add soname to shared library

To enable easy use of the shared library by other applications, it would be helpful to add a soname.

This is kind of wrong forum for this kind of question. Since this project doesn't provide binaries(*), there is no opinion on how to name them. The question is rather if you have the freedom to choose one. I suppose it's about build.sh and you're free to pass an additional option, such as -Wl,-soname=youchoice, that will achieve the stated goal. In other words the tools are provided, it's up to you to use them :-)
(*) The primary targets are Go and Rust bindings where the library is distributed as source code.


Feature Request: Make the extension aware of Magento's extension attributes

Come up with a plan to make the PHPStan extension aware of defined extension attributes.

Hey there! Love the extension. I took a stab at handling extension attribute interface autoloading
https://gist.github.com/mattwellss/5b133af5cf69793d0953d5fa0087e6ea
My approach is not merge-ready, though...

When the DirectoryList is initialized, I'm providing '.' as the path, which is only correct when running phpstan from the project root.
It only handles ThingExtensionInterface. This might be no problem, since $thingInstance->getExtensionAttributes() is generally documented to return the interface rather than the class.
It adds dependencies on laminas/laminas-code and symfony/finder. Both of these are required by Magento, so they should be present, but I can understand wanting to find alternatives

Let me know what you think.

Awesome! Thanks for the kind word and thanks for starting to work on this.
Your approach is a bit different from what I had in mind but contains a few interesting bits that we may be able to re-use.
I think we need to have a bit more flexibility where the xml files are located since we have users that use our module for developing "just" a single module but also for developing a complete Magento project. Having seen all so many different directory layouts for Magento applications, I feel we can't define just one standard or recursively search through all existing directories as this would slow down the parsing. My original idea was to let the user define a list of paths where to look for the xml files, e.g. the location of the app/code directory and the location of the vendor directory. The PHPStan Symfony plugin does it in a similar fashion by letting the users define a path to the XML configuration.
I don't think we would actually need an additional autoloader. Ideally, we could get rid of it as this is a really hacky solution. I'd rather like to see an implementation of the PHPStan\Reflection\MethodsClassReflectionExtension similar to AbstractMagicMethodReflectionExtension and it's subclass DataObjectMagicMethodReflectionExtension. In the hasMethod() implementation we would need to check if the class in question contains the requested extension attribute. In the getMethod() implemenation we would return the PHPStan\Reflection\MethodReflection for the requested get/set method for the extension attribute.
If we go that route we should also figure out how to properly cache things so that we do not have to parse the xml files for each phpstan run. Maybe storing the information we need (name, type) in a JSON file for each found xml file to make sure file time expiry detection will properly work.
Looking forward to your feedback!

I think we need to have a bit more flexibility where the xml files are located since we have users that use our module for developing "just" a single module but also for developing a complete Magento project. Having seen all so many different directory layouts for Magento applications, I feel we can't define just one standard or recursively search through all existing directories as this would slow down the parsing

Great point! It's important to stay in the right mindset when I'm working on something that will be used in very different ways.
That said, I believe the existing logic does find every extension attribute relatively efficiently. With the most recent changes, the Finder looks for extension_attributes.xml files in each enabled/registered module's etc directory. This approach eliminates recursive search and finds declared extension attributes, wherever they might be.
My lack of experience may be showing, but I believe the developer experience is best when we avoid making users specify the paths to each extension attributes file. In my own case, that means specifying 43 paths.
Performance-wise, the current version adds about 100ms when checking a single files with phpstan (uncached). It's processing about 450 modules and 43 extension attributes configurations. This particular test case generates two extension attribute interfaces. Once the extension attributes are generated, the loader doesn't have an identifiable performance impact (as expected).
In a larger test (an entire module), I can't see a difference in performance when running uncached.
One lingering issue: when another extension attribute is added, there's no way to invalidate the cached class. It's not a problem for proxies and factories (which I copied), but extension attributes need more attention.

My bad for not responding earlier. Had to focus on some other things and then lost track of this issue.
Basically, we have to cover 4 use-cases:

module development

having PHPStan & our extension installed in the root composer.json of the module
having PHPStan & our extension installed elsewhere

Magento application development

having PHPStan & our extension installed in the root composer.json of the module
having PHPStan & our extension installed elsewhere

In my initial idea, I was thinking to find the respective XML files for the extension attributes recursively without relying on Magento's internal logic. Seeing your approach it feels like it makes more sense. I am just not sure if it works when you develop a module in isolation as the standard Magento configuration files would be lacking. That should be the first thing we have to test. I am fine to re-use existing Magento logic when we can, especially if that means we can ignore some additional caching in our extension :)
Anything else I could be of help to guide you to start working on the PR?

Excellent! I'm really busy for the next month or so, but I'll have time to focus on this once that's over with.
When I come back I'll follow whatever strategy (autoloading or reflection) is in use for factories/proxies, if that's OK.

OK, after a long delay I got back into this on Friday. My current challenge is ensuring phpstan can find the appropriate extension attribute interface.
Here's a summary of my explorations:
First I tried building a phpstan.broker.dynamicMethodReturnTypeExtension which "generates" an empty interface with eval. Subsequent calls to extension attributes interface instances are handled by a phpstan.broker.methodsClassReflectionExtension. That method can work, but I'd really like to avoid eval, which is why I looked into other paths
Next I tried implementing a custom PHPStan\Type\Type, which eliminates the need to have an actual interface. This seemed pretty neat until I checked some code that used a phpdoc annotation. The annotation prompts PHPStan to look for the interface, which doesn't exist and breaks its ability to analyse. Because of that limitation, I've basically tossed away this solution.
While eval isn't ideal, the first option still offers improvements over my earlier attempt, specifically as caching is concerned (newly introduced attributes don't require deleting the cache!). But before I move forward, I'm curious about your thoughts.

That's similar to my second implementation (though I built a class), and the issue of the actual interface being nonexistent remains, as far as I know. When I use my own non-interface-generating solution, I get this from PHPStan:
  447    PHPDoc tag @var for variable $orderExtension contains unknown class
         Magento\Sales\Api\Data\OrderExtensionInterface.
         💡 Learn more at https://phpstan.org/user-guide/discovering-symbols

I know it's not necessary to use a PHPDoc when the function itself properly documents its own return type, but it seems like something we ought to support. (And also, when we look to the future when Factories/Proxies will be handled in a similar way the issue becomes more pressing, since those classes are often used in constructor arguments)

Definitely. It's past time I integrated my WIP changes into a fork anyway. Stand by while I get something ready 😄

No worries, take the time you need. I am quite busy the next few weeks but I'll try my very best to support you so that we can get feature in soon. I know a few people eagerly waiting for this (no pressure!) :)

@mattwellss how are you progressing on this? Any help needed?

Sorry that I haven't followed up. Ran out of my "20%" time at work, but that's starting again soon. I've integrated the autoloader version (which generates a file in PHPStan's tmp directory) into our codebase already, and it's working great. At the very least I'll make sure to get those changes pushed to our fork (https://github.com/lacrossefootwear/phpstan-magento).
I still plan to switch away from that strategy to what we've discussed, but I got stuck in some metaphorical weeds. I'll also get that branch published once it exists.

Good to hear & good to know that things are working fine in your fork. I might start experimenting with my approach in the next few weeks, will let you know here about the results maybe we both can drive this forward.

I was about to create an issue and found this existing one :) We stumbled upon this while using:

Magento\InventoryApi\Api\Data\SourceInterface::getExtensionAttributes
Magento\InventoryApi\Api\Data\SourceExtension / Magento\InventoryApi\Api\Data\SourceExtensionInterface
Magento\InventoryApi\Api\Data\SourceExtensionInterfaceFactory

Pretty sure your implementation will handle this, but maybe it is interesting seeing a real-world core use case anyway :)
Thanks!

@sprankhub I've gotten a lot from that page in the past, thanks for linking to it!
I'm back on this as of a couple days ago! Working on the "dynamic method return type extension" version. With checkNullables and checkUnionTypes turned on in the phpstan configuration file, code like this triggers warnings:
foreach ($itemsToUpdate as $itemToUpdate) {
    /** @var \Magento\Sales\Api\Data\OrderItemInterface $itemToUpdate */
    $extension = $itemToUpdate->getExtensionAttributes();
    $shipDates = $extension->getShipDates();
    $shipDate = $this->shipDateFactory->create();
    $shipDate->setShipDate(new \DateTime($stockAvailabilityDate));
    $shipDates[] = $shipDate;
    $extension->setShipDates($shipDates);
    $itemToUpdate->setExtensionAttributes($extension);
}

In this case, ship_dates is a custom extension attribute in our shop. The phpstan output looks like this (level 5, with the two aforementioned additional checks enabled):
 ------ ---------------------------------------------------------------------
  Line   ToOrderItem.php
 ------ ---------------------------------------------------------------------
  43     Cannot call method getShipDates() on
         Magento\Sales\Api\Data\OrderItemExtensionInterface|null.
  47     Cannot call method setShipDates() on
         Magento\Sales\Api\Data\OrderItemExtensionInterface|null.
  48     Parameter #1 $extensionAttributes of method
         Magento\Sales\Api\Data\OrderItemInterface::setExtensionAttributes()
         expects Magento\Sales\Api\Data\OrderItemExtensionInterface,
         Magento\Sales\Api\Data\OrderItemExtensionInterface|null given.
 ------ ---------------------------------------------------------------------

This looks pretty great so far! I've built a DynamicMethodReturnTypeExtension that returns a new class extending ObjectType. In order to avoid "unknown class" errors, I return \Magento\Framework\Api\ExtensionAttributesInterface as the return value of getClassName, but use the real interface name otherwise.
This approach fails when the real extension attributes interface name is specified in a @var tag:
foreach ($itemsToUpdate as $itemToUpdate) {
    /** @var OrderItemExtensionInterface|null $extension */
    $extension = $itemToUpdate->getExtensionAttributes();
    $shipDates = $extension->getShipDates();
    $shipDate = $this->shipDateFactory->create();
    $shipDate->setShipDate(new \DateTime($stockAvailabilityDate));
    $shipDates[] = $shipDate;
    $extension->setShipDates($shipDates);
    $itemToUpdate->setExtensionAttributes($extension);
}

Here's (part of) the PHPStan result:
 ------ ---------------------------------------------------------------------
  Line   ToOrderItem.php
 ------ ---------------------------------------------------------------------
  43     PHPDoc tag @var for variable $extension contains unknown class
         Magento\Sales\Api\Data\OrderItemExtensionInterface.
         💡 Learn more at https://phpstan.org/user-guide/discovering-symbols

I believe we'll still have to implement an autoloader (or something similar, like aliases) in order to prevent this.
@shochdoerfer what do you think?

@mattwellss thanks for picking things up again! I was not aware of the class generation in the background, I somehow had "just" the XML config in mind. So yes, if Magento generates classes, we need to generate them also and use a custom autoloader to load them so that PHPStan is properly aware of them.

@sprankhub thanks for sharing the link, that makes things a lot clearer to me. Looks like after all those years I still underestimate the Magento magic happening in the background :P

Cool, in that case I can clean up my extension attributes autoloading code that's already in use. Unless something goes awry at work I should be able to open a PR next week!

Here's a start! A lot of clean up is warranted (I had to prevent verification steps on both commit and push 🙊)
https://github.com/bitExpert/phpstan-magento/compare/master...lacrossefootwear:feature/extension-attributes-autoloading?expand=1

@sprankhub if you people want to give this a try, install the dev-master version or wait until the release is done.

Hi guys - thanks for adding this feature.
We've been running 0.11.0 in a CI pipeline, and had seen previously added some errors relating to extension attributes to a baseline file.
For example, analysing this class: https://github.com/dotmailer/dotmailer-magento2-extension/blob/master/Ui/DataProvider/WebBehaviourTracking.php (level 2) we had:
------ ---------------------------------------------------------------------
  Line   Ui/DataProvider/WebBehaviourTracking.php
 ------ ---------------------------------------------------------------------
  91     Call to method setDdgSku() on an unknown class
         Magento\Catalog\Api\Data\ProductRenderExtensionInterface.
         💡 Learn more at https://phpstan.org/user-guide/discovering-symbols

Now, using 0.13.0, we get:
  91     Call to an undefined method
         Magento\Catalog\Api\Data\ProductRenderExtensionInterface::setDdgSku().

Weirdly, although the pipeline complains, I can't reproduce the error in any of my local Magentos.
So:

Do you have any idea what might explain the discrepancy in behaviour between a brand new env and an existing one (stale cache of some kind?)
What's the best way of resolving the error itself?

@sta1r are you testing a stand-alone Magento module or a Magento application? I assume you try to test a stand-alone module. In that case, the current behavior is "ok" as the new extension attribute handling that was added in 0.13.0 only works for Magento applications. There's an additional PR open #174 which will fix this. Feel free to test #174, would love to get your feedback if it works for you.
Not exactly sure why it fails in CI but not on your local install. Are you sure that in both cases the same version of the extension is used? Ideally, you'd clean the phpstan cache in both CI and locally to see if this gets you any further.

I'm testing a stand-alone module, so that now makes sense - thanks. I've cleared the result cache locally (CI is a fresh env each run) but the CI errors are still not reported. I've reverted to 0.11.0 in CI for now, and will re-check when 174 is released. I can't really test it I guess because I can't make the failures happen locally.

@sta1r we have just released 0.14.0 (compatible with PHPStan 1.2) and 0.15.0 (compatible with PHPStan 1.3). Both versions include the adaptions to make the extension attributes feature work for standalone Magento modules. If you run into problems, open a new issue.

Just to add, relating to my comment above - I no longer get e.g.
------ ---------------------------------------------------------------------
  Line   Ui/DataProvider/WebBehaviourTracking.php
 ------ ---------------------------------------------------------------------
  91     Call to method setDdgSku() on an unknown class
         Magento\Catalog\Api\Data\ProductRenderExtensionInterface.
         💡 Learn more at https://phpstan.org/user-guide/discovering-symbols

but I do still get:
------ ------------------------------------------------------------------------------------------
  Line   Ui/DataProvider/WebBehaviourTracking.php
 ------ ------------------------------------------------------------------------------------------
  87     PHPDoc tag @var for variable $extensionAttributes contains unknown class
         Magento\Catalog\Api\Data\ProductRenderExtension.
         💡 Learn more at https://phpstan.org/user-guide/discovering-symbols
  87     Variable $extensionAttributes in PHPDoc tag @var does not exist.

It appears from the comments posted earlier in this thread that this potentially ought to be resolved, but not sure.
Again this is when testing this class using:
vendor/bin/phpstan analyse -l 2 app/code/Dotdigitalgroup/Email/Ui/DataProvider/WebBehaviourTracking.php

@sta1r the error shows up because the Magento\Catalog\Api\Data\ProductRenderExtension class does not exist. I could not find it in the Magento_Catalog module, so I guess the docblock comment is just wrong and would need to be fixed. Can you confirm that or am I missing something?

Magento\Catalog\Api\Data\ProductRenderExtension is generated by the autoloader. It's as per the answer at https://magento.stackexchange.com/a/93384/142:

All autogenerated classes are always based on another classes, in case of factory, source class name is calculated just by removing Factory suffix, it will be Magento\Quote\Api\Data\CartItemExtension. This class does not exist and autogeneration is invoked once again by autoloader, but this time for Extension class

I just figured that potentially that was something @mattwellss had addressed.

@sta1r my bad, thanks for pointing out. Looks like generating the classes for the "Extension" suffix is the missing link then. That does currently not work.


Add optional use-octavia flag to OpenStack cloud config

What this PR does / why we need it:
This PR adds the use-octavia flag to the OpenStack cloud config, this is a pre-requisite for:https://github.com/kubermatic/kubermatic/issues/6309
Which issue(s) this PR fixes (optional, in fixes #<issue number> format, will close the issue(s) when PR gets merged):
Fixes #
Special notes for your reviewer:
Optional Release Note:

NONE

/approve
/lgtm

/approve
/lgtm

/retest

/retest

/test pull-machine-controller-e2e-azure

/test pull-machine-controller-e2e-azure


DELIA-43118:[ThunderProxy][ContinueWatching]-ContinueWatching Proxy I…

…ssues
Reason for change: Modify CW plugin to return results & data in the same format as SM
Test Procedure: Refer Ticket
Risks: Medium
Signed-off-by: Anooja Kurian<EMAIL_ADDRESS>(cherry picked from commit b75846695c877f814879c8c4b9005e5d7dd47173)

https://jenkins.code.rdkcentral.com/job/github-triggered/3444/ started

https://jenkins.code.rdkcentral.com/job/build-component-rdk-next/20617/ started.

Smoke tests for ['build-rpi-hybrid-wpe-rdk-next'/'build-rpi-mc-wpe-rdk-next'] added.
https://jenkins.cmf.code.rdkcentral.com/job/test-components-flow/62691/

Smoke tests for ['build-rpi-hybrid-thunder-rdk-next'] added.
https://jenkins.cmf.code.rdkcentral.com/job/test-components-flow/62692/

Smoke tests for ['build-qemux86-hyb-rdk-next'/'build-qemux86-mc-rdk-next'] added.
https://jenkins.cmf.code.rdkcentral.com/job/test-components-flow/62689/

Smoke tests for ['build-rpi-hybrid-refapp-rdk-next'] added.
https://jenkins.cmf.code.rdkcentral.com/job/test-components-flow/62690/


Correct and clarify List fillRange() docs

I encountered two problems with List's fillRange() documentation. The first is a docs error, the second is a request for clearer docs.
(1) The documentation reports the following signature, including the extra bracket:
void fillRange (int start, [int end, [E fillValue])
This should instead read:
void fillRange (int start, int end, [E fillValue])
(2) After reading the docs twice, I still went off assuming that the range was start through end, inclusively. I had to think a little to figure out what was implied by "The range starts at start and has length end - start" before I could finally correct the problem in my code.
I'm thinking the docs could be clearer by saying that the range spans from the start index through the end index but "excludes" the end index.
Before figuring this out I was ready to post an issue saying that end was a 1-based index, despite start being 0-based.
For reference, the following code:
void main() {
  final list = ['a', 'b', 'c', 'd'];
  list.fillRange(1, 3, 'X');
  list.forEach((v) => print(v));
}

Outputs this:
a
X
X
d

Confirmed in Dart 2.6.1 via DartPad.

Thanks for the report. The first issue is tracked at https://github.com/dart-lang/dartdoc/issues/2082.
The second issue seems like a valid request to me, and would apply to getRange, removeRange, and replaceRange as well. I think we use better verbiage in other docs... List.sublist is maybe a little better. String.substring is much less verbose.

I also encountered a problem with fillRange: if you try to use it with a list (filling a list of lists of arbitrary length) it doesn't make a new list for each entry, but instead passes the pointer to a single list.
eg:
List<dynamic> mylist = List(3);
mylist.fillRange(0, 3, List(3));

The above will result in a list of lists, but each item within the list is actually the same item.
So if I try
mylist[0][0] = 1;
It results in
[[1, null, null], [1, null, null], [1, null, null]]
instead of the expected
[[1, null, null], [null, null, null], [null, null, null]]
I'm not sure this is intended; if it is I think the documentation should say it works this way, as it took me a while to find out where the problem was.

Hi @nicoroy2561 , thanks for reporting this issue; the issue you are encountering is separate from this issue though, so please file a new issue for it.