[RFC] TorchVision with Batteries included - Phase 1

🚀 Feature
Note: To track the progress of the project check out this board.
Add popular primitives (Losses, Schedulers, Data Augmentations, Operators etc) which are often used to reproduce SOTA references and new popular highly accurate models with pre-trained weights to TorchVision.
Motivation
Though TorchVision currently includes many common building blocks necessary for training CV models, it currently lacks popular primitives which are often used to reproduce SOTA. Some of these primitives are part of our reference scripts (Data utils, transforms etc) because previously did not want to commit to a specific API. Others are part of libraries from the broader ecosystem. Additionally, it does not provide some of the newer, popular architectures which currently achieve good results in a variety of vision tasks.
Adding support of such primitives and models to TorchVision will give a “batteries included” experience to its users. Researchers will be able to do SOTA research and reproduce papers by using common building blocks rather than rewriting their own while industry users will be able to adapt easier the models in their domains using SOTA techniques.
Pitch
The addition of primitives should be done in several phases, iterating between trying to reproduce SOTA recipes, identifying accuracy gaps and implementing the necessary methods to close them. The progress of this project is tracked on this board.
During phase 1, add to TorchVision the following primitives and models:

Losses #2980:

[x] LabelSmoothing Loss https://github.com/pytorch/pytorch/pull/63122
[x] SoftTarget CrossEntropy https://github.com/pytorch/pytorch/pull/61044

Schedulers:

[x] ChainedScheduler https://github.com/pytorch/pytorch/pull/63491 https://github.com/pytorch/pytorch/pull/63457 https://github.com/pytorch/pytorch/pull/65034
[x] ConstantLR and LinearLR for warmup https://github.com/pytorch/pytorch/pull/64395
[x] SequentialLR https://github.com/pytorch/pytorch/pull/64037 https://github.com/pytorch/pytorch/pull/65035

Models #2707:

[x] EfficientNet (B0 to B7) #4293
[x] RegNet #4403
[x] ViT #4594

Data Augmentations #3817:

[x] RandAugment #4348
[x] TrivialAugment #4221
[x] MixUp #4379
[x] CutMix #4379

Operators:

[x] Stochastic Depth #4301
[x] masks_to_boxes operator #4290

Training Recipes:

[x] EMA model support #4381 #4406 #4408
[x] Updated reference scripts #4335 #4411 #4444 #4493

Other potential primitives to be considered during phase 2:

Barron loss see classy_vision.
Augmix + JSD loss
FastAutoAugment
Large Scale Jitter
AutoDropout Layer
DropBlock Layer
DropConnect Layer
ShakeDrop Layer
Random Noise LR Scheduler

Note that any of the suggested primitives that are not vision-specific should be added on PyTorch, so that all Domain libraries can benefit from them.
cc @vfdev-5 @fmassa @oke-aditya @jbschlosser @iramazanli

Adding one little bit. There have been such approaches to create batteries loaded libraries on top of torchvision.
We might as well take inspirations, motivations and add features that can be useful.

Lightning bolts: -

This uses PyTorch Lightning.
One can easily train and fine-tune models on distributed machines by simply inheriting classes.
This saves lot of time of rewiring distributed scripts and facing issues.
E.g. FRCNN Training script.
Also it is much easier to configure backbones, it provides easier API.

Kornia

Well this has lot of features. I will highlight few important ones. Kornia is more like Open-cv with PyTorch.
kornia.augmentations
This includes augmentations like in torchvision. But it also supports 3D transforms.
We can compare which could be useful additions to torchvision.
kornia.color
This provides common conversions for color scalse (rgb, hsv, bgr, grayscale, yuv, etc). This might be useful since torchvision.io can handle many image types.
kornia.feature.
This is very similar to torchvision.ops providing 2D, 3D NMS. Also it has few classical computer vision algorithms such as SIFT, harris corner, Shit-tomasi etc.
An interesting thing is Matching algorithms, which are used in say image similarity search, siamese networks, etc.
kornia.losses.
A loss functions module. Providing both functional as well as class based losses. This can be useful.
Some not very useful traditional CV features
kornia.geometry.
This reminds me of camera calibration! It helps to calculate epi-polar co-ordinates, fundamental matrix, etc.
Mostly used in traditional CV algorithms for structure to motion. (E.g. optical flow? Image Pyramids?)
kornia.morphology.
Traditional CV algorithms for morphological operations.
Here is kornia's future roadmap

A higher level training API torchvision would be nice.
Most people want to just fine-tune their models, create baselines using torchvision. (We can discuss this in separate issue too)

+1 from me.
Maybe there should be an experimental namespace where we can refine the API over time before promoting features to stable.

Any thoughts about adding different types of IoU metrics such as DIoU (Distance IoU) and CIoU (Complete IoU)
Refer paper
The above paper mentions some benefits in training with FRCNN, SSD and YOLOv4.
These are now used by YOLOv5
This was earlier asked in #3026 #2545
Probably these two operations are more mature now to be included?

@oke-aditya I just realized I haven't responded. Apologies for that.
I agree we should explore the ideas you added. I know you have separate issues for all of them, so let's track them there. Happy to move them to Batteries Included once the first set of primitives is added. Some additional discussion will be necessary to prioritize but we'll do this when it's time to review additions.

Hey, now worries @datumbox  :smile: You are doing an awesome work, and batteries included is a great initiative :+1:
Let me know if there are any features that I could work on. Maybe ones that are not critical or timeline specific so that it won't hinder overall development.

@oke-aditya I'm currently collecting feedback from various research teams at FB to see which other operators are worth including. I will definitely let you know once things become clear; I just want to make sure you won't work on something that we later feel shouldn't be added. Any case if you want to have an early look, check out the DropBlock paper.

I recommend adding Large Scale Jitter data augmentation as well. It is quite simple and powerful. It has shown promise across many use cases. Here is an implementation in D2:
https://github.com/facebookresearch/detectron2/blob/main/configs/new_baselines/mask_rcnn_R_50_FPN_100ep_LSJ.py#L44
Some benchmark results:
https://github.com/facebookresearch/detectron2/blob/main/MODEL_ZOO.md#new-baselines-using-large-scale-jitter-and-longer-training-schedule

Oof! I feel bad! This is shaping up to be a great release.

@vaibhava0 Thanks for the proposal. You are right, this is quite important. We have it on the https://github.com/pytorch/vision/issues/3817 but I'll add it here more prominently (I also added the code and the benchmarks links you provided).
@0x00b1 Your contribution can still make it in. tap tap tap ⌨  🚀

Any thoughts about adding different types of IoU metrics such as DIoU (Distance IoU) and CIoU (Complete IoU)
Refer paper

CIoU and DIoU have been added to Detectron2
https://github.com/facebookresearch/detectron2/blob/dfe8d368c8b7cc2be42c5c3faf9bdcc3c08257b1/detectron2/layers/losses.py#L66

Batteries Included - Phase 1 is now concluded! I believe we have successfully refreshed TorchVision library to support the Classification use-case and we have managed to refresh all of the popular pre-trained models of the library.
I'm going to close this ticket and start scoping Phase 2, which will focus on the Detection and Segmentation use-cases. Massive thanks to all of the people who contributed to this project either by implementing primitives, adding models or training new weights. I'll follow up with a new RFC for phase 2 and start outlining next steps so that we can get the feedback from the community.

Will Mixup and CutMix be added to torchvision.transform and when?  #4379

@xiaoyuan0203 that's the plan. We have untested implementations on prototype. We are working to finalize the API, document them and start testing them. I don't recommend them yet for production use-cases, but we will make sure to post an update when our confidence in them is increased.


App is crashing in older versions of android(like jelly bean)

Steps to reproduce:
create a project using match template
run simulator
click on check answers
(or)
generate apk for match template project
install and run it
@opticod if possible see if this is the same in any other versions of android devices too

@opticod , any views on this bug? i feel this needs to be included in dec release.

Thanks.

@opticod I have already sent a pr for this. But let's wait for croozeus's review on #310 . Because if that get's mergerd, this issue wont occur.

@iit2014086, Merged #334 for time-being. For multiple match the followings as mentioned in #310, Lets wait for @croozeus 's review.


TCAM_INSTALL_FORCE_PREFIX not honoured throughout?

Hello,
I'm trying to build and install tiscamera into my own defined install prefix, the option to do so is to define TCAM_INSTALL_FORCE_PREFIX=ON while configuring the build process, which works, however, not for all install targets (see screenshot below):

Looking at tiscamera/CMakeInstall.cmake, while the CMAKE_INSTALL_PREFIX are working for installing libraries, headers, udev rules ... when it came to installing gstreamer, gobject the CMAKE_INSTALL_PREFIX is no longer honoured. The line 125 - 166 should be working but it isnt when you do a print_install_overview() in L159 of CMakeLists.txt?
Thanks

Hi,
What does your cmake command look like?
Using:

cmake -DCMAKE_INSTALL_PREFIX=/tmp -DTCAM_INSTALL_FORCE_PREFIX=ON ..

I get the expected output .

-- Build gstreamer-1.0 plugins:   ON
-- Support for GigE via aravis:   ON
-- Support for USB cameras:       ON
-- Support for LibUsb cameras:    ON
-- Build additional utilities:    ON
-- Build documentation            ON
-- Build tests                    OFF
--
--
-- Installation prefix:                 /tmp
--
-- Installing binaries to:              /tmp/bin
-- Installing libraries to:             /tmp/lib
-- Installing header to:                /tmp/include
-- Installing udev rules to:            /tmp/lib/udev/rules.d
-- Installing systemd units to:         /tmp/lib/systemd/system
-- Installing uvc-extensions to:        /tmp/share/theimagingsource/tiscamera/uvc-extension
-- Installing desktop files to:         /tmp/share/applications
-- Installing data files to:            /tmp/share/theimagingsource/tiscamera
-- Installing documentation to          /tmp/share/theimagingsource/tiscamera/doc
-- Installing gstreamer-1.0 to:         /tmp/lib/gstreamer-1.0
-- Installing gstreamer-1.0 header to:  /tmp/include/gstreamer-1.0
-- Installing gobject-introspection to: /tmp/share/gir-1.0
-- Installing introspection typelib to: /tmp/lib/girepository-1.0

Are you using a different version from current master(1.0.0)?

Hi I believe I'm using the latest commit d9ada738:

Checking out to v-tiscamera-1.0.0 branch seems to yield the same results

Hmm, I am also on d9ada738 and I get the expected result.
Can delete the cmake cache before calling the cmake command?
Simply 'rm -rf ./*' in the build directory. Caching in cmake can be wonky at times....

Ah, thanks for the tip. That seems to have solved my problem 🤦🏻♂. Sorry for the issue


Bug:  Pre-Rolls no longer updating in v1.14.x (Works in v1.13.3)

Describe the Bug
The prerolls have been updating correctly, however sometime between 12/24 and now they have stopped updating, seems like something in the new builds have broken this feature. (or plex update broke this)
Relevant Collection Config
my movies.yml file has not been changed, the only thing that has changed is the docker had been updated
Plex Meta Manager Info
Version: 1.14.1
Link to logs (required)
log shows it should have been added but did not.
meta.log

Can confirm that in 1.14.0 and 1.14.1 this feature is broken, I have downgraded docker to 1.13.3 and it works again. Upgraded and it no longer works, downgraded again and it works.

should be fixed in develop

It is working in develop1522 but it does not respect templates

can you elaborate what you mean?

It will ignore the schedule when done this way
templates:
  Prerolls:
    build_collection: false
    server_preroll: <<videos>>
collections:
  Spring:
    template:
      name: Prerolls
      schedule: range(03/01-05/31)
      videos: "/preroll/spring.mp4"
  Summer:
    template:
      name: Prerolls
      schedule: range(06/01-08/31)
      videos: "/preroll/summer.mp4"

thats because thats not how it works you're trying to add a template variable called schedule and then you don't use it.
templates:
  Prerolls:
    build_collection: false
    server_preroll: <<videos>>
collections:
  Spring:
    schedule: range(03/01-05/31)
    template:
      name: Prerolls
      videos: "/preroll/spring.mp4"
  Summer:
    schedule: range(06/01-08/31)
    template:
      name: Prerolls
      videos: "/preroll/summer.mp4"

or
templates:
  Prerolls:
    build_collection: false
    schedule: <<schedule>>
    server_preroll: <<videos>>
collections:
  Spring:
    template:
      name: Prerolls
      schedule: range(03/01-05/31)
      videos: "/preroll/spring.mp4"
  Summer:
    template:
      name: Prerolls
      schedule: range(06/01-08/31)
      videos: "/preroll/summer.mp4"

or for even smaller
templates:
  Prerolls:
    build_collection: false
collections:
  Spring:
    template: { name: Prerolls }
    schedule: range(03/01-05/31)
    server_preroll: "/preroll/spring.mp4"
  Summer:
    template: { name: Prerolls }
    schedule: range(06/01-08/31)
    server_preroll: "/preroll/summer.mp4"

tbh not sure why you're bothering to create a template variable for videos when you could just do server_preroll

Understood so me just being dumb. Ty sir


APEXCORE-536 #resolve Upgrade Hadoop dependency version from 2.2.0 to 2.6.0

@tweise please merge if you're okay with the changes.

Looks good. Please test on dev cluster.

Have tested pi demo with this on a cluster. It does not have a problem.

@tweise The voting has concluded and we can move forward now. Please merge when you have a chance.


chore: update prod vault

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


Server silently accepts ClientHello messages with invalid Extension lengths

While playing with the OpenSSL server (version 1.0.2a), I found out it is possible to send ClientHello messages with invalid extension lengths where the extension length is larger than the amount of the extension data. If the server receives such a ClientHello message, it correctly omits further extension processing. However, it does not return any decoding error and proceeds with the handshake.
Even though this does not lead to any security vulnerability, I believe returning a decoding alert would be a correct practice (or is there any compatibility reason for not returning such an alert?)
I believe, this issue should be fixed here:
https://github.com/openssl/openssl/blob/master/ssl/t1_lib.c#L1941

Just to note this behavior was changed in this commit

This was fixed a while ago in d27259927. Closing.


Is it possible to redirect to Verify with the Welsh language option immediately enabled?

You can set Verify to display in Welsh from the sign-in page, but I can't find anything relating to the Welsh language options either in passport-verify or in the actual Verify documentation.
One service I found that is available in Welsh and uses Verify is https://www.gov.uk/check-income-tax-current-year but if you put it into Welsh and then go to Verify, it puts it back into English, so it looks like maybe it's not possible at the moment?
Thanks

I received a response from Verify, saying to put an extra field in the form:
`

`
This is the form that is rendered by createSamlForm() in saml-form.ts. It looks like I can provide a custom .njk template when calling createStrategy. However, this won't then have access to any session variables for the current user, so knowing what language to use is a bit fiddly.

I solved it by overriding Express's render method in a middleware to pass the language variable to all views:
(req, res, next) => {
  const render = res.render;

  res.render = (view, options, callback) => {
    options.lang = req.session.lang;

    return render.call(res, view, options, callback);
  };

  next();
};

Then I copied the HTML code from saml-form.js to a .njk file and just added the extra language field.


setuptools-conda build fails with error: invalid command 'dist_conda' when setuptools v60.0.0+ is installed.

When setuptools-conda runs with setuptools v60+ installed, it should prevent the error below by exporting SETUPTOOLS_USE_DISTUTILS=stdlib
Build fails
setuptools-conda build .
usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
    or: setup.py --help [cmd1 cmd2 ...]
    or: setup.py --help-commands
    or: setup.py cmd --help
.....
error: invalid command 'dist_conda'
.....

Build suceeds
SETUPTOOLS_USE_DISTUTILS=stdlib setuptools-conda build .

Alternatively, the gotcha should be documented in the installation section.

Thanks for the bug report!
Will investigate whether there's a more kosher way to achieve the same thing - if setuptools is deprecating old behaviour that has to be manually reenabled, perhaps they have some alternative in mind.

Should be fixed in ab2ece07ffe2b5f527bbf06c4dae4956c1c9fc9cm, released as v0.11.1.
Am for now adding the dist_conda command both to the stdlib distutils and the one vendored by setuptools, so setuptools_conda should work whichever one is in use.


Localization - Burundi - DTP - HepB - Hib is called Pentavalent, extra dose of DTP [8h]

Issue
Followinf #920
In Burundi context, the combo vaccine for DTP - HepB - Hib is named Pentavalent
In addition there is an extra (4th dose of DTP only) at 18 months
Tasks

Rename the combo vaccine in Burundi context (keep the icon)
Add new vaccine called DTP for one dose at 18 months. It should only appear after 3 doses of Pentavalent and with a minimum 28 day interval from the last Pentavalent dose.

@adamhstewart

In Burundi context, the combo vaccine for DTP - HepB - Hib is named Pentavalent

Ok, that makes sence. These are the details for Pentavalent (5 diseases):

Looking at current implementation however, seems that Hib disease is missing:

Why is that? Should we fix it?

In addition there is an extra (4th dose of DTP only) at 18 months

I suppose that DTC4 from #920 is the (4th dose of DTP only).
This is new type of vaccine we'll have to introduce. I suppose it handles 3 diseases - Diptheria, Tetanus, Pertusis. I'll addapt the forms accordingly.
Note that we need to add it for 2 types of encounters - Child Scorecard and SPV.
So, only the activities infra will require ~6h.

Why is that? Should we fix it?

I'll ask - but let's not deal with that here.

I suppose that DTC4 from https://github.com/TIP-Global-Health/eheza-app/issues/920 is the (4th dose of DTP only).

Yes, it's a Typo - it should be DTP (the 4 is for the fourth dose , as DTP is included in Pentavalent).

So, only the activities infra will require ~6h. In total, I suppose it will at least require 12h.
OK to bump

https://qa-vhw.pantheonsite.io/app/
QA Review
Found issues:

Typo in Diphteria

Checked and approved:

Pentavalent displays correctly for Burundi. See image above.
DTP - HepB - Hib displays correctly for other environment


Json request seems empty

Describe the bug
Hi, i dont know why my request seems empty. Is the server down or is the problem between my chair and my screen?
I feel sorry to bother you i am not a programmer...
Here is the code, i took it raw from the example
from future import division, print_function, absolute_import
from gurunudi import AI,lang
ai = AI()
response=ai.chat('who wrote anna karenina?') #Here is the error
print(response)
response=ai.chat('qui a écrit anna Karenina?',lang.FRENCH)
print(response)
Here is my error:
Traceback (most recent call last):
File "chatbotv8.py", line 15, in
response=ai.chat('who wrote anna karenina?')
File "C:\Users\Yann\AppData\Local\Programs\Python\Python38-32\lib\site-packages\gurunudi\ai.py", line 56, in chat
return self.__call_api(constants.API_CHAT,{constants.FIELD_TEXT:text,constants.FIELD_LANG:lang})
File "C:\Users\Yann\AppData\Local\Programs\Python\Python38-32\lib\site-packages\gurunudi\ai.py", line 254, in _call_api
json=response.json()
File "C:\Users\Yann\AppData\Local\Programs\Python\Python38-32\lib\site-packages\requests\models.py", line 898, in json
return complexjson.loads(self.text, **kwargs)
File "C:\Users\Yann\AppData\Local\Programs\Python\Python38-32\lib\json_init.py", line 357, in loads
return _default_decoder.decode(s)
File "C:\Users\Yann\AppData\Local\Programs\Python\Python38-32\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\Yann\AppData\Local\Programs\Python\Python38-32\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

facing the same issue when using ai.inent()

---------------------------------------------------------------------------
JSONDecodeError                           Traceback (most recent call last)
<ipython-input-7-42be25090efe> in <module>()
      4
      5 doc ="Incentives to draw more private-hire drivers have also been scaled back and Grab is looking at other ways to lower their operating cost and maintain or increase their income.SINGAPORE ÃƒÂ¢Ã¢â€šÂ¬Ã¢â‚¬Â The promotional codes and incentives that Grab users previously enjoyed have made way for perks on its loyalty programme GrabRewards, said the ride-hailing firm's Singapore country head Lim Kell Jay on Monday (May 7). Speaking to the media on former rival Uber's last day o"
----> 6 ai.title([doc])

5 frames
/usr/lib/python3.6/json/decoder.py in raw_decode(self, s, idx)
    355             obj, end = self.scan_once(s, idx)
    356         except StopIteration as err:
--> 357             raise JSONDecodeError("Expecting value", s, err.value) from None
    358         return obj, end

JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Please update your installation to the latest version.


throw new Error('Socket is not writable');

stable node and socket 0.8.4
seems like it happens during heartbeat...
is there a way to catch this error on my side?
thanks for help

net.js:391
throw new Error('Socket is not writable');
^
Error: Socket is not writable
at Socket._writeOut (net.js:391:11)
at Socket.write (net.js:377:17)
at WebSocket.write (/var/www/web17/chatserver/node_modules/socket.io/lib/transports/websocket/hybi-07-12.js:130:17)
at WebSocket.packet (/var/www/web17/chatserver/node_modules/socket.io/lib/transport.js:515:15)
at WebSocket.heartbeat (/var/www/web17/chatserver/node_modules/socket.io/lib/transport.js:330:10)
at Object._onTimeout (/var/www/web17/chatserver/node_modules/socket.io/lib/transport.js:301:12)
at Timer.callback (timers.js:83:39)
Program exited with code 01.

@tommypowerz you should always add a http://nodejs.org/docs/v0.4.12/api/process.html#event_uncaughtException_ also does this still occur in socket.io 0.8.5

Just wanted to note that the SSL equivalent of this trace (for the original issue is):
		tls.js:70
		    throw new Error('CryptoStream is not writable');
		          ^
		Error: CryptoStream is not writable
		    at CleartextStream.write (tls.js:70:11)
		    at WebSocket.write (/.../vendor/socket.io-node/lib/transports/websocket/hybi-07-12.js:130:17)
		    at WebSocket.onDispatch (/.../vendor/socket.io-node/lib/transport.js:222:10)
		    at Manager.onDispatch (/.../vendor/socket.io-node/lib/manager.js:342:31)
		    at SocketNamespace.packet (/.../vendor/socket.io-node/lib/namespace.js:156:16)
		    at Socket.packet (/.../vendor/socket.io-node/lib/socket.js:199:56)
		    at Socket.emit (/.../socket.io-node/lib/socket.js:351:15)
		    at /.../server.js:159:24
		    at Client.get (/.../vendor/socket.io-node/lib/stores/memory.js:86:3)
		    at Socket.get (/.../vendor/socket.io-node/lib/socket.js:248:14)

I'm still seeing this on 0.8.5, although I think the line numbers are slightly different (from the above snippet).
Is there a procedure in place for re-establishing the connection (or whatever is the appropriate action) when it's determined a socket isn't writable? I know there's error handling in place in the Transport for generic socket errors, but it's obviously not catching this. It seems like it may actually be an issue with node, letting an uncaught exception bubble up rather than dispatching an error event. Then again, I'm no where near familiar enough with the code base (yet) to speak to what's the intention/responsibility of that handler.

Actually, this is probably a dupe of #512.

Experiencing the same issue intermittently:
net.js:391
throw new Error('Socket is not writable');
^
Error: Socket is not writable
at Socket._writeOut (net.js:391:11)
at Socket.write (net.js:377:17)
at WebSocket.write
Node Setup

Node v0.4.12
Socket.io v0.8.5
The logs are also showing a very high volume of:
39m client not handshaken client should reconnect
Any feedback on how to resolve?

I'll fix this for the websocket transports tomorrow.

Thanks einaros, that will be amazing.


Version written to properties file

fixes #630

I'm gonna close this PR and start a new one. We're going with hard-coded version string in java, and pretty much everything here would be reverted anyway.


Return scores with search results

First, thanks for the great library! I'm using it in a hobby password manager project of mine. It's the only Rust library I've found that actually works nicely for searching password items.
The current search functions, search and search_tokens, only return the result item ids. This is fine for most situations, as the results are already sorted by the score.
However, an ability to get the scores along with the ids would allow sorting items with equal scores in a custom way. For instance, in my password manager, I would want to sort items with equal scores alphabetically.

As a side note, the biggest issue I have right now is that search result order is not stable. Searching with the same term on the same data set multiple times returns items with equal scores in different orders:
use simsearch::SimSearch;

fn main() {
    // Generate items
    let items: Vec<_> = (1..=50).map(|n| format!("Sample item {}", n)).collect();

    let mut ss = SimSearch::new();
    for i in &items {
        ss.insert(i, i);
    }

    for i in 0..3 {
        println!("Run #{i}");
        let res = ss.search("sample item");
        for id in &res[0..2] {
            println!("  {id}");
        }
        println!("---");
    }
}

Running this prints out:
Run #0
  Sample item 28
  Sample item 21
---
Run #1
  Sample item 1
  Sample item 29
---
Run #2
  Sample item 37
  Sample item 38
---

I think the reason for this instability is the use of HashMap internally. Perhaps it could be fixed by changing the hasher implementation, but ultimately I think returning the scores is a more versatile solution.

For this specific issue I have, yes it would suffice.
However, I still would prefer to be able to alphabetically sort the results with equal scores. Something like this:
let mut results: Vec<(&str, f32)>  = ss.search_with_scores("term");
results.sort_by_key(|(r, s)| (-s, r));


[WIP] ModuleNotFound Error Fix

Fixes #113
Changes made in this Pull Request:

Changed pyproject.toml to use packagename instead of reponame for tests
Added setuptools directive to fix installation issue

I used a repo which contains multiple packages as a model for these changes: https://github.com/Gallopsled/pwntools
The idea is that if the repo name differs from the package name, you should be able to do
pip show <repo_name>

But not be able to import the package using the reponame. You must import using
import <package_name>

However, this leaves the issue of versioning, since the package_name's __init__ method uses (AFAIK) the version is associated with the repo_name. I set the package's version to use the version associated with repo_name by default and the user will have to be responsible for changing this if it doesn't apply (in the case they have two packages in the repo that are both different versions)
PR Checklist

[x] Tests?
[ ] Docs?
[x] CHANGELOG.md updated?
[x] AUTHORS.md updated?
[x] Issue raised/referenced?

Hello @ljwoods2! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:

In the file tests/test_output.py:

Line 74:1: E302 expected 2 blank lines, found 1
Line 78:80: E501 line too long (129 > 79 characters)
Line 84:72: W292 no newline at end of file

Thank you @ljwoods2 for fixing this issue!

Many thanks @ljwoods2 and @lilyminium !


Projects feature

projects carousel including hours worked

title
description
services
hours worked

github link

Modals/Popups:
Project Details Popup (when clicking on a project thumbnail)
Message Sent Confirmation (after submitting the contact form)


Gradient shader doesn't work

Describe the bug
I'm trying to create a gradient Fragment Shader using this
const gradientMaterialVertexShader = `
varying vec2 vUv;
void main() {
    gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);
    vUv = uv;
}
`;

const gradientMaterialFragmentShader = `
varying vec2 vUv;
uniform vec3 fromColor;
uniform vec3 toColor;
void main() {
  gl_FragColor = vec4(mix(fromColor, toColor, vUv.y), 1.0);
}
`;

and
          <TresShaderMaterial
            :vertex-shader="gradientMaterialVertexShader"
            :fragment-shader="gradientMaterialFragmentShader"
            :uniforms="{
              fromColor: {value: new THREE.Color('#ffff00')},
              toColor: {value: new THREE.Color('#ff00ff')},
            }"
          ></TresShaderMaterial>

but the object has uniform color instead of a gradient. I'm not sure what I'm doing wrong, but I tried to do something similar to the fragment shader example on the playground
Reproduction
https://stackblitz.com/edit/tresjs-shader-mthgxw?file=src%2Fcomponents%2Fshaders%2Ffragment.glsl,src%2Fcomponents%2FTheExperience.vue
Steps to reproduce
No response
System Info
No response
Used Package Manager
pnpm
Code of Conduct

[X] I agree to follow this project's Code of Conduct
[X] Read the Contributing Guidelines.
[X] Read the docs.
[X] Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
[X] The provided reproduction is a minimal reproducible example of the bug.

The weird thing is that when copying the code in StackBlitz it works https://stackblitz.com/edit/tresjs-shader-mthgxw?file=src%2Fcomponents%2Fshaders%2Ffragment.glsl,src%2Fcomponents%2FTheExperience.vue
but on my local install it doesn't... and I don't see what I'm doing differently?
could it be because I need to do custom UV mapping if it's on my own mesh (I'm not using a default geometry like eg TresSphereGeometry etc)

Seems it was my mesh missing UV mapping, fixed it using this
const updateUVMap = (geometry: THREE.BufferGeometry) => {
geometry.computeBoundingBox();
const max = geometry.boundingBox.max;
const min = geometry.boundingBox.min;
const offset = new THREE.Vector2(0 - min.x, 0 - min.y);
const range = new THREE.Vector2(max.x - min.x, max.y - min.y);
const positions = geometry.attributes.position.array;
const uvs: number[] = [];

for (let i = 0; i < positions.length; i += 3) {
    const x = positions[i];
    const y = positions[i + 1];
    uvs.push((x + offset.x) / range.x, (y + offset.y) / range.y);
}

  geometry.setAttribute('uv', new THREE.BufferAttribute(new Float32Array(uvs), 2));
geometry.uvsNeedUpdate = true;
};


[STORM-1571]Improvment Kafka Spout Time Metric

STORM-1571 System.currentTimeMillis() to calculation time interval is better than System.nanoTime() :)

I agree that use System.currentTimeMillis() instead of System.nanoTime() will improve performance, but if the code between the timing part is very fast, say, mostly < 1ms, then we possibly won't get useful metrics using System.currentTimeMillis.

hi @unsleepy22 this metric is use to count time interval when fetch messages from Kafka Broker . In fetchMessage() , it's building a FetchResponse , consumer fetch messages from broker and pick out message set . I think it won't be return in 1ms :)

Also people may not care much about numbers less than 1 ms.

+1, but there're 2 occurrences of System.nanoTime in storm-kafka, @darionyaphet would you please change the other?

sure . I push a new commit to update TridentKafkaEmitter's time interval calculation . Should merge them into one commit ?

Given that the timing is measured only in the fill call, which happens per batch of messages, the relative performance improvement is very low. By the way, call could return in 1ms if fetch size is configured at a lower value for better latency.

This question doesn't focus on performance improvement .
Using System.currentTimeMillis to replace System.nanoTime is more reasonable

I agree with @darionyaphet . Actually I think all System.nanoTime callings in external modules should be replaced with System.currentTimeMillis since they use System.nanoTime to get a ns value and then convert the time back to ms, which is unnecessary.
System.nanoTime should only be used in such cases that we do need high precision timing, e.g., timing certain code snippets in metrics system. If called on a critical path, this method is 5+ times slower than System.currentTimeMillis.

+1


fix(docker): Updating to v4.2.7 docker image

:tada: This PR is included in version 4.2.7 :tada:
Your semantic-release bot :package::rocket:


Missing Status Codes

There are more code that could be added...

103
306
420
425
430

Duplicate of https://github.com/rmaake1/httpstatuses/issues/71?

Duplicate of https://github.com/rmaake1/httpstatuses/issues/71?

My browser crashed. Sorry. I'll close this one.

My browser crashed. Sorry. I'll close this one.


Is distribution events envelope will contain different repositories' events?

Hi there,
https://github.com/docker/distribution/blob/master/notifications/event.go#L31-L32
I found a comment in event.go#L31-L32.
Is this mean different repositories' events will be in single envelope?
Thanks for help.

hi @realityone  The spec allows for events to be queued up and batched before being sent out (which is why the type is an array).  However, these events are not necessarily related: they could be from different repositories, so you cannot assume they are related.


Avatar design update

For newly created collectives, we want the avatar to be randomly picked among the three proposed below. To make sure that we always display the same avatar for each collective while keeping the attribution random, I suggest that we pick the default avatar based on the collective ID.
We should also have a MIN_ID from where we start applying this policy, to not impact existing collectives:
const DEFAULT_COLLECTIVE_LOGOS = ['...', '...', '...'];

const getDefaultAvatar = collective => {
  if (collective.id < MIN_COLLECTIVE_ID_FOR_RANDOM_AVATARS) {
    return legacyAvatar;
  } else {
    return DEFAULT_COLLECTIVE_LOGOS[collective.id % 3];
  }
}

This must be implemented in the images service: https://github.com/opencollective/opencollective-images

(exported from https://www.figma.com/file/N4Xbl652BhzOutXmzhcrLGch/[DS]-02-Atoms?node-id=574%3A2439)

[ ] Review PR

@SudharakaP, can we change the previous generic avatars for the new ones? Aside from those newly created?

@SudharakaP, can we change the previous generic avatars for the new ones? Aside from those newly created?

We could do this; just a simple change to remove the condition we added should do it;
https://github.com/opencollective/opencollective-images/blob/bc7155d61705eed50ceb6a74b3a183e2e2939d48/src/server/controllers/logo.js#L37-L41
@Betree : Do you see any objection to doing this? 🤔

No blocker for me. I initially proposed to only apply that to new collectives to not impact existing collectives. But it's the default avatar, so I don't think that's a big deal to change it @Memo-Es think that's a better approach.

No blocker for me. I initially proposed to only apply that to new collectives to not impact existing collectives. But it's the default avatar, so I don't think that's a big deal to change it @Memo-Es think that's a better approach.

Done at, https://github.com/opencollective/opencollective-images/pull/511


Feature Freeze 2.0.0 Public Preview

Meta issue for Feature freezing Version 2.0.0 for Public Preview:

[ ] Cut 2x branch
[ ] Cut 2.0 branch
[ ] Bump 2x to version 2.1.0 and update bwc versions
[ ] Bump main to version 3.0.0 and update bwc versions

@nknize looks all of them are done. Is there anything else we need to take care of for this issue?


Getting 503 Service Unavailable when visiting with FQDN

I installed coolify on new instance
Registered new user
Went in to settings page and added new FQDN https://<my-domain> and configured DNS record pointing to my IP
Now when I visit this domain I am seeing 503 Service Unavailable

The SSL certification could take 1-2 minutes to be requested. Could you please check again?
If it's still not available, please check any error on the server with sudo docker logs coolify command.

I see these logs
Error: connect ETIMEDOUT
    at Socket.<anonymous> (/app/node_modules/.pnpm/ioredis@4.28.5/node_modules/ioredis/built/redis/index.js:327:37)
    at Object.onceWrapper (node:events:645:28)
    at Socket.emit (node:events:526:28)
    at Socket.emit (node:domain:475:12)
    at Socket._onTimeout (node:net:501:8)
    at listOnTimeout (node:internal/timers:559:17)
    at processTimers (node:internal/timers:502:7) {
  errorno: 'ETIMEDOUT',
  code: 'ETIMEDOUT',
  syscall: 'connect'
}

And if I check docker ps
I see redis is not started
cd7b8a9799cb   bitnami/redis:6.2                          "/opt/bitnami/script…"   About an hour ago   Restarting (1) 20 seconds ago                                                                                coolify-redis

Oh, I see. So the main problem is that Redis did not start properly. Hm.
If you restart Coolify (and Redis) with this command wget -q https://get.coollabs.io/coolify/install.sh -O install.sh; sudo bash ./install.sh -f, does it start properly?

Ah. Thanks for the info. I will try to come up with a fix.

I find a quick fix. I'm releasing the new version soon (~20 mins)

You probably need to reinstall Coolify with wget -q https://get.coollabs.io/coolify/install.sh -O install.sh; sudo bash ./install.sh -f

Thanks for the quick fix. I updated and now I see below error
Generating SSL for <my-domain>
Error: Command failed: DOCKER_HOST=unix:///var/run/docker.sock docker run --rm --name certbot-cl2041ixw00020ormg5sx3ass -p 9080:9000 -v "coolify-letsencrypt:/etc/letsencrypt" certbot/certbot --logs-dir /etc/letsencrypt/logs certonly --standalone --preferred-challenges http --http-01-address <IP_ADDRESS> --http-01-port 9000 -d <my-domain> -d www<my-domain>-expand --agree-tos --non-interactive --register-unsafely-without-email
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
standard_init_linux.go:228: exec user process caused: exec format error

    at ChildProcess.exithandler (node:child_process:399:12)
    at ChildProcess.emit (node:events:526:28)
    at ChildProcess.emit (node:domain:475:12)
    at maybeClose (node:internal/child_process:1092:16)
    at Process.ChildProcess._handle.onexit (node:internal/child_process:302:5) {
  killed: false,
  code: 1,
  signal: null,
  cmd: 'DOCKER_HOST=unix:///var/run/docker.sock docker run --rm --name certbot-cl2041ixw00020ormg5sx3ass -p 9080:9000 -v "coolify-letsencrypt:/etc/letsencrypt" certbot/certbot --logs-dir /etc/letsencrypt/logs certonly --standalone --preferred-challenges http --http-01-address <IP_ADDRESS> --http-01-port 9000 -d <my-domain> -d www.<my-domain> --expand --agree-tos --non-interactive --register-unsafely-without-email ',
  stdout: '',
  stderr: "WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested\n" +
    'standard_init_linux.go:228: exec user process caused: exec format error\n'
}

Thanks for the info! Sorry that it is not working as it should (ARM support is in beta).
Oracle cloud revoked my account for no reason (even their chat support cannot tell me the reason, lol), so it is a bit harder for me to test the ARM version.
I will take a look at it and let you know the outcome!

FYI seems like certbot latest image is for amd and for arm we need to certbot/certbot:arm64v8-nightly I tried manually running using arm tag image and it worked.

Thanks, I will add that to the ARM version! 👌

It will be fixed in the next version.


creating concrete types for the various key ciphers

In the interests of providing strong type safety and moving towards a model that mimics Go's key objects (private keys should implement crypto.Signer) this refactors our key related code to use concrete typed keys specific to each possible supported algorithm.
Signed-off-by: David Lawrence<EMAIL_ADDRESS>(github: endophage)

What happens with notary-signer's keys.go? There is an HSMKey that should probably not exist.
Are these new key types HW friendly?

@diogomonica these keys are specifically for use with in memory private keys. Each HSM would be fronted by a concrete KeyStore implementation that would implement its own concrete PrivateKey. In the follow up work that will make PrivateKey implement crypto.Signer, this will enable the HSM code to easily control all aspects of signing.

LGTM

LGTM since the other branch seems to do some additional testing (marshalling private bytes into their respective crypto private keys, etc.)  :)


refactor: rewrite canvas helpers to ts

@kurkle @LeeLenaleee do you want to review this further?

Looks like this has a conflict that needs resolving

@etimberg ready to merge


Added form css layout

Added css to forms

Nice work - that looks a lot nicer!
Maybe we could create a separate TextInput component that just returns this:
<label className="block text-gray-700 text-sm font-bold mb-5" htmlFor="firstName">
  <p>{t("First Name")}</p>
  <input
    className="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline"
    name="firstName"
    id="firstName" type="text"/>
</label>

and takes htmlFor, text and name as props. Then, if we want to make any changes in the future, we only need to update it in one place.
We could also add another component for the form headings for the same reason.

I do not know my way around react.
We could also use a react forms library for easier validation.

Ah, ok, that's fine. I'll merge this then and I'll make the change. Thanks!

@oetherington I can take this (TextInput component), if you don't mind

@MnsrIl Sure - go for it!


Error inflating class in xml

That's the log from Fabric. It crashes at setContentView()

That's an OOM, I would guess you have a memory leak somewhere.


Add refresh tokens to authentication API - PREVIEW

refresh tokens have separate expiry and encryption key config - DONE
refresh tokens are returned in Session object alongside the regular token - DONE
refresh tokens can only be used with AuthenticateRefresh request - DONE (provided the refresh_encryption_key is different from encryption_key)
/v2/authenticate/refresh plus Authorization header carrying the Bearer <refresh_token> returns a renewed token pair - DONE
Currently only added to AuthenticateDevice but I assume it will need adding to all other auth methods ?
what about before and after auth hooks ?
Also not implemented is the one-timeness of the refresh token - i think it will require some kind of state that keeps the track of already used tokens
default expiry of the refresh tokens is currently 3600 sec but should be longer probably

Merged under https://github.com/heroiclabs/nakama/pull/527.

Merged under https://github.com/heroiclabs/nakama/pull/527.


Autoscaler added

Hi @mysticaltech I merged the autoscaling branch with my working branch, and I got the first successful node-creation by autoscaler when I apply a random workload like this:
apps/v1
kind: Deployment
metadata:
  labels:
    app: hello-world
  name: hello-world
spec:
  replicas: 4
  selector:
    matchLabels:
      app: hello-world
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: hello-world
    spec:
      containers:
      - image: rancher/hello-world
        imagePullPolicy: Always
        name: hello-world
        ports:
        - containerPort: 80
          protocol: TCP
        resources:
          limits:
            cpu: 1000m
            memory: 1024Mi
          requests:
            cpu: 1000m
            memory: 1024Mi

A special cloud-init is necessary, as the old k3s stuff has to be wiped out. I am using the control-plan, as this will allow also for a single-control-plane cluster with just autoscaling nodes.
Still a lot to clean up, also we should support multiple autoscale-node groups.
What do you think?

Very happy to hear, @ifeulner ! I would guess, let's refine this for now, test it well, release and then we can add multiple autoscaling nodepool. But my preference is always to keep it simple, if there is no immediate necessity of making it complex.
I will test this ASAP, and you let me know when you feel it's ready.

There are still some strange log-messages by k3s (probably from the installation before), so some work to do...
for that it looks actually too good:
❯ k get nodes -o wide
NAME                           STATUS   ROLES                       AGE   VERSION        INTERNAL-IP    EXTERNAL-IP       OS-IMAGE           KERNEL-VERSION    CONTAINER-RUNTIME
autoscaling-50d004da190858f8   Ready    <none>                      20m   v1.24.6+k3s1   <IP_ADDRESS>     <IP_ADDRESS>   openSUSE MicroOS   6.0.1-1-default   containerd://1.6.8-k3s1
k3s-agent-small-rtv            Ready    <none>                      88m   v1.24.6+k3s1   <IP_ADDRESS>     <IP_ADDRESS>     openSUSE MicroOS   6.0.1-1-default   containerd://1.6.8-k3s1
k3s-control-plane-fsn1-dfh     Ready    control-plane,etcd,master   88m   v1.24.6+k3s1   <IP_ADDRESS>   <IP_ADDRESS>   openSUSE MicroOS   6.0.1-1-default   containerd://1.6.8-k3s1
❯ k get pods -A -o wide
NAMESPACE        NAME                                               READY   STATUS    RESTARTS   AGE   IP             NODE                           NOMINATED NODE   READINESS GATES
default          hello-world-5c7d777db8-9jt22                       1/1     Running   0          22m   <IP_ADDRESS>     k3s-agent-small-rtv            <none>           <none>
default          hello-world-5c7d777db8-bj88d                       1/1     Running   0          20m   <IP_ADDRESS>      autoscaling-50d004da190858f8   <none>           <none>
default          hello-world-5c7d777db8-bsk4c                       1/1     Running   0          20m   <IP_ADDRESS>      autoscaling-50d004da190858f8   <none>           <none>
default          hello-world-5c7d777db8-x5srr                       1/1     Running   0          20m   <IP_ADDRESS>      autoscaling-50d004da190858f8   <none>           <none>
kube-system      cluster-autoscaler-59c65995bb-vx7nc                1/1     Running   0          35m   <IP_ADDRESS>     k3s-control-plane-fsn1-dfh     <none>           <none>
kube-system      coredns-b96499967-hjvxb                            1/1     Running   0          88m   <IP_ADDRESS>      k3s-control-plane-fsn1-dfh     <none>           <none>
kube-system      hcloud-cloud-controller-manager-57d697cf98-bqp49   1/1     Running   0          88m   <IP_ADDRESS>   k3s-control-plane-fsn1-dfh     <none>           <none>
kube-system      hcloud-csi-controller-0                            5/5     Running   0          87m   <IP_ADDRESS>      k3s-agent-small-rtv            <none>           <none>
kube-system      hcloud-csi-node-8zklp                              3/3     Running   0          88m   <IP_ADDRESS>      k3s-control-plane-fsn1-dfh     <none>           <none>
kube-system      hcloud-csi-node-nllp8                              3/3     Running   0          20m   <IP_ADDRESS>      autoscaling-50d004da190858f8   <none>           <none>
kube-system      hcloud-csi-node-xlr6v                              3/3     Running   0          88m   <IP_ADDRESS>      k3s-agent-small-rtv            <none>           <none>
kube-system      kured-2dj7x                                        1/1     Running   0          87m   <IP_ADDRESS>      k3s-agent-small-rtv            <none>           <none>
kube-system      kured-8b6xc                                        1/1     Running   0          20m   <IP_ADDRESS>      autoscaling-50d004da190858f8   <none>           <none>
kube-system      kured-kvdg8                                        1/1     Running   0          87m   <IP_ADDRESS>      k3s-control-plane-fsn1-dfh     <none>           <none>
kube-system      metrics-server-668d979685-npvs6                    1/1     Running   0          88m   <IP_ADDRESS>      k3s-control-plane-fsn1-dfh     <none>           <none>
kube-system      traefik-7b7d4549db-p52w7                           1/1     Running   0          87m   <IP_ADDRESS>      k3s-control-plane-fsn1-dfh     <none>           <none>
system-upgrade   system-upgrade-controller-5d4ff9f49-zp6ft          1/1     Running   0          88m   <IP_ADDRESS>      k3s-control-plane-fsn1-dfh     <none>           <non

So it did end up using 10.255 on its own; good to see!! Well done.
Don't hesitate to post the k3s logs!

@ifeulner Beautiful! Will do my own tests ASAP then merge, probably tomorrow.
Nice work!! 🙏 ✨

Can we keep this open for a bit more time? I'd like to test it but unfortunately, I've been too busy today.

Yes, @mnencia, absolutely! Just FYI merged another unrelated PR in master for 1.6.
If we can push the release before the end of the week, it would be awesome! 🚀

@mysticaltech updated the pull request.

Thank you @ifeulner!! Looking good.
@mnencia The ball is fully in your camp now! ✌

It would get us closer to the format already used for the node pools. What do you think?

@mysticaltech sure, would work, but then we could also support immediately multiple nodeppols ;) Maybe with an update? So that you could do a release now?

@ifeulner Definitely... Multiple node pools feel like a low-hanging fruit to me too; however, what about the node types? We could create the snapshot from cpx11 and in clout-init would expand the partitions automatically (or we could specifically do it).
If you can, go man! Let's move to the final format sooner rather than later! :) 🙏

@ifeulner You are fast my friend. Beautiful!! 🚀 🙏

I've found that it is complicated to upgrade from 5.10 because it misses some data, even with autoscaling disabled:
╷
│ Error: Invalid index
│
│   on ../terraform-hcloud-kube-hetzner/autoscaler-agents.tf line 6, in locals:
│    6:       cloudinit_config = base64encode(data.cloudinit_config.autoscaler-config[0].rendered)
│     ├────────────────
│     │ data.cloudinit_config.autoscaler-config is empty tuple
│
│ The given key does not identify an element in this collection value: the collection has no elements.
╵
╷
│ Error: Invalid index
│
│   on ../terraform-hcloud-kube-hetzner/autoscaler-agents.tf line 11, in locals:
│   11:       snapshot_id      = hcloud_snapshot.autoscaler_image[0].id
│     ├────────────────
│     │ hcloud_snapshot.autoscaler_image is empty tuple
│
│ The given key does not identify an element in this collection value: the collection has no elements.
╵

We need to provide a clean way to upgrade, at least if you do not enable the autoscaling feature with the upgrade.

It looks like the problem is that autoscaler_nodepools need to have at least one element. We should support having it undefined or empty to smoothly upgrade from previous versions.

@mnencia Thanks for your review and for pinpointing the problem above. @ifeulner FYI, we are very close to merging, but this needs to be sorted out first.

@mysticaltech @mnencia resolved the issues and also added code to clean the snapshot so that it is usable when done at a later stage. Also grows now /varpartition according to the disk size of the used server type.
Please check.

Thank you. I'll review the PR ASAP

On my end, all ready for ignition! @mnencia should we launch this baby into orbit? Waiting for your final review! 🚀

@mnencia I'll merge this for now, and we can fix it later on if you see something is still not right. That way you can take your time, thanks for catching the upgrade issue, this was so valuable! 🙏


[Windows][Linux]Fix CSP HTTP request syntax

Had been broken occasionally during rebase
(at addc73750a033fb191338b31b6ae6593613966da).
BUG=XWALK-6079

@darktears @kenchris PTAL

RS from @kenchris at https://github.com/pozdnyakov/crosswalk/commit/b28a4ee94d208122ed42023af30dd6e2f5e37571#commitcomment-16471246


bge for multi-label text classification

Is there any BGE model that can be used for multi-label text classification (predefined labels) by adding some dense layers for classification (similar to BERT base uncased) instead of Sentence BERT?

You can use setfit: https://github.com/huggingface/setfit and huggingface script: https://github.com/huggingface/transformers/tree/main/examples/pytorch/text-classification.

You can use setfit: https://github.com/huggingface/setfit and huggingface script: https://github.com/huggingface/transformers/tree/main/examples/pytorch/text-classification.

Is using "BGE en base" with "setfit" for multi-label classification better than using one BERT model and adding some fully connected layers + classification layer? @staoxiao


Concrete Syntax Tree / Semantic Actions Visitor

Split up from: https://github.com/SAP/chevrotain/issues/215
Should allow defining semantic actions on CST outputs of a grammar separately from the grammar definition.

@grandsong Maybe you will want to keep track of the CST Visitor
track and review the docs once I update them. 😄

You mean cst_visitor branch?
Yes, I will.

Thanks @grandsong.
I keep amending the commit on the cst_visitor branch
So I suggest you only review after I finish and merge the pull request
to avoid duplicate work.
Current status has no Docs yet anyhow 😢

OK

Re-opening, need to update the readme and add a demp on the playground.


Iron Alloy Ingots can be problematic for autocrafting

Issue Description:
I did a setup for autocrafting all alloy with a single alloy smelter. If i request more alloys at the same time like invar and bronze i allways get iron alloy ingots
What happens:
Iron Alloy ingots are created when requesting invar and bronze at the same time ( hardened upgrad kit from thermal)
What you expected to happen:
Smelting Invar and Bronze not Iron Alloy ingots
Steps to reproduce:
1.setup refined storage with autocrafting for Invar and Bronze in an alloy smelter
2.request hardened upgrade kit from thermal or anything else that needs 2 different alloy with on containing iron
3.
...

Affected Versions (Do not use "latest"):

EnderIO: 1.12.2-5-0.36
EnderCore:1.12.2-0.5.41
Minecraft:1.12.2
Forge:
SpongeForge? yes/no
Optifine? yes/no - yes
Single Player and/or Server? server

Your most recent log file where the issue was present:
[pastebin/gist/etc link here]

and what's your point?

You're outdated, the recipe for construction alloy was changed in .37

Use a separate alloy smelter for invar and other iron related alloys.


Fix extraneous brackets in query string builder

Fix #3765

Messages

:book:
:sparkles: Thanks for your contribution to Shields, @paulmelnikow!

  Generated by :no_entry_sign: dangerJS against 801025262b9b95c1a4b5a500ce5c6bf9ccf112c9

Thanks @paulmelnikow!


Is TreeView the same GraphView, Similar IOS library

Hi,
Thanks for this great library. I know it might not the right place to ask these questions so I hope to forgive me.

on the internet there are some tutorials and web pages (like this one) that use a library named treeview, but when I click on those links I head to this library, was there a renaming on this repository and treeview is the same as Graphview?

Is there a similar library (with similar features) for IOS platform? (I couldn't find any after one-hour searching) I want to create a react-native library that wraps this library and gives similar functionalities on React-Native side and I need to find a native IOS library for supporting both Android and IOS platforms.

Hi @SaeedZhiany, yes it's the same library. At the beginning we had only implemented the tree layout. Over time more layouts were added and we renamed the repository from TreeView to Graphview. Unfortunately I don't know if there is a similar project for iOS. Maybe someone knows a bit more in Stackoverflow. Good luck

Thanks for your response, Yeah but questions link "is there any library that do ... " are not allowed in Stackoverflow, so I asked it here. it seems I should search more. :)))

Hello @robbysmeticapps, No I developed a pure js solution myself and used it for my react-native application.


Failing to load the GPU enabled model on Linux: Protobuf parsing failed

Code to reproduce:
import onnxruntime_genai as og

chat_template = '<|user|>\n{input} <|end|>\n<|assistant|>'
model_name = "Phi-3-mini-128k-instruct-onnx/cuda/cuda-fp16"
model = og.Model(model_name)
generator = og.Generator(model, params)

Exception
---------------------------------------------------------------------------
OrtException                              Traceback (most recent call last)
Cell In[1], line 5
      3 chat_template = '<|user|>\n{input} <|end|>\n<|assistant|>'
      4 model_name = "Phi-3-mini-128k-instruct-onnx/cuda/cuda-fp16"
----> 5 model = og.Model(model_name)
      6 generator = og.Generator(model, params)

OrtException: Load model from Phi-3-mini-128k-instruct-onnx/cuda/cuda-fp16/phi3-mini-128k-instruct-cuda-fp16.onnx failed:Protobuf parsing failed.

same issue with Phi-3-mini-128k-instruct-onnx/cuda/cuda-int4-rtn-block-32/phi3-mini-128k-instruct-cuda-int4-rtn-block-32
Thanks!

Same thing if I run through the CLI
python phi3-qa.py -m Phi-3-mini-128k-instruct-onnx/cuda/cuda-fp16 -l 2048
Traceback (most recent call last):
  File "phi3-qa.py", line 87, in <module>
    main(args)
  File "phi3-qa.py", line 11, in main
    model = og.Model(f'{args.model}')
onnxruntime_genai.onnxruntime_genai.OrtException: Load model from Phi-3-mini-128k-instruct-onnx/cuda/cuda-fp16/phi3-mini-128k-instruct-cuda-fp16.onnx failed:Protobuf parsing failed.

I also get the same issue actually with the CPU models

Ah, the issue is that the lfs files weren't actually downloading. Ill update the instructions


🚀 Feature: Ability to sync table component filters with URL query string

🔖 Feature description
Develop a feature for the Table component in @backstage/core-components library that either enables the Table to automatically update the URL query string when filters change, or enables initialization of filter values. Either way, it should make it easy to have the table read and write to the URL query string.
🎤 Context
I work at Zalando on building an internal platform based on Backstage. In the platform, we use your Table component from @backstage/core-components library for various purposes but we had to decide to develop a custom look-alike table for few instances because we needed to have sharable URLs to the filtered view of the table. That is still a limitation in the component itself. There isn't a way to pass filter values (as far as I know). The only thing we can access is onFilterChange which would be great to update the query string but isn't enough to update the filters upon initialization.
✌ Possible Implementation

The Table component currently only exposes onFilterChange callback. In order to sync properly with the URL query string, we would have to implement a filter defaultValue option to be either the value itself or a function that returns the value. That way we can pass a query string reader callback that returns the default value upon initialization.
-  declare type TableFilter = {
+  declare type TableFilter<T = any> = {
      column: string;
      type: 'select' | 'multiple-select';
+     defaultValue: T | () => T;
   }

Do the magic behind the scene without having the user care about grabbing values and setting them. The table would just have a boolean toggle of the feature. The table will deal with creating the URL query strings and do read/write operations as necessary.
<Table
    data={data}
    filters={filters}
    options={{
+      updateQueryString: true,
    }}
/>

We could even have this option as an object specifying what to update allowing for more flexibility. For example:
updateQueryString: {
  sorting: true,
  filtering: true,
  searching: false,
}

👀 Have you spent some time to check if this feature request has been raised before?

[X] I checked and didn't find similar issue

🏢 Have you read the Code of Conduct?

[X] I have read the Code of Conduct

Are you willing to submit PR?
Yes I am willing to submit a PR!

Hm. This touches upon the choice of wanting controlled components or components that control themselves.
For the catalog page, we've decidedly gone for the controlled component idea. There's an external filtering and retrieval system that deals with finding the right data to display, and then it force-pushes that data to the table which has no say whatsoever in the matter. Then, the external filter system is also responsible for dealing with the query string.
It may also be worth mentioning that there's a bit of a brewing desire to take a careful look at the component library and streamlining it. Making components more fleshed out and better where that makes sense, and stripping away things that make little sense to wrap anymore and where users are better served to instead just use the underlying library directly.
Given the above, I'd vote to do the first suggestion, if anything. Being able to supply a default value seems very sensible as long as the filtering ability is exposed at all.
In a future iteration of the component library, we'll see if we go in the direction of fleshing out the table more... or whether to take a step back and instead promoting the use of the underlying react-table more directly. That may be some ways off though, since there are other more pressing things on the road map first.


Release Google.Cloud.Dataproc.V1 version 5.14.0

Changes in this release:
New features

Add resource reference for KMS keys and fix comments (commit 2a39cfd)
Add support for new Dataproc features (commit 2a8cd75)
Add support for new Dataproc features (commit 25f2519)

Created release for Google.Cloud.Dataproc.V1-5.14.0


gif image not working

gif image not working animation

This is not a problem with Cropper - it's because browsers don't support canvas to animated gif conversion although you should be able to convert the first frame to a jpeg or png: http://stackoverflow.com/questions/10486084/generate-animated-gif-with-html5-canvas
Jordan Pollard

On Mar 20, 2016, at 12:08, Mukesh R<EMAIL_ADDRESS>wrote:
gif image not working animation
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub


Implement Option.flatten and Option.flatten_one methods.

Summary of the Pull Request
Implement two methods for the OptionProtocol classes: Some and Empty.
Methods

flatten_one: Removes one nesting level from a nested Option structure.
flatten: Removes all nesting levels (leaving the last) from a nested Option structure.

Codecov Report

Merging #9 (abf6545) into main (90bde8f) will not change coverage.
The diff coverage is 100.00%.

@@            Coverage Diff            @@
##              main        #9   +/-   ##
=========================================
  Coverage   100.00%   100.00%
=========================================
  Files           13        13
  Lines          866       890   +24
=========================================
+ Hits           866       890   +24

Impacted Files
Coverage Δ

rusty_results/prelude.py
100.00% <100.00%> (ø)

rusty_results/tests/option/test_option_empty.py
100.00% <100.00%> (ø)

rusty_results/tests/option/test_option_some.py
100.00% <100.00%> (ø)

Continue to review full report at Codecov.

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


useLocale returns locale from path params instead of provider value in client components

Description
useLocale will always return the locale path parameter in client components even though NextIntlClientProvider is configured with a hard-coded locale.
I cannot find anything related to this behaviour in the documentation so this should probably be documented and/or add an option to useLocale to retrieve the locale from the provider and not the path parameters for client components.
https://github.com/amannn/next-intl/blob/4369c7612b860ab31a173e7f045a839aa742f711/packages/next-intl/src/react-client/useLocale.tsx#L9-L18
Mandatory reproduction URL (CodeSandbox or GitHub repository)
https://codesandbox.io/p/devbox/next-intl-bug-template-app-forked-w4q7qq
Reproduction description

Open up the /_next/info page and view the resulting locales.
Open up the /en/info page and view the resulting locales.
Remove the notFound(); call in src/app/[locale]/layout.tsx.
Open up the /_next/info page and view the resulting locales.

Expected behaviour
The universal "useLocale" hook should return the expected locale configured in the provider in client components.
All displayed locales should be "en" in client components.
This ensures that components can be re-used in 404:s from _next/* paths.

Thank you so much for the great bug report!
I agree, this is indeed a bit confusing. https://github.com/amannn/next-intl/pull/691 will fix this.

Thanks @amannn, works perfectly now!


App crashes when I click on a pod

Describe the bug
The app crashes when I click on a pod
To Reproduce
Steps to reproduce the behavior:

Go to Workloads
Click on Pods
Select a pod
See error

Expected behavior
App not to crash when I click on a pod
Screenshots

Environment (please complete the following information):

Lens Version: 4.1.3
OS: macOS Big Sur
Installation method (e.g. snap or AppImage in Linux): Provided DMG

Logs:
When you run the application executable from command line you will see some logging output. Please paste them here:
Can't seem to obtai them
Kubeconfig:
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: REDACTED
    server: https://REDACTED:443
  name: staging
- cluster:
    certificate-authority-data: REDACTED
    server: REDACTED
  name: REDACTED
contexts:
- context:
    cluster: staging
    user: REDACTED
  name: staging
- context:
    cluster: REDACTED
    user: REDACTED
  name: REDACTED
current-context: staging
kind: Config
preferences: {}
users:
- name: REDACTED
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
    token:  REDACTED
- name: clusterUser_k8s-staging_staging
  user:
    auth-provider:
      config:
        access-token: REDACTED
        apiserver-id: REDACTED
        client-id: REDACTED
        config-mode: "0"
        environment: AzurePublicCloud
        expires-in: "3599"
        expires-on: "1614706588"
        refresh-token: REDACTED
        tenant-id: REDACTED
      name: azure

Same error here,
Environment (please complete the following information):
Lens Version: 4.1.3
OS: Ubuntu MATE 18.04
Installation method (e.g. snap or AppImage in Linux): snapcraft

Duplicate of #2227.

The fix is ready and looks like its going to make it to a patch release soon, so I think we can close this.

Fixed by #2244 and now in released 4.1.4


[BUG] microshift preset only allows 15 Gi of PVCs

General information

OS: RHEL 9.2
Hypervisor: OpenShift Local with microshift preset, Libvirt
Did you run crc setup before starting it (Yes/No)? Yes
Running CRC on: Laptop

CRC version
$ crc version
CRC version: 2.22.1+e8068b4
OpenShift version: 4.13.3
Podman version: 4.4.4

CRC status
$ crc status
CRC VM:          Running
MicroShift:      Running (v4.13.3)
RAM Usage:       8.47GB of 29.49GB
Disk Usage:      15GB of 198.6GB (Inside the CRC VM)
Cache Usage:     142.6GB
Cache Directory: /home/ctate/.crc/cache

CRC config
$ crc config view
- consent-telemetry                     : yes
- cpus                                  : 7
- disk-size                             : 201
- memory                                : 29000
- preset                                : microshift

Host Operating System
$ cat /etc/os-release
NAME="Red Hat Enterprise Linux"
VERSION="9.2 (Plow)"
ID="rhel"
ID_LIKE="fedora"
VERSION_ID="9.2"
PLATFORM_ID="platform:el9"
PRETTY_NAME="Red Hat Enterprise Linux 9.2 (Plow)"
ANSI_COLOR="0;31"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:redhat:enterprise_linux:9::baseos"
HOME_URL="https://www.redhat.com/"
DOCUMENTATION_URL="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9"
BUG_REPORT_URL="https://bugzilla.redhat.com/"

REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 9"
REDHAT_BUGZILLA_PRODUCT_VERSION=9.2
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="9.2"

Steps to reproduce
crc config set preset microshift
crc config set cpus 7
crc config set memory 29000
crc config set disk-size 200
crc setup
crc start
crc stop
crc config set disk-size 201
crc start

Expected
I expect more than 15Gi of PVCs to be status Bound.
$ oc get pvc -A
smartvillage   data-default-solrcloud-0             Bound     pvc-e7fc13c6-5dad-4df2-92e9-7d46ce5605ba   25Gi        RWO            topolvm-provisioner   3h23m

Actual
Additional PVCs above 15Gi remain in status Pending:
$ oc get pvc -A
NAMESPACE      NAME                                 STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS          AGE
smartvillage   data-default-solrcloud-0             Bound     pvc-e7fc13c6-5dad-4df2-92e9-7d46ce5605ba   5Gi        RWO            topolvm-provisioner   3h23m
smartvillage   data-default-solrcloud-1             Bound     pvc-90105135-a2db-4357-91f5-ef07b7221e4b   5Gi        RWO            topolvm-provisioner   3h23m
smartvillage   data-default-solrcloud-zookeeper-0   Pending                                                                        topolvm-provisioner   3h19m
smartvillage   postgres-repo1                       Bound     pvc-273080b0-a105-475c-9c41-6a9e56c74bb7   1Gi        RWO            topolvm-provisioner   4h45m
smartvillage   postgres-smartvillage-2htg-pgdata    Bound     pvc-95a4dd5d-42b2-43e2-bcd1-6065146c37ae   1Gi        RWO            topolvm-provisioner   4h45m
smartvillage   postgres-smartvillage-ktkj-pgdata    Bound     pvc-d2dfb6d8-ee74-47e2-865b-5d0a865c73da   1Gi        RWO            topolvm-provisioner   4h45m
smartvillage   zookeeper                            Bound     pvc-7d286403-8c88-4f31-92a3-f19ce97fd913   1Gi        RWO            topolvm-provisioner   4h45m

Logs
And the node reports it did not have enough free storage:
Before gather the logs try following if that fix your issue
$ crc delete -f
$ crc cleanup
$ crc setup
$ crc start --log-level debug

Please consider posting the output of crc start --log-level debug  on http://gist.github.com/ and post the link in the issue.
Here is my gist: https://gist.github.com/computate/081aec10169bd7891bdffda05b67b0d9
Thanks for your help!

https://github.com/crc-org/crc/issues/3624#issuecomment-1560892999 , looks like we need to re-evaluate our disk-resize logic.

We have spoken about this in the team and did not come to a clear conclusion on how to handle this.
There seems to be two kinds of storage locations for Microshift; persistent and ephemeral. the filesystem that we currently enlarge is actually part of ephemeral, but this is where the OS and comtainer images live. The size that might have to be enlarged too, is the persistent storage, which is used for the PVs. though, what would be the best way to deal with this?
Do we need to offer parameters to start to allow resizing of these individual locations? or have we made the wrong choice to enlarge the container storage path?

@computate what kind of behavior you expect as user?

@praveenkumar I see how it might be possible to run out of container image space, but it's even easier to run out of Persistent Volume storage when there are only 10Gi available with the microshift preset. I would love to have parameters to configure both volume and image storage if possible, but for now I have to limit my projects to 10 Gi for volumes.

@computate it is already fixed in 2.28 version of crc and now have option to specify persistent-volume-size which you can use to define how much space you require for PV. Please give it a try and let us know it works as expected.

Thank you @praveenkumar , this works to add larger PVC storage than 15Gi, assuming you configure the persistent-volume-size before you crc start for the first time. Otherwise, it doesn't seem to resize the PVC storage after you've already started your cluster for the first time.

assuming you configure the persistent-volume-size before you crc start for the first time.

@computate yes that is expected because we can't free up disk size after allocate as part of initial crc start. I am closing this issue now.


Add FhirError component to Gluestack-ui renderer

#180

Alert component does not follow Gluestack-ui docs exactly because the Alert component is not meant to have buttons, so I made built it to support the retry button.
Note: We should add a line in the future Gluestack docs that we require the use of the   <GluestackUIProvider config={gluestackUIConfig}> provider, because this FhirError component is using props that exist only on the styled version of the components (e.g Alert prop action is a styled prop) If we want to support unstyled gluestack components, then we'll have to build things diffferently. I'll add this to the Issue

I think it is failing because there are type error that will only be resolved by the  <GluestackUIProvider config={gluestackUIConfig}> being added to the code. I suppose we might have to add it to our package somewhere

@julienblin after adding your suggestion, pnpm check still fails because there are props on the elements that are only exist  <GluestackUIProvider config={gluestackUIConfig}> has been added to the app as a provider. So, it works just fine once you have imported into an expo app, but in bonfhir it throws type errors.
should we:

Add this provider somewhere in our code
add a ts-ignore line for every prop that throws a ts-error. (e.g. action="error" or pt="$1").
refactor so that we are using only unstyled versions of gluestack components, and then stick with that policy

...maybe there is another option.
I would assume we want to use their styled components, but maybe I'm wrong.

I think your assumption is right - we'll stick with the styled components for the moment.
It's interesting their approach to typings given what they want to achieve, I've never seen it done like that!
I tried the following:

Add the @gluestack-ui/config package as a dev dependency to the @bonfhir/gluestack-ui package: pnpm add -D @gluestack-ui/config

Drop the following file in the project: src/r5/gluestack.d.ts:

import {
  IComponents,
  IConfig,
  componentsConfig,
  gluestackUIConfig,
} from "@gluestack-ui/config";

declare module "@gluestack-ui/themed" {
  interface UIConfig
    extends Omit<typeof gluestackUIConfig, keyof IConfig>,
      IConfig {}
  interface UIComponents
    extends Omit<typeof componentsConfig, keyof IComponents>,
      IComponents {}
}

This actually reproduces the global declaration that gets processed when importing the config in the provider.
This kinda "works" but it explodes the build time - it now takes about 4 minutes(!) to build the package. This is too long.
I'll see if I can narrow it down somehow.

@nickvallee I think I found a solution by excluding the declaration file at build time. This is not great but seems to work.
I just pushed the changes in your branch - let me know if that makes sense.


Literally unusable

there is a typo in the README, just thought you should know

An storage account

https://github.com/Azure/kubernetes-volume-drivers/tree/master/flexvolume/blobfuse#prerequisite

thanks, it's fixed.


Response object changes.

Hi, my problem is that I always get the response of the default welcome intent and the next intent that I invoke. But if that intent that I invoke afterward has follow-up intents or has actions-parameters required dialog flow get lots in the conversation.
I temporarily fix it for follow-up intents setting all the follow-up contexts in "Permanent contexts" (I don't know if this is the proper way of solving it), but it does not help for intents that have required actions and parameters for the user to continue the conversation.
The thing is that now dialog flow is following the conversation, but sometimes it gives me both fullfilmentText and richReponse (response from my back-end), but other times it only throws the normal fulfillment text from the dialog flow console.
Last thing, even if you start listening and stop listening like in the example that you have in the library, for every start/stop actions my back-end functions get triggered multiple times, I get between 15-20 triggers per click on start/stop. Any thoughts on that issue as well?
Also, everything works properly on the Google Assistant simulator.
Any suggestions on how to fix the response from dialog flow or on how I should implement the library in order to work properly with intents and the back-end?
Thanks!

Dialogflow.startListening((result) =>{               console.warn("result called");               console.warn(result);           }, (error)=>{               console.warn(error);           });
In the above piece of code result callback is getting called multiple times. Facing the issue. Any progress on this issue


Cocoapods: SVProgressHUD.bundlenot added to "Copy Bundle Ressources"-Phase

Hi, we are aware of a problem regarding the Podfile (e.g. #449). It seems that the SVProgressHUD.bundle is not copied to the "Copy Bundle Resources" Build Phase. Due to this continuing problem we are searching for someone that could check and help with this problem. We are not using Cocoapods on our own and are happy for pull request.

Maybe pod install is the solution?

Here looks all fine.
Using 1.1.3 works good here with CocoaPods.

Another try. Should be fixed due to https://github.com/SVProgressHUD/SVProgressHUD/commit/de93d1cdcbf76db6d6526db2b629760413cddea8 and #542.


[FEATURE REQUEST] Monitor and alert on KVS database metrics

Is your feature request related to a problem? Please describe.
Provide an observer to monitor KVS database for various metrics and alert on them
Describe the solution you'd like
Monitor at least the following metrics

LVID usage
Database size

Describe alternatives you've considered
These can be done today by manually checking perf counters or examining size of database on nodes

LVID usage monitoring will ship in the next release, 3.1.23. Database size will require some changes to SF, so will not ship in 3.1.23.


Support for methods like scrollTo, $(byText()) in selenide-appium

I am trying to use selenide-appium for mobile automation needs. It would be great to have features like scrollTo, finding element by Text in appium. For now these utilities work in selenide-selenium.

@amuthansakthivel Yes, I agree.

I know there is an built-in API for scrolling in Android, but what about iOS?
I am not sure it's possible to find elements by text in Android. But I know people usually find elements by "accessibility id". It's possible now.

Hi @asolntsev
Scrolling is actually painful stuff in android and ios, especially apps built using ionic. Please find the below logic which I used to scroll to an element.
We cannot rely on isDisplayed and isEnabled methods from appium.
Please let me know if you need any other info
static void scrollForMobile(By by) {
    String previousPageSource = "";
    while (isElementNotEnabled(by) && isNotEndOfPage(previousPageSource)) {
      previousPageSource = DriverManager.getDriver().getPageSource();
      performScroll();
    }
}

private static boolean isNotEndOfPage(String previousPageSource) {
    return !previousPageSource.equals(DriverManager.getDriver().getPageSource());
  }

  private static boolean isElementNotEnabled(By by) {
    List<WebElement> elements = DriverManager.getDriver().findElements(by);
    if (isAndroid()) {
      return elements.isEmpty();
    }
    /*
    Written this logic below to find if the element is actually visible in the screen
    In ios, even though the element is not in screen findElements returns list with size 1
    I cannot apply this logic to android as there is no visible attribute found for android.
     */
    if (!elements.isEmpty()) {
      return elements.get(0).getAttribute("visible").equalsIgnoreCase("false");
    }
    return true;
  }

private static void performScroll() {
    Dimensions dimensions = Dimensions.getInstance();
    if (isAndroid()) performScrollForAndroid(dimensions);
    else performScrollForIOS(dimensions);
  }

private static void performScrollForAndroid(Dimensions dimensions) {
    new AndroidTouchAction((PerformsTouchActions) DriverManager.getDriver())
        .press(PointOption.point(dimensions.getCenter(), dimensions.getScrollStart()))
        .waitAction(WaitOptions.waitOptions(Duration.ofSeconds(2)))
        .moveTo(PointOption.point(dimensions.getCenter(), dimensions.getScrollEnd()))
        .release()
        .perform();
  }

  private static void performScrollForIOS(Dimensions dimensions) {
    new IOSTouchAction((PerformsTouchActions) DriverManager.getDriver())
        .press(PointOption.point(dimensions.getCenter(), dimensions.getScrollStart()))
        .waitAction(WaitOptions.waitOptions(Duration.ofSeconds(2)))
        .moveTo(PointOption.point(dimensions.getCenter(), dimensions.getScrollEnd()))
        .release()
        .perform();
  }

@Setter
@Getter
public class Dimensions {

  private static Dimensions dimensions;

  private int scrollStart;
  private int scrollEnd;
  private int center;
  private int deviceHeight;

  private Dimensions() {
    Dimension dimension = DriverManager.getDriver().manage().window().getSize();
    this.scrollStart = (int) (dimension.getHeight() * 0.5);
    this.scrollEnd = (int) (dimension.getHeight() * 0.2);
    this.center = (int) (dimension.getWidth() * 0.5);
    this.deviceHeight = dimension.getHeight();
  }

  public static Dimensions getInstance() {
    if (Objects.isNull(dimensions)) {
      dimensions = new Dimensions();
    }
    return dimensions;
  }

@asolntsev Moreover, I have an youtube channel called testing mini bytes and I am going to make a video series on Selenid, its advantages and how to effectively use it. More power to you for creating this amazing library.
For now, I have created a selenide practice project and diving deep into the selenide code and tests code.
https://github.com/amuthansakthivel/SelenidePractice

@asolntsev - I have not tested this but simple google search is returning this result.
JavascriptExecutor executor = (JavascriptExecutor) appiumDriver;
HashMap<String, Object> scrollobj = new HashMap<String, Object>();
scrollobj.put("predicateString", "value == '" + predicateStringValueText + "'");
scrollobj.put("direction", "down");
executor.executeScript("mobile: scroll", scrollobj);

yes, in one Android project I used this code for scrolling:
  protected fun scroll(selector: ScrollBy): SelenideElement {
    val container = "new UiSelector().scrollable(true)"
    val script = "new UiScrollable($container).scrollIntoView(${selector.uiSelector})"
    return `$`(MobileBy.AndroidUIAutomator(script)).`as`(selector.uiSelector).shouldBe(visible)
  }

@amuthansakthivel and @asolntsev
Yes, current Appium touch actions is migrated to W3C standards. Not sure for iOS, but for Android scrolling like this: https://stackoverflow.com/questions/71037969/how-to-use-actions-or-do-scroll-in-app-in-java

private final static PointerInput FINGER = new PointerInput(TOUCH, "finger");

	public static void verticalSwipe(boolean toEnd, int swipeTimeout) {
		AppiumDriver appiumDriver = extractAppiumDriver();
		Dimension dimension = appiumDriver.manage().window().getSize();
		if (toEnd) {
			Point start = new Point((int) (dimension.width * 0.5), (int) (dimension.height * 0.9));
			Point end = new Point((int) (dimension.width * 0.2), (int) (dimension.height * 0.1));
			W3cActions.doSwipe(appiumDriver, start, end, swipeTimeout);
		} else {
			Point start = new Point((int) (dimension.width * 0.2), (int) (dimension.height * 0.2));
			Point end = new Point((int) (dimension.width * 0.5), (int) (dimension.height * 0.8));
			W3cActions.doSwipe(appiumDriver, start, end, swipeTimeout);
		}
	}

	public static void doSwipe(AppiumDriver driver, Point start, Point end, int duration) {
		Sequence swipe = new Sequence(FINGER, 1)
				.addAction(FINGER.createPointerMove(ofMillis(0), viewport(), start.getX(), start.getY()))
				.addAction(FINGER.createPointerDown(LEFT.asArg()))
				.addAction(FINGER.createPointerMove(ofMillis(duration), viewport(), end.getX(), end.getY()))
				.addAction(FINGER.createPointerUp(LEFT.asArg()));
		driver.perform(Collections.singletonList(swipe));
	}

Hi @admizh - I have already created a PR to add scroll to command with almost similar implementation. Please check - https://github.com/selenide/selenide-appium/pull/80


Windows build: Run CI via docker

Commit Message: Run Windows CI build in envoy-build-windows2019 docker container
Additional Description: This will enable us to control dependencies more closely and enable us to provision CI workers outside of AZP hosted workers more easily
Risk Level: Low
Testing: N/A
Docs Changes: N/A
Release Notes: N/A

cc @wrowe


Cannot read property 'connections' of undefined

Hi @jerosoler, I have noticed that while trying connecting to a node with 0 input while editor.force_first_input set to true, it causes a fatal error..its a bug i think... a check should be placed to confirm if that node has at least one input.

Hello @MehbubRashid
Fix in 0.0.29 ;)
Thanks for your work!

Awesome! Thanks for your hard work <3 <3


Don't install elog-gen.py and mako templates

These were actually getting installed into the BMC flash image, which isn't desirable.  Bitbake runs these straight from the source tree so removing this doesn't affect builds.
This does mean they wouldn't be installed into usr/share in the SDK, but it's not like that was in $PATH anyway.
https://gerrit.openbmc.org/c/openbmc/phosphor-logging/+/57999
Signed-off-by: Matt Spinler<EMAIL_ADDRESS>Change-Id: I65fff38bcdf82e8b812177d65a6918fc9abbd5fd

Defect PE00DVTT

CI appears to be complaining about the format of a python script that hasn't changed since 2017:
./tools/elog-gen.py:26:11: E275 missing whitespace after keyword
        if(i_parents[error] is not None):
          ^
./tools/elog-gen.py:30:7: E275 missing whitespace after keyword
    if(has_inheritance):
      ^
./tools/elog-gen.py:34:14: E275 missing whitespace after keyword
        while(len(errors) < len(i_errors)):
             ^
./tools/elog-gen.py:36:19: E275 missing whitespace after keyword
                if(error in errors):
                  ^
./tools/elog-gen.py:39:19: E275 missing whitespace after keyword
                if((not i_parents[error]) or (i_parents[error] in errors)):
                  ^
./tools/elog-gen.py:52:11: E275 missing whitespace after keyword
        if(i_parents[error] and (i_parents[error] not in i_errors)):
          ^
./tools/elog-gen.py:158:7: E275 missing whitespace after keyword
    if(not check_error_inheritance(errors, parents)):
      ^