Changes regarding Meilisearch v1.2.0

This issue gathers the changes related to the v1.1.0 of Meilisearch that will impact the integrations team.
📅  Release date: June 5th, 2023
The whole milestone of v1.2.0 is here!
⚠ The SDKs, which should be done by the release date, are only tier #1. Some of the features described here for tier #2 will also be ready for the release day. Check the features below to understand which tier will receive which feature.

🖖 Click here to check the current tiers state of the integrations:

  Understand everything about tiers here.

Integration
Tier

Javascript
#1

PHP
#1

Instant Meilisearch
#1

Python
#1

Ruby
#1

Go
#1

Strapi
#2

.NET
#2

Rails
#2

Rust
#2

Symfony
#3

Java
#3

Firebase
#3

docs-searchbar.js
#3

Dart
#3

Swift
#3

Vuepress
#3

Gatsby
#3

⚠ If no change in the public API is added during the bump pull requests, there is no need for a new release, according to the Integrations team's versioning policy guideline.

 Delete documents by filter
Related to:

issue: https://github.com/meilisearch/meilisearch/issues/3477
spec: https://github.com/meilisearch/specifications/pull/236

It gives the user the possibility to use a filter expression to remove documents.
Adds support to the filter parameter in the following routes:

POST /indexes/{index_uid}/documents/delete in the code, look for: deleteDocument, DeleteOneDocumentAsync,
POST /indexes/{index_uid}/documents/delete-batch in the code look for: deleteDocuments.

In the delete-batch one, note that sending a list of ids is still valid, not only the new filter parameter. Any document matching the filter will be deleted if that variant is used.
Overall recommendations for the integrations developers to implement it:

When the language support overloads, create a new method with the new parameter type.
When the language support named parameters, move ids to a parameter and add filter alongside it.
When the language does not support any of it, create a new method called deleteDocumentsByFilter(filter)/delete_documents_by_filter(filter)

🤩 Affected integrations: All the integrations from tier #1.

 Retrieve documents by filter
Related to:

issue: https://github.com/meilisearch/meilisearch/issues/3477
spec: https://github.com/meilisearch/specifications/pull/234

Gives the user the possibility to use a filter expression to retrieve documents, like in search.
The recommendation is to:

Create a new method called: fetchDocuments (🐍_case 🐫Case rule applies) which calls behind the scenes the new POST /indexes/{index_uid}/documents/fetch.
Create a new query class called FetchDocumentsQuery with these fields:

int offset
int limit
String[] fields
String filter

Also, TBD: Add the deprecation warning in the getDocuments for the users using the resources available in the language eg. @Deprecated('migration') on Java/Dart, Obsolete on C#, etc. Add a library if necessary.
🤩 Affected integrations: All the integrations from tier #1.

IS EMPTY filter operator
Related to:

issue: https://github.com/meilisearch/meilisearch/issues/3615
spec: https://github.com/meilisearch/specifications/pull/232

⚠ Dart is the only SDK we maintain which have a DSL when it comes to declaring the filters. So, no need to implement anything in any of the other SDKs.
Add the IS EMPTY new operator to the filterExpression DSL on the Dart SDK.
🤩 Affected integrations: Only meilisearch-dart.

IS NULL filter operator
Related to:

issue: https://github.com/meilisearch/meilisearch/issues/3615
spec: https://github.com/meilisearch/specifications/pull/232

⚠ Dart is the only SDK we maintain which have a DSL when it comes to declaring the filters. So, no need to implement anything in any of the other SDKs.
Add the IS NULL new operator to the filterExpression DSL on the Dart SDK.
🤩 Affected integrations: Only meilisearch-dart.

since fetchDocuments is POST, does it make sense to also name its body FetchDocumentsQuery ? why not FetchDocumentsBody ?

For delete by filter:

When the language support named parameters, move ids to a parameter and add filter alongside it.

This means a user could send both ids and filters in the same request. Based on the spec I think delete by filter has to be a new separate method.
* Introduce a new POST /indexes/:index_uid/documents/delete route that lets you delete documents by filter
* The payload must be an object only containing a filter field, i.e.: { "filter": "doggo = bernese" }
* A new error has been introduced in case the specified filter is wrong or empty: invalid_document_delete_filter

The current delete_document is a delete request with the UID in the URL. Delete by filter is a post route with only the filter in the post body. So I think mixing the two is going to cause issues. Does this make sense or am I missing something?

I have this ready here is anyone wants ideas for a starting point.
In working on it there is one thing I think is worth mentioning that may catch end users (because it got me for a minute :smiley:). If you forget to add the fields to the filterable attributes and use them for deletes/gets you don't get an error. It acts as everything worked as expected and gives successful responses, it just doesn't do anything.
Another question I have is why add the fetchDocuments method? getDocuments adds a filter parameter so the only difference between fetchDocuments and getDocuments is one uses the post route while the other uses the get route. But the user of the client never sees this so they would end up with two different methods that do the exact same thing.

What about using deleteDocuments with /documents/delete route and stop using /delete-batch?
In the same vain, what about using getDocuments with the  documents/fetch route and stop using GET documents/ ?
Both previous routes seem to be just a lesser performant version of the newly introduced routes.

This is doable without a breaking change since the end user doesn't see this part. Have you measured performance between the options to see the new ones are more performant? If not I may run some tests to see what the difference would be.

Hey @meilisearch/engine-team is the POST /documents/fetch route more performant than GET /documents/?

This is doable without a breaking change since the end user doesn't see this part.

While we can avoid a breaking change on the getDocuments I don't think we can avoid one with deleteDocuments as most of the function parameters are deleteDocuments(ids: str[]). Like @brunoocasali said, overloads might avoid that in some languages but it might be worth making that breaking change now on the others (and maybe even on the one accepting overloads).
I think /delete-batch might be deprecated in v2, can you confirm @gmourier ?

I think /delete-batch might be deprecated in v2, can you confirm @gmourier ?

Yes, it will probably be marked as deprecated for v1.3 to be removed for v2.0. It could also be the case for the GET /indexes/:indexUid/documents since we are introducing POST /indexes/:indexUid/documents/fetch

Hey @sanders41, it could be interesting to see the difference.
tbh, I don't expect it to have any difference. Both go through the same pipeline; thus, the only difference is the query parameter parser vs the json parser, which should take a few µs.
On the other side, though, an URL is limited to 2048 characters, which means a large filter won't fit in the GET route (and a few users already told us that they wanted this route to query thousands of IDs).
Also, I don't know how this impacts you (=the integration), but the GET route only supports the string syntax of the filter, while the POST route support all the strange syntax we introduced (with the array of array of string thingy)

I setup a test and the get route is slightly more performant than the post post route, but not by enough be a deciding factor if there are other benefits to the post route. I did a few different runs with 1000 runs of each version and they were always within a second of each other. I made a branch here if anyone wants to play with it. To run the test run python performance_test.py (after installing the dependencies)

@ahmednfwela

since fetchDocuments is POST, does it make sense to also name its body FetchDocumentsQuery ? why not FetchDocumentsBody ?

It is to keep the pattern between all the SDKs :) And even query meaning query-string in the end, it is more straightforward for the user to have a type more aligned with the concept of being a query/param or something like this.

What about using deleteDocuments with POST /documents/delete route and stop using POST /delete-batch?
In the same vain, using getDocuments with the POST /documents/fetch route and stop using GET documents/ like

This is doable without a breaking change since the end user doesn't see this part.

This IS a breaking change from my POV, primarily because of the issue I've raised here https://github.com/meilisearch/integration-guides/issues/264.
Users will upgrade their SDKs because it is way easier to run an npm install than update the Meilisearch instance. And I expect more users complaining in our repositories that, miraculously, my SDK is not working after the last update.
Because the developers usually update their SDKs and don't do the same with Meilisearch, they intentionally use the new features now available through the new versions and only realize the mistake in production.
In this particular case, if we accept internally on deleteDocuments a new route: POST /documents/delete, the users who silently update their SDKs will start having exceptions without changing their code because they may not have the new Meilisearch runtime, that's not acceptable since we also have stable SDKs like PHP.
I also don't like the idea of having a deleteDocumentsByFilter, but by far is the safest option right now to avoid any issues, as I mentioned above, in the near future. The same will happen with the getDocuments.
⚠ By the way, my description of this issue was not great, sorry community about that.

This IS a breaking change from my POV, primarily because of the issue I've raised here https://github.com/meilisearch/integration-guides/issues/264.

Fair enough, I see your point here. It's not breaking strictly from an API standpoint, but you are right it is breaking because of the interaction with Meilisearch.

To all watching this thread, I've updated the "Delete documents by filter" section.
We should keep maintaining the current deleteDocuments.
It will avoid a silent update + break for the current users. Also, I don't think the "Get documents by filter aka fetch" needs any change based on the current feedback.

About deleteDocuments, I understand your point of view. We did tell the user that the SDK's would be retro-compatible between versions, which would not be the case in SDK's without the overload possibility.
About fetchDocuments and getDocuments, following my suggestion on #264, we could catch the 404 of the new POST  /documents/fetch and in which case use GET /documents.
fetchDocuments seems very counter intuitive in what it does. I'm not able to now by the naming what the difference is with getDocuments. If we do go for two different methods, maybe we should be consistent with the new delete route and name it getDocumentsByFilter.

how about the sdk clients merge both methods into one,but select which api to call based on the passed parameter ?
for example if filter is passed ,call the POST method if not, use the GET method

@ahmednfwela, unfortunately this does not work on most typed language :( But for the other it could be a great option

I thought they were talking about the deleteByFilters route, my bad.
getDocuments accepts the same parameters as fetchDocuments (see spec). Thus, I don't think we're able to know which route to use based on the parameters.

I think the idea is if the filter parameter is not None the method would use the post route and if not use the get route. So with that the method can decide which route to use. The post route is going to fail for Meilisearch < 1.2.0, but the same is true for the get route if a filter is included.

You're right. I like the solution :)

I have my PR updated to implement this if anyone wants to see what it ends up looking like.

Hey @sanders41
I'll let @brunoocasali confirm what I said.
We added some additional measure to protect the user in the getDocuments method, you can see an example here: https://github.com/meilisearch/meilisearch-js/pull/1493
It's basically what you did but we added a hint the error message in case of a failure in the HTTP request (example here)

MeiliSearchCommunicationError: Method Not Allowed
Hint: It might not be working because you're not up to date with the Meilisearch version that getDocuments call requires.

The hint message may be improved of course.
We alse added in the comments section that would appear in the IntelliSense hover tool that the feature only works above v1.2 (see example here).
and for deleteDocuments, if possible, we would like to use that method and not have to create a new one. This is possible in some languages that are not typed, that are permissive (typescript), and that accept overloading, see example here.
What do you think?

This all sounds good to me, but I have one question. When I try sending a bad parameter I get a MeilisearchApiError, but you are catching a MeiliSearchCommunicationError. Do we need to catch both?

The bad parameter error should not provide the hint as it means that the route exists but that the user wrongly formatted their parameter.
In this case, the error returned by the MeilisearchAPIError should be enough for them to pinpoint the error.
wdyt?

For the languages that lists the error_codes. There is a new one when filter during document deletion is invalid:
invalid_document_delete_filter

This pre-release is finished. All the remaining work was moved to our own repositories, closing this!
Thanks team you're the best! 🎉
Thanks to our meilistars @sanders41 and @ahmednfwela for dealing with this pre-release in Python & Dart for us, it was incredible helpful, you folks rock! 💪 🎉


Read structural data from a file

Hi,
In version 0.9 you could read a SDMX structural file instead of having to get it from the web service
req = sdmx.Request('')
msg = req.codelist(fromfile=filename)
This has disappeared with version 1.0.1. Is there still the option to load structural data using files?
Thanks,
Hubert

Hi,
sorry for this backwards incompat.
Now there is the pandasdmx.read_sdmx() function. It is defined in
pandasdmx.api.py. Please let me know if this doesn't work for you.
Rgds, Leo
On 17/06/2020, HubertBIS<EMAIL_ADDRESS>wrote:

Hi,
In version 0.9 you could read a SDMX structural file instead of having to
get it from the web service
req = sdmx.Request('')
msg = req.codelist(fromfile=filename)
This has disappeared with version 1.0.1. Is there still the option to load
structural data using files?
Thanks,
Hubert
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/dr-leo/pandaSDMX/issues/179

Hi,
Thanks for the quick answer. Yes read_sdmx() works fine, however the result of the conversion to pandas (previously write()) is also quite different.
Moreover the content of the Type column seems a bit strange:
resp = sdmx.read_sdmx(dsdfile,format = 'XML')
df = sdmx.to_pandas(resp.codelist)

Rgds, Hubert

Hubert,
your feedback is much appreciated.
Apologies. Due to my blindness screenshots are of Little use to me. So
plain text would help me understand the Problem.
Granted that the shift from v0.9 to v1.0 has brought About some
oddities alongside a number of, I think, important improvements some
of which are more visible to the user than others.
v1.0 is essentially an almost complete rewrite by a former
collaborator who initially wanted to add one feature but ended up in
re-inventing lots of wheels. We split over mounting disagreements.
See, e.g., #145. A related Problem is my limited dev time thanks to
two Kids. Moreover, I have a new pet Project: an SDMX Driver for
intake. If you work at the BIS as
your GH Name suggests, you might be interested.
I'll do my best to fix the issue once understood. Or, even better, if
you find the time, do a PR. The writer module is fairly clean and
reasonably well-designed, so it should not be too hard.
Leo
On 17/06/2020, HubertBIS<EMAIL_ADDRESS>wrote:

Hi,
Thanks for the quick answer. Yes read_sdmx() works fine, however the result
of the conversion to pandas (previously write()) is also quite different.
Moreover the content of the Type column seems a bit strange:
resp = sdmx.read_sdmx(dsdfile,format = 'XML')
df = sdmx.to_pandas(resp.codelist)

Rgds, Hubert
--
You are receiving this because you commented.
Reply to this email directly or view it on GitHub:
https://github.com/dr-leo/pandaSDMX/issues/179#issuecomment-645471095

v1.1.0 has just been released. Code-breaking changes compared to v0.9 persist for better or worse. Those relating to the pandas writer are intended, others could perhaps be mitigated if I had more dev time or others contributed code.


Generalised Conv1x1 to n dimensions

Allows Conv1x1 to be used with 1, 2, and 3d tensors

No problem. How does that look?


fix(drag-drop): dragging class not being applied on drop container

Fixes the cdk-drop-dragging class not being applied to the drop container after 5d0ec23b1d258504ab786e76f80bd9a1a76cd052. The introduction of the onStable call caused the event to be bound outside the NgZone.

Bumping this to a P2, because it affects more than just the class not being applied.


AKOfflineRenderNode doesn't render any sound.

I utilized AKOfflineRenderNode to process recorded voice. The idea is to record voice and save it into the file. Next apply some effects to this file and save combined voice+effects into file.
I have successful result on my iPhone 6s running on iOS 11.0.3 but on other devices running on iOS 11+(for example last generation of iPad on 11.0.3) I always have "silent" file with same size about 60 Kb. I attached one for reference(rec.zip). Also the issue 100% reproducible on iOS 11 simulator.
Here is my setup(I removed effects setup since offline render doesn't work even on clean recording):
    fileprivate func setupAudioKit(){
        AKSettings.enableLogging = true
        AKAudioFile.cleanTempDirectory()

        AKSettings.bufferLength = .medium
        AKSettings.numberOfChannels = 2
        AKSettings.sampleRate = 44100
        AKSettings.defaultToSpeaker = true

        do {
            try AKSettings.setSession(category: .playAndRecord, with: .allowBluetoothA2DP)
        } catch {
            AKLog("Could not set session category")
        }

        mic = AKMicrophone()
        micMixer = AKMixer(mic)

        recorder = try? AKNodeRecorder(node: micMixer)

        if let file = recorder.audioFile {
            player = try? AKAudioPlayer(file: file)
            player.looping = true
        }
        playerMixer = AKMixer(player)
// Effects setup
        offlineRenderer = AKOfflineRenderNode(playerMixer)
        AudioKit.output = offlineRenderer

        AudioKit.start()
}

Here is export method:
     fileprivate func render() {
        offlineRenderer.internalRenderEnabled = false
        player.schedule(from: 0, to: player.duration, avTime: nil)

        let renderURL = URL(fileURLWithPath: FileHelper.documentsDirectory() + "rec.m4a")

        let sampleTimeZero = AVAudioTime(sampleTime: 0, atRate: AudioKit.format.sampleRate)
        player.play(at: sampleTimeZero)
        do {
            try offlineRenderer.renderToURL(renderURL, seconds: player.duration)
        } catch {
            print(error)
        }
        player.stop()
        offlineRenderer.internalRenderEnabled = true
    }

Arg.  I'll look into it.  I made the Offline render to address pre iOS 11 offline rendering.  Maybe the offline render node needs to be altered to use the new AVAudioEngine offline rendering.

Well I didn't troubleshoot the issue in your example, but I was able to test the offline render node on my 6s running 11.0.3 and it still works.  The test I used was the example iOS project SongProcessor.  Keep us in the loop on your progress with this, please.  It will be good to pinpoint the OS related changes so we can better generalize and document things.

@dave234 thank you for investigating the issue. I utilized a code from SongProcessor to build my App. So I've just downloaded the latest source code from Github(4.0.2) and build AudioKit framework from source. Next I run SongProcessor example on iPhone 6 - iOS 11 simulator and get this strange silent file(mixDown.zip)
My XCode version: Version 9.0 (9A235).

So just to make sure I understand correctly.  The silent file was produced from the SongProcessor example?

Yep, I input 2 as a number of loops and then uploaded result file from: /Users/Yuri/Library/Developer/CoreSimulator/Devices/E508F7BA-A400-4B13-A47B-E6512CBCD431/data/Containers/Data/Application/DFF0F2FC-15C3-4AC2-91B6-520DC4C5ED92/tmp/mixDown.m4a

Can you SongProcessor on your iPad?
On Mon, Oct 23, 2017 at 11:53 AM, ygoncharov-ideas<EMAIL_ADDRESS>
wrote:

Yep, I input 2 as a number of loops and then uploaded result file from:
/Users/Yuri/Library/Developer/CoreSimulator/Devices/
E508F7BA-A400-4B13-A47B-E6512CBCD431/data/Containers/
Data/Application/DFF0F2FC-15C3-4AC2-91B6-520DC4C5ED92/tmp/mixDown.m4a
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/AudioKit/AudioKit/issues/1096#issuecomment-338760428,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AEIkSwyFTFlh_A5xSOGTtvWbWSK2wwuWks5svOCPgaJpZM4QC-MK
.

Unfortunately I will be able to run SongProcessor on iPad only tomorrow.
BTW, added AudioKit framework as a source code to the project and try to debug it.
So I put breakpoint at first line of method:
-(BOOL)renderToFile:(NSURL * _Nonnull)fileURL
            seconds:(double)seconds
           settings:(NSDictionary<NSString *, id> * _Nullable)settings
              error:(NSError * _Nullable * _Nullable)outError{

I checked out error at it wan't nil. Here is a screenshot -

Hi,
I have a very similar issue on iOS 11 (not tested on iOS 10), but in my case, the file rendered by AKOfflineRenderNodehas a long stretch of silence in the beginning. The silent part is about as long as the duration of the original file.
If I do something like offlineRenderer.renderToURL(renderURL, seconds: player.duration * 2) I get a file where the first half (not exactly half, but pretty close) is silent, and then the rest contains the expected result.
Happy to post some code if that would be helpful.

I've just tried to increase duration  player.duration * 2 but AKOfflineRenderNode produces silent audio with double length of file.

In my case, the duration of the silent part relative to the duration of the part with signal seems to vary depending on the length of the original file.
When player.duration is around 220 seconds I get about 50/50 silence/signal when I render a file of length player.duration * 2.
For a shorter file (14 seconds) I have to render player.duration * 16 seconds to see some signal at the end of the rendered file...

Can you SongProcessor on your iPad?

@dave234, instead of iPad I run SongProcessor on iPhone 6 with iOS 11.0.3(15A432) and then shared result to my Mac via AirDrop. I still got silent file - mixDown-iPhone6.zip
Also I disabled "Inter-App Audio" and Background Mode capabilities since it requires to register separate bundle id to run the App on real devices. But I guess it used for playback and communication with iTunes so shouldn't be a root cause of reported problem.

@dave234, in meanwhile I decided to implement solution based on AVAudioEngine. Details at: https://developer.apple.com/videos/play/wwdc2017/501/
Here is a rough code for Offline Renderer:
class OfflineRenderer: AKNode {
    public func enableManualRendering() {
        do {
            AudioKit.engine.stop()

            let maxNumberOfFrames: AVAudioFrameCount = 4096
            try AudioKit.engine.enableManualRenderingMode(.offline, format: AudioKit.format, maximumFrameCount: maxNumberOfFrames)

            try AudioKit.engine.start()
        } catch {
            print("could not enable manual rendering mode, \(error)")
        }
    }

    public func disableManualRendering() {
        AudioKit.engine.disableManualRenderingMode()
    }

    public func renderToURL(_ url: URL, length: AVAudioFramePosition, settings: [String : Any]) throws {
        let outputFile = try AVAudioFile(forWriting: url, settings: settings)
        let engine = AudioKit.engine

        let buffer: AVAudioPCMBuffer = AVAudioPCMBuffer(pcmFormat: engine.manualRenderingFormat,
                                                        frameCapacity:  engine.manualRenderingMaximumFrameCount)

        while engine.manualRenderingSampleTime < length {
            do {
                let framesToRender = min(buffer.frameCapacity, AVAudioFrameCount(length - engine.manualRenderingSampleTime))
                let status = try engine.renderOffline(framesToRender, to: buffer)

                if status == .success {
                    try outputFile.write(from: buffer)
                }
            } catch {
                print("render failed, \(error)")
            }
        }
    }
}

Here an example of usage:
        let settings = [
            AVFormatIDKey : kAudioFormatMPEG4AAC,
            AVSampleRateKey: 44100.0,
            AVNumberOfChannelsKey: 2,
            AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue
            ] as [String : Any]

        let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
        let renderURL = URL(fileURLWithPath: documentsPath + "processed.m4a")
        let sampleTimeZero = AVAudioTime(sampleTime: 0, atRate: AudioKit.format.sampleRate)

        offlineRenderer.enableManualRendering()

        player.schedule(from: 0, to: player.duration, avTime: nil)
        player.play(at: sampleTimeZero)

        do {
            try offlineRenderer.renderToURL(renderURL, length: player.audioFile.length, settings: settings)
        } catch {
            print(error)
        }
        player.stop()

        offlineRenderer.disableManualRendering()

I've tested it on simulator and problematic iPhone and got correct processed recordings for both. I found 2 inconveniences with this approach: App should be targeted to iOS 11+ and render process is synchronous.
Could you please review my code and help to adjust it into AudioKit architecture because I'm not sure how it should be integrated. Also any help to make a rough code more production like is appreciated. Ideally we can make new feature pull request .

This is great!  Thank you for contributing!  There's a bit of an API flaw on my part when implementing the offline render node.  I made it for backward compatibility with < iOS 11.0, but didn't create an API where the implementation could be swapped.  May thinking was that a separate node would be preferable so that audio could continue to play on the rest of the engine while a single "path" could be manually rendered.  This has proven to be a mistake.
So the biggest inconsistency with the AVAudioEngine manual rendering and my implementation is the use of a separate node rather than rendering the output node.  I think if you are going to implement offline rendering using the new enableManualRenderingMode under the hood, that it should be a method on the global AudioKit, rather than a node because that better reflects the behavior.  I'm tempted to just make the offline render node unavailable in iOS 11.0, and implement offline rendering on AudioKit, then call it a day.  This is probably the most straightforward way of dealing with the issue.
However, if you want to try to make the offlineRender node work >= iOS 11.0, I think a different approach is necessary (hacks).  Since I am not able to reproduce the behavior locally on my 6S, do you think you could try something for me?  Just after the call offlineRenderer.internalRenderEnabled = false (in the original snippet), try playing around with enableManualRenderingMode with/without stopping the engine, or any other ideas around sending the "We're rendering offline" message to all of the nodes.  If you can't produce results easily with these sorts of hacks, I vote to make the offline render node unavailable >= iOS 11, and to re-implement offline rendering with an API that is consistent with AVAudioEngine's offline rendering, and that works both pre iOS 11 and post iOS 11 (i.e. render the output node rather than a separate node in the chain).

@dave234, thank you for feedback!

should be a method on the global AudioKit

I absolutely agree with you. I will create an extension for AudioKit class.

I'm tempted to just make the offline render node unavailable in iOS 11.0

Please don’t rush. Something “mystical” happens around offline render. When I started to develop my App I had same problem for my iPhone 6s.
I decided that it software problem and updated my Mac OS, XCode and iOS version. But problem remained. After a few hours of fight the problem disappeared  by itself. I didn’t do any reasonable fix. Next I started to test on iPad and problem appeared on iPad. You can't believe but problem on iPad disappeared on iPad after several hours of testing and now randomly appears. Now I have iPhone 6 where problem is reproducible 100% of time. So it looks like offline renderer(AudioKit) conflicts/fights with other process for audio service privileges and when it won then everything works well. I also noticed that when tried to play remote(streaming) recording via AVPlayer in other ViewController. AudioKit behaved really strange and recorder a voice with x3 extra speed. I can advice to test SongProcessor on “clean” device with iOS 11. By clean I mean device that was never used with AudioKit.

try playing around with enableManualRenderingMode with/without stopping the engine

I understood idea of your hack. I will check it on problematic iPhone 6 and let you know results.

re-implement offline rendering with an API that is consistent with AVAudioEngine's offline rendering, and that works both pre iOS 11 and post iOS 11

Are you sure? enableManualRenderingMode marked as @available(iOS 11.0, *)

I tried to enable manual rendering mode for SongProcessor and tested on iPhone 6s on iOS 11.
    fileprivate func mixDownLoops(url: URL, loops: Int) throws {
        offlineRender.internalRenderEnabled = false
        if #available(iOS 11, *) {
            do {
                let maxNumberOfFrames: AVAudioFrameCount = 4096
                try AudioKit.engine.enableManualRenderingMode(.offline, format: AudioKit.format, maximumFrameCount: maxNumberOfFrames)
            } catch (let error) {
                print("\(error)")
            }
        }
....

I saw following error: Error Domain=com.apple.coreaudio.avfaudio Code=-80801 "(null)"
Next I added engine stop/start methods:
    fileprivate func mixDownLoops(url: URL, loops: Int) throws {
        offlineRender.internalRenderEnabled = false
        if #available(iOS 11, *) {
            do {
                AudioKit.stop()

                let maxNumberOfFrames: AVAudioFrameCount = 4096
                try AudioKit.engine.enableManualRenderingMode(.offline, format: AudioKit.format, maximumFrameCount: maxNumberOfFrames)

                AudioKit.start()
            } catch (let error) {
                print("\(error)")
            }
        }
...

But it failed on try offlineRender.renderToURL(url, seconds: duration) with error:
Error Domain=AKOfflineRenderAudioUnit Code=1 "Node needs to be connected and engine needs to be running
Do you have other scenarios to try?

Thanks so much for helping with this.

Are you sure? enableManualRenderingMode marked as @available(iOS 11.0, *)

My thinking is that if >= iOS 11, we use the new iOS 11 AVAudioEngine manualRender under the hood, and if < iOS 11, we use the (previously working) node approach, but devise a common interface to both of those methods (i.e. AudioKit.renderToURL(url, seconds: 123.45) ).

Do you have other scenarios to try?

In AKOfflineRenderNode.m, could you try setting pullFlags to kAudioOfflineUnitRenderAction_Render?
Sort of a long shot, but maybe worth a try.

@dave234 sorry for a delay.
As you recommended I set:
        AudioUnitRenderActionFlags pullFlags = kAudioOfflineUnitRenderAction_Render;
        AUAudioUnitStatus status = _inputBus.pullInput(&pullFlags, &ts, renderLen, 0, pullInputBlock);

Unfortunately it didn't give any positive result. SongProcessor's recording is still silent.
If I add  AudioKit.engine.enableManualRenderingMode then I still see Error Domain=AKOfflineRenderAudioUnit Code=1

@dave234 do you have any updates or fixes for code to try?

@dave234 in meanwhile I tried to test SongProcessor with XCode 9.1(9B55) on iOS 11.1. Unfortunately, result is same. I still get silent audio.
Also I tested solution based on AVAudioEngine's enableManualRenderingMode but it doesn't work as expected. I can render(export) recording only once. So when I start new recording then AKNodeRecorder doesn't record any sound and I don't see any error in log.
It looks like there is no possible way to render offline sound on iOS 11.

Ok I've got a working offline render function implemented as AudioKit.renderToFile, and I've deprecated AKOfflineRenderNode.  Thanks for finding this.
https://github.com/AudioKit/AudioKit/pull/1114

I do think it is handy to have the offline rendering NOT related to the main audio path. What if I want to render something different offline in the background?

@eljeff I’m with you on this.  It’s a bit of work though.  Currently AudioKit uses a global AVAudioEngine, I believe that we will need to make all audiokit functions pass around an audioEngine if we want to achieve this.  We could default to a global engine if audioEngine argument is missing.  I also think that it’s totally worth it to do this.  Not only will we have more control over offline rendering; we would also gain the ability to  let AudioKit act as a “slave” engine.  For my projects it’s worth it to bounce tracks without stopping playback.  I have some thoughts on how to do this, I’d love to hear yours.

I actually figured out a hack....
I routed the offlinenode to a mixer, plugged that into the output, then muted the mixer.
Seems to work!

I'm curious; do you know if this would work with playback from AKSequencer (i.e., MIDI)?

It will be good if you share demo project with recorded voice + reverb effect and then save the filtered file and then share it.

I'm curious; do you know if this would work with playback from AKSequencer (i.e., MIDI)?

No, you can't right now but we're working on it!

It will be good if you share demo project with recorded voice + reverb effect and then save the filtered file and then share it.

Except the share part, this is what RecorderDemo does.

Hi. Thanks for your response, it worked. Currently i again need your help. i have to add echo effect. in swift i tested few codes we use this to add echo
    let echoNode = AVAudioUnitDistortion()
    echoNode.loadFactoryPreset(.multiEcho1)

but how we can add echo in our audiokit?

Reporting that I have the same problem with SongProcessor demo. When I export default app generated guitar samples, it turns out to be a silent file. Built it from Xcode 9.4.1 into an Ipad Mini with iOS 9.3.
I'm trying it because I can't make offline render to work (I need to support iOS < 11).
I need export audio direct from player, modified by AKTimePitch. My last try was with self.player.audioFile?.exportAsyncronous method, but it returns me the original sound without volume/pitch/tempo changes. (renderToFile works great with iOS >= 11).
Please, can anyone dealing with same problem shed some light on how to proceed?

I'm curious; do you know if this would work with playback from AKSequencer (i.e., MIDI)?

No, you can't right now but we're working on it!

Is there any progress to report on offline rendering of MIDI?


EDGDEMATIC-26 - Improvement: Making system user configurable

EDGDEMATIC-26 - update api key for edge-dematic


Implement pyproject.toml for PyPI deployment

I've restructured the project for PyPI deployment by replacing the old configuration files and adjusting the project structure.
Key Changes:

Implemented pyproject.toml:

Replaced setup.cfg and requirements.txt with pyproject.toml to align with modern Python packaging standards and prepare the project for easy distribution via PyPI.
Updated dependencies, development dependencies, and scripts in the new configuration.

Restructured Project Folders:

Adjusted the folder structure to meet standard packaging practices, ensuring compatibility for future releases.
Refactored source files into the appropriate directories.

Removed Unnecessary Files:

Deleted redundant configuration files such as setup.cfg and requirements.txt, as they are no longer needed with the switch to pyproject.toml.

Key Improvements:

The project is now ready for PyPI deployment.
Simplified and modernized dependency and environment management.
Streamlined project setup, making it easier for users to configure and use the project in their own environments.

I have reviewed the changes and everything looks good. I will now proceed to publish a pre-release version to PyPI and test it in an isolated environment to ensure it works properly.


fails to build with aeson-2.2?

For Stackage Nightly
       /home/curators/work/unpack-dir/unpacked/aeson-schemas-<IP_ADDRESS>-fc3271e9dbf1b79552f89b6538d5581ed110a857d0ed3db972877bd8e6f2638
2/bench/Utils/DeepSeq.hs:16:10: error: [GHC-39999]
           • No instance for ‘NFData BndrVis’
               arising from a use of ‘Control.DeepSeq.$dmrnf’
           • In the expression: Control.DeepSeq.$dmrnf @(Dec)
             In an equation for ‘rnf’: rnf = Control.DeepSeq.$dmrnf @(Dec)
             In the instance declaration for ‘NFData Dec’
          |
       16 | instance NFData Dec
          |          ^^^^^^^^^^

       /home/curators/work/unpack-dir/unpacked/aeson-schemas-<IP_ADDRESS>-fc3271e9dbf1b79552f89b6538d5581ed110a857d0ed3db972877bd8e6f2638
2/bench/Utils/DeepSeq.hs:51:10: error: [GHC-39999]
           • No instance for ‘NFData BndrVis’
               arising from a use of ‘Control.DeepSeq.$dmrnf’
           • In the expression: Control.DeepSeq.$dmrnf @(TypeFamilyHead)
             In an equation for ‘rnf’:
                 rnf = Control.DeepSeq.$dmrnf @(TypeFamilyHead)
             In the instance declaration for ‘NFData TypeFamilyHead’
          |
       51 | instance NFData TypeFamilyHead
          |          ^^^^^^^^^^^^^^^^^^^^^

Fixed by #94


Allow disabling creation of the HPA in raw deployment mode

What this PR does / why we need it:
Which issue(s) this PR fixes :
Fixes #2131
Type of changes
Please delete options that are not relevant.

[x] Bug fix (non-breaking change which fixes an issue)
[x] This change requires a documentation update

Special notes for your reviewer:

Please confirm that if this PR changes any image versions, then that's the sole change this PR makes.

Checklist:

[x] Have you added unit/e2e tests that prove your fix is effective or that this feature works?

cat <<EOF| kubectl apply -f -
apiVersion: "serving.kserve.io/v1beta1"
kind: "InferenceService"
metadata:
  annotations:
    "serving.kserve.io/autoscalerClass": "none"
    "serving.kserve.io/deploymentMode": "RawDeployment"
  name: "sklearn-irisv2"
spec:
  predictor:
    model:
      modelFormat:
        name: sklearn
      runtime: kserve-mlserver
      storageUri: "gs://seldon-models/sklearn/mms/lr_model"
EOF

[ ] Have you made corresponding changes to the documentation?

Release note:

Disable creating HPA component with the `serving.kserve.io/autoscalerClass: none` annotation.

@andyi2it Actually if we disable the HPA,  how can user modify the replica of the isvc?

@yuzisun The issue pertains to the use case where they use external load balancers like KEDA. In such case they can provide autoscaler class as None and manage the scaling there.

Wondering if we should have a more native integration with KEDA, people may think that once set to none they can control the replica but in fact there is no way to set the replica number

@yuzisun The issue pertains to the use case where they use external load balancers like KEDA. In such case they can provide autoscaler class as None and manage the scaling there.

Wondering if we should have a more native integration with KEDA, people may think that once set to none they can control the replica but in fact there is no way to set the replica number

Didn't notice that when autoscaler class is None, the user can not set the replicas here. Will be good if can let user set it like using the MinReplicas or set both Min Max to the same value.
For native integration with KEDA, it will be good to see it in the future in raw deployment mode as KEDA supports HTTP as well.

@yuzisun The issue pertains to the use case where they use external load balancers like KEDA. In such case they can provide autoscaler class as None and manage the scaling there.

Wondering if we should have a more native integration with KEDA, people may think that once set to none they can control the replica but in fact there is no way to set the replica number

Didn't notice that when autoscaler class is None, the user can not set the replicas here. Will be good if can let user set it like using the MinReplicas or set both Min Max to the same value.
For native integration with KEDA, it will be good to see it in the future in raw deployment mode as KEDA supports HTTP as well.

@lizzzcai @andyi2it Currently deployment replica field is ignored as it is not allowed setting it when using HPA, the question is that there is no way for kserve to know if people are using external autoscaler like KEDA or not and when it is expected to set the replica field.

@lizzzcai @andyi2it Currently deployment replica field is ignored as it is not allowed setting it when using HPA, the question is that there is no way for kserve to know if people are using external autoscaler like KEDA or not and when it is expected to set the replica field.

I am not so familiar with raw deployment here, not sure if we can use the new annotation "serving.kserve.io/autoscalerClass": "none" as an indicator. If it is none, then the controller will not ignore the replicas.    However, this can be refined in a new issue as well if this PR is good enough to merge.

@lizzzcai @andyi2it Currently deployment replica field is ignored as it is not allowed setting it when using HPA, the question is that there is no way for kserve to know if people are using external autoscaler like KEDA or not and when it is expected to set the replica field.

I am not so familiar with raw deployment here, not sure if we can use the new annotation "serving.kserve.io/autoscalerClass": "none" as an indicator. If it is none, then the controller will not ignore the replicas. However, this can be refined in a new issue as well if this PR is good enough to merge.

I think none is confusing as kserve can’t decide if people are using it without autoscaler or using external autoscaler. So I think we need another option for “external” for keda and in this case the replica is managed by Keda.

/lgtm
/approve

Thanks for adding this. I'm interested in using it because KServe doesn't currently provide control over everything that K8s offers in the HPA spec, for example we can't use anything underneath the behavior field.


IPv6 MLD listener report going to wrong interface

Describe the bug
I'm running opnsense virtualized inside proxmox; LAN/WAN are both virtio interfaces, which are each mapped to a bridge in proxmox, and the bridges map to two physical interfaces. My network has several unifi switches, and I have IGMP snooping configured on several VLANs on the internal LAN. This results in one of the switches to send out MLD queries for IPv6, to determine what multicast addresses a host/port is interested in. I confirmed that these multicast queries arrive correctly at the bridge in proxmox, and in turn in the virtio interface in opnsense. This is captured on the vtnet1_vlan100 interface, which corresponds to vlan100 on the LAN:
9:47:15.748139 IP6 fe80::f692:bfff:fe81:337c > ff02::1: HBH ICMP6, multicast listener querymax resp delay: 10000 addr: ::, length 24

this interface has IPv6 configured; my ISP gives out a prefix over pppoe, and I use "track interface" with WAN as upstream.
Interestingly, when pppoe is disconnected, everything looks fine, and the mld listener reports are sent back (:9380 is the vtnet1_vlan100 interface) correctly:
19:47:18.462474 IP6 fe80::9ca3:3dff:fea4:9380 > ff05::1:3: HBH ICMP6, multicast listener reportmax resp delay: 0 addr: ff05::1:3, length 24
19:47:19.071261 IP6 fe80::9ca3:3dff:fea4:9380 > ff02::2:ff49:d8be: HBH ICMP6, multicast listener reportmax resp delay: 0 addr: ff02::2:ff49:d8be, length 24
19:47:19.271584 IP6 fe80::9ca3:3dff:fea4:9380 > ff02::1:ffa4:9380: HBH ICMP6, multicast listener reportmax resp delay: 0 addr: ff02::1:ffa4:9380, length 24
19:47:19.683804 IP6 fe80::9ca3:3dff:fea4:9380 > ff02::2:49d8:bec6: HBH ICMP6, multicast listener reportmax resp delay: 0 addr: ff02::2:49d8:bec6, length 24
19:47:22.090143 IP6 fe80::9ca3:3dff:fea4:9380 > ff02::1:2: HBH ICMP6, multicast listener reportmax resp delay: 0 addr: ff02::1:2, length 24

but when I setup a connection to my ISP over pppoe, the queries still arrive on vtnet1_vlan100, but suddenly, the reports go out over the pppoe0 interface, instead of the vtnet1_vlan100 interface.
# tcpdump -i pppoe0 | grep -i multi
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on pppoe0, link-type NULL (BSD loopback), capture size 262144 bytes
19:54:20.570018 IP6 fe80::9ca3:3dff:fea4:9380 > ff02::2:49d8:bec6: HBH ICMP6, multicast listener reportmax resp delay: 0 addr: ff02::2:49d8:bec6, length 24
19:54:21.370026 IP6 fe80::9ca3:3dff:fea4:9380 > ff05::1:3: HBH ICMP6, multicast listener reportmax resp delay: 0 addr: ff05::1:3, length 24
19:54:21.576229 IP6 fe80::9ca3:3dff:fea4:9380 > ff02::1:ffa4:9380: HBH ICMP6, multicast listener reportmax resp delay: 0 addr: ff02::1:ffa4:9380, length 24
...

I think this probably happens because, as soon as PPPoE is connected, a default route for the pppoe0 interface is added to the routing table, and the MLD report goes over the default route. That seems wrong though - I think the report should at least go back over the interface where it came from (eg, vtnet1_vlan100) in this case.
Anyway, the result of this is that the linux bridge doesn't know that opnsense is interested in the "all routers" multicast address at ff02::2, and so when a client on the LAN sends an IPv6 router solicitation, that doesn't end up at my opnsense box, and things break.
I've only just set up IPv6 locally, so I'm not sure if this issue is specific to this version or not.
To Reproduce
I described the environment in the description above. Not sure how much of that is relevant to reproduce; I suspect at least some of it is, because otherwise I would expect many more users to hit this issue.
Expected behavior
Multicast MLD reports should be sent back out over the interface from which the query was received.
Environment
Software version used and hardware type if relevant, e.g.:
OPNsense 22.7.10_2 (amd64, OpenSSL), virtualized in Proxmox
Ryzen 3700X
virtio network adapters (backed by proxmox bridge)

Sorry, didn't realize the template was so strict. Closed this issue and opened a new one.


Improve recent and favourites display

Fixes #3409

Codecov Report

Merging #4421 into master will increase coverage by 0.15%.
The diff coverage is 35.41%.

@@            Coverage Diff             @@
##           master    #4421      +/-   ##
==========================================
+ Coverage   56.23%   56.38%   +0.15%
==========================================
  Files         891      891
  Lines       29151    29075      -76
  Branches     4216     4198      -18
==========================================
+ Hits        16394    16395       +1
+ Misses      12757    12680      -77


Error installing Desgin Packaging dclsvgiconImageList280 in delphi 11.2

On installing design Packaging of dclsvgiconImageList280, show this message:

Try to exit IDE, load package group, uninstall, rebuild, and reinstall design package.


Enum struct wire2api does not convert raw data

Missed calling wire2api on raw data received from Rust on enum structs. For example, this code doesn't work:
pub enum Foo { Bar, Baz }
pub enum Letters {
  Alpha,
  Beta(Foo)
}

Foo is represented as an integer when passed to Dart, which is used before being re-converted to a Dart enum.

Thanks for the report and looking forward to PR!


Can't start pipewire-pulse.socket.

If you Completed all troubleshoot options, check below

[y]  Did you Follow all installation instructions carefully from here?
[y]  Did you check All troubleshoot options from here?

Describe the bug
Can't start pipewire-pulse.socket (and make sound server work....sad
To Reproduce
Just followed the step-by-step guide,then it can't working anyway,so I edited the pipewire-pulse.serviceand removed Requires=pipewire-pulse.socket,Also=pipewire-pulse.socket,now I can start pipewire-pulse.servicealone andpactl infohas message!But the book still haven't any sound and the setting page always grey...plz help me get it done(even can't back to pulseaudio lol.
Expected behavior
Screenshots
pactl info

systemctl --user --now status

没有那个文件或目录 means that file or dir not exist (sorry I tried to set LANG=en_US but it have some strange char...
Desktop (please complete the following information):

Distro: [Pop!os]
Desktop Environment [Gnome 3.38.3]
Version [20.10]

Journal log and status of related services
Add any other context about the problem here.
History overriding

@knaiunsoo  I think this issue should move to upstream issue. please recreate one.

@knaiunsoo  any news with v0.3.32 ?


Nested param

Hello,
I have a form_for, named :my_form inside a view and all my parameters for that form come in my controller like this:
params[:my_form][:my_param]
which means that it's not possible for me to do a param :my_param declaration. The only workaround is to use form_tag instead of form_for inside my view.
Thank you for your time

Never mind, just saw this https://github.com/nicolasblanco/rails_param/issues/3

I've just accepted a pull request that allows nested params! See the README

Ah nice, cheers!


Select2 is slow on opening

I'm finding Select2 is quite slow when opening its dropdown menu if the underlying select has a fair number of items. Am I right in guessing it is (re)creating the HTML/DOM for this dropdown each time it is invoked? Wouldn't it make more sense to cache this and only redraw it if the underlying select changes?
Here's an example:
http://jsfiddle.net/48wFG/1/
Thanks in advance.

Still seeing a slowdown (4.0) on over even a thousand datasets (using templates for results, which i'm sure adds to overhead).
What about a user friendly loading view?  As soon as the user clicks show the dropdown with a loading gif, then when the data loads replace said gif with the data?
If would support large amounts of data being a little sluggish without confusing the user as to if anything is actually happening or not.

I'm a fan of the idea of displaying some sort of "loading" message when Select2 is processing the results, I'd even be willing to make it the default behaviour when Select2 is running slow.
If someone gets a pull request going for it, we can discuss the idea in more detail.

As soon as the user clicks show the dropdown with a loading gif, then when the data loads replace said gif with the data?

Right now we have a "Seaching..." string which we use for this (with AJAX, usually) that I wouldn't mind bringing to a standard <select> if possible.
We dropped the old spinner gif while removing external image dependencies from Select2, and I'd rather keep it out.

That sounds ideal, keeping the two UI experiences the same regardless of datasource.  I'll look into that with my changes and make a pull request for it once I'm done for you to review.

Here's an issue tracking the missing loading image/spinner GIF: #3227 – I'll add my (incomplete) thoughts regarding the loading image over there.

I saw you jsfiddles like (http://jsfiddle.net/uLqc9/4/) however I have problem with . How to implement this lady load with  and >100 options. I have issue when trying to test by emulate IE<11 in IE Developer Tools. For IE 11 works fine

Select2 slowly on 1000+ items
But chosen not slowly

+1

It looks like upgrading to Select2 Version 3.5.3 improves speed for large lists.
What's not easy for me to find by looking around on the web:
What is the minimum version of AngularJS needed to support Select2 Version 3.5.3?
Thanks!

I got 2000+ item in my select and I got this lag again.
I upgraded from 4.0.3 to 4.0.13.
Do you have a solution for this ?


Remove Eclipse specific .classpath and .project.

Closure Compiler's Maven pom.xml should be the authoritative source of
project configuration. Users can run
mvn eclipse:eclipse -DdownloadSources=true to create a correctly
configured Eclipse project.

A lot of users utilize Eclipse - and this will make it much harder for them to build the compiler from source.
At a minimum - removal of this would need to have corresponding updates to the readme file on building with Eclispe.

I don't see that I we need to remove this.  I never use maven and always use eclipse.  Is there a motivation for this?  Is it out of date?

I use eclipse as well - and none of the projects I work on use maven.

I brought it up on the mailing list. We currently manually maintain a checked in .classpath and .project, whereas you can easily generate both from the pom.xml. Normally you wouldn't check in sources that can be generated from an authoritative source (the pom.xml).
An added benefit is that maven will automatically download source attachments for all required libraries, which is nice for debugging.
I don't feel particularly strong about this. If we agree not to do this, we should fix .classpath though ;-)

I'm fine with doing this, but also don't have a strong preference.
As Chad said, if this PR is accepted, you should also update the README file about building with Eclipse.

Why can't we just generate and commit the eclipse project files whenever pom.xml is updated? Could we add a travis check to make sure this happens?
I'm all for fixing the classpath settings for eclipse.

Chad: a generated .classpath/.project has references to the jars (both implementation and source) in your local Maven repository. It shouldn't be checked in, it's an artifact of the build process.
In any case, I wasn't aware people were not really using maven for the build (it's a bit misleading to have the pom around). I'll drop this pull request and send a CL to just fix .classpath for the time being.

FYI I sent #778 for the .classpath fix.

See https://github.com/google/closure-compiler/pull/1940


add an edit-on-github button

Hello @nicks,
Please review the following commits I made in branch nicks/editlink:
6362fb4eb102dfb434c142a19ca7baa28fd48aa9 (2019-02-13 16:13:10 -0500)
add an edit-on-github button


[FX-5705] Add resolution for babel/core/json5

FX-5705
Description
This pull request updates @toptal/davinci-qa and @toptal/davinci-syntax versions to have fresher @babel/core that has non-vulnerable json5 as a dependency.
Before (v2.2.1 is vulnerable https://github.com/toptal/topkit/security/dependabot/123)
=> Found "<EMAIL_ADDRESS>info This module exists because "@babel#core" depends on it.
info Disk size without dependencies: "288KB"
info Disk size with unique dependencies: "288KB"
info Disk size with transitive dependencies: "288KB"

After
=> Found<EMAIL_ADDRESS>info Has been hoisted to "json5"
info Reasons this module exists
   - Hoisted from "@babel#core#json5"
   - Hoisted from "@toptal#davinci-qa#@babel#core#json5"
   - Hoisted from "@toptal#davinci-syntax#@stylelint#postcss-css-in-js#@babel#core#json5"
   - Hoisted from "@toptal#davinci-syntax#@toptal#eslint-plugin-davinci#require-json5#json5"
   - Hoisted from "@toptal#davinci-qa#jest#@jest#core#@jest#reporters#istanbul-lib-instrument#@babel#core#json5"
info Disk size without dependencies: "292KB"
info Disk size with unique dependencies: "292KB"
info Disk size with transitive dependencies: "292KB"
info Number of shared dependencies: 0
=> Found<EMAIL_ADDRESS>info This module exists because "@toptal#davinci-syntax#eslint-plugin-import#tsconfig-paths" depends on it.

How to test

All checks should pass

Development checks

[N/A] Add changeset according to guidelines (if needed)

PR commands

List of available commands:

@toptal-anvil ping reviewers - Ping FX team for review

@toptal-anvil ping reviewers

@toptal-anvil ping reviewers


change menubar icon when screensharing is active

the cat should turn red when you are sharing your screen
this can be done with the atom-shell tray/icon APIs

+1 ideally make the cat red (dark red), so it's super obvious.

Maybe even have custom colours?

I think this issue was already resolved and can be closed.


scons build is failing

scons platform=windows target=debug  is failing for me
Reproducible here https://github.com/alexeychikk/hx-godot-squash-the-creeps
Haxe 4.3.3
The error is:
Error: World2D.cpp
./src/godot/World2D.cpp(409): error C2039: 'gdextension_interface_object_free_instance_binding': is not a member of 'godot::internal'
C:\Users\alexd\AppData\Roaming\haxe\haxelib\hxgodot\git\src\godot_cpp/godot.hpp(38): note: see declaration of 'godot::internal'
./src/godot/World2D.cpp(409): error C3861: 'gdextension_interface_object_free_instance_binding': identifier not found

When I roll back hxgodot to 021911de05bbee848c643c441981331fd014bb1e - it doesn't fail anymore.

I dont quite understand?
It should be defined there:

https://github.com/HxGodot/hxgodot/blame/main/src/godot_cpp/godot.cpp#L162
https://github.com/HxGodot/hxgodot/blob/main/src/godot_cpp/godot.hpp#L160

My bad, I was using lix and haxelib at the same time. scons was using the old version from haxelib


Feature Request: Predictive Heating Control for Versatile Thermostat

This is a request of a new feature for the Versatile Thermostat integration: predictive heating control. This enhancement would allow the thermostat to proactively turn off the heating system before reaching the target temperature, leveraging residual heat to achieve the desired setpoint, thus improving energy efficiency.
Problem:
Currently, the Versatile Thermostat relies on hysteresis to manage on/off cycles. While effective, this approach doesn't fully utilize the residual heat present in the heating system after it's turned off. This can lead to overshooting the target temperature and unnecessary energy consumption.
Proposed Solution:
Predictive Heating Control
The goal is to implement a mechanism that predicts the temperature rise after the heating system is turned off and proactively cuts off the heating before the target temperature is reached.
Technical Implementation Suggestions:
Rate of Change Calculation: Implement a function to calculate the rate of temperature change (e.g., °C/min). This could be achieved using a moving average or a derivative calculation over a configurable time window (e.g., the last 5-10 minutes). The derivative function available in Home Assistant's template engine could be utilized for this.
Predictive Algorithm: Based on the calculated rate of change, implement a simple predictive algorithm to estimate the temperature rise after the heating is turned off. A basic approach could be to extrapolate the current rate of change over a short period. More advanced methods, such as linear regression or other predictive models, could be considered for improved accuracy.
Configurable Parameters: Provide configuration options for:
Rate of Change Time Window: Allow users to adjust the time window used for calculating the rate of change.
Predictive Offset: Introduce a configurable offset value (in °C) to fine-tune the proactive turn-off point. This would allow users to calibrate the prediction based on their specific heating system characteristics and room insulation.
Minimum On/Off Time: Enforce a minimum on/off time for the heating system to prevent excessive cycling.
Example Scenario:

Target temperature: 20°C
Current temperature: 19.5°C
Calculated rate of change: +0.1°C/min
Predictive offset: 0.2°C

Based on these values, the system would predict that the temperature will rise by approximately 0.2°C after the heating is turned off. Therefore, the heating would be proactively turned off at 19.5°C, allowing the residual heat to bring the temperature to the desired 20°C.
Benefits:

Increased energy efficiency by utilizing residual heat.
Reduced temperature overshoot and more stable room temperature.
Potential cost savings for users.

Hello @asdkjasdfla,

Currently, the Versatile Thermostat relies on hysteresis to manage on/off cycles. While effective, this approach doesn't fully utilize the residual heat present in the heating system after it's turned off. This can lead to overshooting the target temperature and unnecessary energy consumption.

Your assumption is totally wrong. Regulation is done by TPI or PI algorithms and not by a hysteresis. Then all you proposal is not pertinent. This make the consumption optimal avoiding the overheating and underheating.
Maybe you should read more carefully the documentation first. The algorithms are detailed here: https://github.com/jmcollin78/versatile_thermostat/blob/main/documentation/en/algorithms.md

I close but we cn continue to discuss here if needed.

Thank you for clarifying the functionality of the Versatile Thermostat. I apologize for my misunderstanding regarding hysteresis.
I appreciate you pointing me towards the documentation on PI control algorithms. I will definitely take the time to read through it and gain a better understanding of how they optimize heating efficiency.
I will have a read to check if there are any user-configurable options within the PI control implemented in Versatile Thermostat? For instance, could users adjust the aggressiveness of the heating response or the response time to temperature changes
Thank you for your patience and for helping me learn more about the inner workings of the thermostat.
Sincerely,


Update: Edit signout button.

Description
Got annoyed by the signout button being small and not acting like the rest. (Mild OCD)
So i made it work like the rest of the buttons.
Type of change

[X] Bug fix (non-breaking change which fixes an issue)
[X] New feature (non-breaking change which adds functionality)
[ ] This change requires a documentation update
[ ] This change requires installing new dependencies

Again gh


Add option to create snapshots without memory dumps in vCenter

Author Name: Miguel Ángel Álvarez Cabrerizo (Miguel Ángel Álvarez Cabrerizo)
Original Redmine Issue: 5036, https://dev.opennebula.org/issues/5036
Original Date: 2017-02-20

Currently, VM snapshots performed using the CreateSnapshot_Task has the memory option set to true which dumps the memory state into the snapshot. That memory dump consume time and resources so it would be good to have the chance to create snapshots without memory. If no memory dump would be created, then a disk snapshot feature would be better to have in vCenter.
This has been mentioned in the vOneCloud forum: https://support.vonecloud.com/hc/en-us/community/posts/115000425929-snapshot-functionality

Support from oned needed

Needs documentation

[DOC] https://github.com/OpenNebula/docs/pull/980


Message preview in focus mode is not aligned with user name

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Action Performed:

Log in to e.cash and enable focus mode
Check the message previews in LHN

Expected Result:
Message preview should be aligned with user name.
Actual Result:
Message preview is not aligned with user name. It's more visible if the user has an unread message.
Workaround:
No need, visual issue.
Platform:
Where is this issue occurring?
Web ✔
iOS
Android
Desktop App
Mobile Web
Version Number: 1.0.79-0
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos:

Expensify/Expensify Issue URL:
View all open jobs on Upwork

From @joaniew https://expensify.slack.com/archives/C01GTK53T8Q/p1626390187374600?thread_ts=1626387107.365600&cid=C01GTK53T8Q

Also the text doesn’t look aligned correctly

Triggered auto assignment to @francoisl (Engineering), see https://stackoverflow.com/c/expensify/questions/4319 for more details.

Triggered auto assignment to @laurenreidexpensify (External), see https://stackoverflow.com/c/expensify/questions/8582 for more details.

We have applied a height of 18px to the chat title and if we remove that it fixes two issues.
this one &

@parasharrajat interesting, I'm confused how that fixes it because the line-height pointed to for #4074 is 20px?

yes, Line-height is 20 so text will expand vertically but height is set to 18, and overflow is hidden so 2px will be trimmed.
To test this. just set the height to 15px at https://github.com/Expensify/Expensify.cash/blob/47494884adb24d23226edb0eb7d22d8240ecf979/src/styles/styles.js#L801-L806

https://www.upwork.com/jobs/~012ff356b5e14b72c7

Triggered auto assignment to @Julesssss (Exported), see https://stackoverflow.com/c/expensify/questions/7972 for more details.

I'm not 100% sure about this, but it looks like we'll apply the fix within @yuwenmemon's PR? . If not, please let me know and we'll seek a proposal on this issue instead.

@Julesssss yep, https://github.com/Expensify/App/pull/4143 should fix this too.

@laurenreidexpensify should we also close the UpWork issue?

Removed from Upwork 👍🏽

@yuwenmemon Uh oh! This issue is overdue by 2 days. Don't forget to update your issues!

@yuwenmemon 6 days overdue. This is scarier than being forced to listen to Vogon poetry!

This was fixed! Closing


libc: Remove the redundant seek in writev

Summary
since the file position isn't changed if write return fail
Impact
writev
Testing
Pass CI

But the file position is changed after the first successful iteration in the for loop.

But the file position is changed after the first successful iteration in the for loop.

two cases here:

If fail at the iteration, the position isn't change
If fail at other iteration, writev shouldn't return error since ntotal is always > 0

ping @pkarashchenko


ML Model Performance Evaluation Calculator

Enter calculator name -
ML Model Performance Evaluation Calculator
Describe calculator functionality -
We propose creating a Model Performance Evaluator tool that takes in the predicted values and actual labels from a machine learning model and calculates various performance metrics such as accuracy, precision, recall, F1-score, and ROC AUC. This tool will be a valuable addition to our machine learning workflow, allowing us to easily assess and compare different models and iterations.
Under which category you wish to place it -

[x] Computer Science
[] Mathematics
[] Physics
[] Chemistry
[] Biology
[] Finance
[] Scientific
[] Health
[] Sports
[x] Let project owner decide
[] Suggest a new category - (Answer here)

@SarthakKeshari I would like to build this calculator. Please assign it to me :)

Hey @Celebi07,
I appreciate the ideology behind this calculator. Adding it to admin-choice list.

Hey @Celebi07,
Assigned.
You may contribute your code under the folder path -
calc_for_everything\calculators\src\computer_science\mLModelPerformanceEvaluationCalculator
Issue completion deadline - 5th Oct 1:00:00 pm IST
NOTE - In case the issue completion deadline is not met, the issue will be assigned to a new participant


Free-form text field users for exracting dependencies from package.json content (full or partial), or other sources of dependencies

In addition to the existing options for specifying packages / dependencies (q param names, file upload, q param urls), it would be convenient to have a way generating graphs from ...

[ ] package.json contents (copy/pasted) #97
[ ] package.json dependencies-like fragments (e.g. copy/pasting just the inner or outer portions of dependencies)
[ ] package-lock.json or yarn.lock ala #148 (file sizes make these problematic?)
[ ] top-of-file import statements

Gist with examples of the above
'Not really sure what this looks like in the UI.  I'm inclined to just keep it simple (e.g. <textarea>) as opposed to diving down the rabbit-hole of rich text editors.

I think you don't really need a field for this, you just need to accept and capture the paste event, either in the current field or just anywhere on the page.
Adding another field for this seems unnecessary, you really just want to paste content, not provide an editor for tweaking—rather, that could be a whole separate tab/feature, but it's not needed nor useful for pasting.
If you see the feature this way, you really only need two small pieces of code:

instructions on the Start tab
a paste event handler that calls the same function the file input calls

A total of +6 lines of code to implement package.json pastes:

#97

Regarding fragment parsing:

not sure if you want to venture into parsing of invalid syntax
whatever is pasted/parsed can just be first turned into a valid package.json internally

Related issue for nameless packages:

#97

I'm going to close this as too broad if you don't mind. 🥹 As follow-up issues I suggest:

[ ] Extract imports from JS text/files (regardless of paste, drop, input[file] select)
[ ] Support package.json dependencies-like fragments  (not a fan, honestly, people can just paste the whole package.json)
[ ] Add way to add packages to the graph

Removing packages is already supported via shift-click. Adding packages would be possible via custom input mode (cmd-enter in the current search field, for example). That just about covers most such usages and be more useful in general.
The free-form editor could be an advanced input mode, but I think it would be a bit excessive for npmgraph. Best to open an issue just for such a field (without mentioning additional parse types)


Show list of goals on home page

What data do we want to surface show on the homepage?

@bokova I think name of the goal, visual progress bar (with total amount of goal), and a link to donate to the goal.
Reference for how bitcoin:ADDRESS links work:

https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki#Abstract

Hey @victorbrender did you already decide what structure the data that's meant to be surfaced on the HP will have?

Hey @bokova ,
Unfortunately I didn't have time to write some code and get the data structure working but I think something like this should work for displaying the array of projects:
var projects = [{
name: string,
targetAmount: number,
amountCollected: number,
donateURL: string
},
{
name: string,
targetAmount: number,
amountCollected: number,
donateURL: string
},
{
name: string,
targetAmount: number,
amountCollected: number,
donateURL: string
},
...
]
What do you think?

Right now I'm a bit more verbose having:
var content = { projects: [
		{
			name: string,
			description: string,
			goal_total: number,
			goal_collected: number,
			goal_percentage: number,
			donate_link: string
		}
		, {
			...
		}, {
			...
		}]};

I'll try to be there on Monday (might be a bit late) so we can modifyif needed and most importantly you can show me how to git this properly :)

@bokova
I am not in Prague for the next 2 meetups so I think you'll have to work with @chill117 on this issue.
One observation I have is that in JS the camelcase notation is prefered for variable names(see -> http://javascript.crockford.com/code.html ). In ruby land from I come from we also use the snake notation (eg: 'test_name') but I learnt that it is easier to adopt each language's set of rules to make my interaction with other programmers easier.


To disable Web Speech

With build flag "-Ddisable_speech=1" binary size is reduced by 0.12M.

@d0ngjun

LGTM.

@d0ngjun you want to merge it now or wait for the crosswalk15 rebasing

@halton I'll add this into my rebasing task.
Same with WebVideo.


#159300877 Add home navigation to login and signup page

What does this PR do?
Adds a navigation link that returns the user to the homepage from both login and signup pages
Description of Task to be completed

Add the existing responsive nav menu to the login and signup page
Add a navigation link to the menu
Point navigation link at the homepage

How should this be manually tested?
Review the code changes and the screenshots. Notice the "Home" link at the top right corner.

What are the relevant pivotal tracker stories?
#159300877

Pull Request Test Coverage Report for Build 50

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 100.0%

Totals

Change from base Build 35:
0.0%

Covered Lines:
51

Relevant Lines:
51

💛  - Coveralls


Scroll with variable height is very jerky

I'm this setup:
<virtual-scroll (update)="viewPortItems = $event"
        [items]="posts"
        *ngIf="showRintoj"
        (end)="fetchMore($event)"
        (start)="rintojRefresh($event)"
        [childWidth]="200"
        [childHeight]="350"
        >

     <post-info [post]='post' *ngFor="let post of viewPortItems; let i = index " (deletedPost)='onDeletedPost(i)' [options]='postInfoOptions'>
     </post-info>

</virtual-scroll>

And I do not lock the height of each item, but the result is that the scroll is very jerky. Is variable height supported? I really appreciate if someone can post an example of items with variable height that works smoothly.

I noticed when I do npm install, I don't get the latest version.  I used method 1 discussed here, and was able to make it work, but now the end event doesn't fire. Is this the right way to do it?

I'll recheck end event. It was working previously.

I need variable height as well. It skips over items and does random scrolling when my items are different sizes. I can't use the most recent version because I'm on angular2.

@loctrice https://github.com/rintoj/angular2-virtual-scroll/pull/110

This looks like it was merged in after 3.0 - which means it's not compatible with angular2, only angular 4.

@lotrice, were you able to resolve this issue with the random jumping scrolling?

I wasn't. I had to update my project - which was painful.

I've merged the PR (& modified it a bit). This issue should be working better now (not 100% perfect, but hopefully good enough). It's published to NPM (behind a flag documented in the readme). Could you try it out & close this issue if it's now resolved? Thanks.

Closing this since I haven't received a response from the original poster. Please re-open if you continue to experience this issue.


could not create a dilated convolution forward descriptor, in file tensorflow/core/kernels/mkl_conv_ops.cc:1111

When I tried to do bounding box for a dog image I got an error, please let me know the solution.

python yolo3_one_file_to_detect_them_all.py -w yolo3.weights -i dog.jpg

Error: 2019-08-13 10:56:18.179011: W tensorflow/core/framework/op_kernel.cc:1401] OP_REQUIRES failed at mkl_conv_ops.cc:1114 : Aborted: Operation received an exception:Status: 3, message: could not create a dilated convolution forward descriptor, in file tensorflow/core/kernels/mkl_conv_ops.cc:1111
Traceback (most recent call last):
File "yolo3_one_file_to_detect_them_all.py", line 435, in
main(args)
File "yolo3_one_file_to_detect_them_all.py", line 414, in main
yolos = yolov3.predict(new_image)
File "C:\Users\thisi\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1113, in predict
self, x, batch_size=batch_size, verbose=verbose, steps=steps)
File "C:\Users\thisi\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow\python\keras\engine\training_arrays.py", line 329, in model_iteration
batch_outs = f(ins_batch)
File "C:\Users\thisi\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow\python\keras\backend.py", line 3076, in call
run_metadata=self.run_metadata)
File "C:\Users\thisi\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1439, in call
run_metadata_ptr)
File "C:\Users\thisi\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow\python\framework\errors_impl.py", line 528, in exit
c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors_impl.AbortedError: Operation received an exception:Status: 3, message: could not create a dilated convolution forward descriptor, in file tensorflow/core/kernels/mkl_conv_ops.cc:1111
[[{{node conv_1/Conv2D}}]]

Hi! If you are on Tensorflow 1.13 try downgrading to 1.12 or lower. Worked for me.
/Simen


Course Quick Info Viewer is too tall on big monitors

When I click on a course on my monitor, the course's info button is super tall. Looks great on my laptop, though.


Actions workflow definition with unclosed string is still executed

Description
Related to https://github.com/go-gitea/gitea/issues/23275
Given the following workflow file:
name: Gitea Actions Demo
run-name: ${{ github.actor }} is testing out Gitea Actions 🚀
on: [push]
jobs:
  Explore-Gitea-Actions:
    runs-on: ubuntu-latest
    steps:
      - run: echo "GITHUB_API_URL ${{ GITHUB_API_URL }} GITHUB_SERVER_URL ${{ GITHUB_SERVER_URL }} github.api_url ${{ github.api_url }} github.server_url ${{ github.server_url}}""

(note the double " at the end of the last line)
I expected it to be rejected because it was invalid. I'm not very familiar with the yaml grammar in that depth, but from a UX point of view I'd argue this is invalid and should be noted.
It's still executed though:

PS: a caveat is, that yamllint.com thinks this is valid yaml as well.
Gitea Version
1.19.0+0-rc0
Can you reproduce the bug on the Gitea demo site?
No
Log Gist
No response
Screenshots
No response
Git Version
No response
Operating System
No response
How are you running Gitea?
docker on mac
Database
SQLite

If I understand correctly:

The YAML is valid, get the run with echo "..."" , it matches the expectation
The command echo "..."" is invalid (invalid shell command), so the runner should report a error

I would argue that the YAML is invalid, not the shell command. If you have : in your echo string (echo "foo: bar"), yaml complains and can't read the file. That's why I don't understand that it happily parses this workflow. I wanted to dig into the reference yaml grammar, but it seems there are a few problems with that and it seems pretty unmaintained at this point.

I would argue that the YAML is invalid

Since it can be parsed by many YAML parsers (I have tried other online YAML parsers), and it passes yamllint.com , I would prefer to believe that the YAML is valid.

Okay! Very pragmatic thinking, I like it. Then you could argue that my shell command  is simply invalid.

If I understand correctly, the YAML standard is like this:

a: b: c: invalid
a: 'b: c': valid
a: it's good: valid
a: anything": valid, it means anything"
a: anything"": valid, it means anything""

If you have : in your echo string (echo "foo: bar"), yaml complains and can't read the file.

You need to quote the value to make it a valid YAML input, like this:
key1: 'my value with : char'
key2: 'my value with : " char'
key3: "my value with : \" char"


fix: upgrade to version 3.1.101

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by:
To complete the pull request process, please assign hferentschik
You can assign the PR to them by writing /assign @hferentschik in a comment when ready.
The full list of commands accepted by this bot can be found here.

Needs approval from an approver in each of these files:

OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by:
To complete the pull request process, please assign hferentschik
You can assign the PR to them by writing /assign @hferentschik in a comment when ready.
The full list of commands accepted by this bot can be found here.

Needs approval from an approver in each of these files:

OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@jenkins-x-bot-test: The following test failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

kube
c34e2c1d71ad680d0a1e027c83b10e675c3d7728
link
/test kube

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

@jenkins-x-bot-test: The following test failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

kube
c34e2c1d71ad680d0a1e027c83b10e675c3d7728
link
/test kube

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

@jenkins-x-bot-test: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

kube
c34e2c1d71ad680d0a1e027c83b10e675c3d7728
link
/test kube

vault
c34e2c1d71ad680d0a1e027c83b10e675c3d7728
link
/test vault

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

@jenkins-x-bot-test: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

kube
c34e2c1d71ad680d0a1e027c83b10e675c3d7728
link
/test kube

vault
c34e2c1d71ad680d0a1e027c83b10e675c3d7728
link
/test vault

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

@jenkins-x-bot-test: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

kube
c34e2c1d71ad680d0a1e027c83b10e675c3d7728
link
/test kube

vault
c34e2c1d71ad680d0a1e027c83b10e675c3d7728
link
/test vault

gsm
c34e2c1d71ad680d0a1e027c83b10e675c3d7728
link
/test gsm

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

@jenkins-x-bot-test: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

kube
c34e2c1d71ad680d0a1e027c83b10e675c3d7728
link
/test kube

vault
c34e2c1d71ad680d0a1e027c83b10e675c3d7728
link
/test vault

gsm
c34e2c1d71ad680d0a1e027c83b10e675c3d7728
link
/test gsm

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

/test kube

/test kube

@jenkins-x-bot-test: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

vault
c34e2c1d71ad680d0a1e027c83b10e675c3d7728
link
/test vault

gsm
c34e2c1d71ad680d0a1e027c83b10e675c3d7728
link
/test gsm

kube
c34e2c1d71ad680d0a1e027c83b10e675c3d7728
link
/test kube

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

@jenkins-x-bot-test: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

vault
c34e2c1d71ad680d0a1e027c83b10e675c3d7728
link
/test vault

gsm
c34e2c1d71ad680d0a1e027c83b10e675c3d7728
link
/test gsm

kube
c34e2c1d71ad680d0a1e027c83b10e675c3d7728
link
/test kube

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


Create index.md

News item for the 30-day public review of the ChronometricAge Extension to Darwin Core

@stanblum I'm sure John will give you all more details about this, but briefly: this is not a new standard, so it would not need a review manager appointed. It is presented as an extension to Darwin Core, and as such, it should be treated as any change to Darwin Core (e.g., adding new terms, updating existing) would, and ruled under its Maintenance Interest Group. It's a similar case to the recent changes for the invasive species-related terms, only this one is a bigger package and organized as an extension.
Hope this helps?

This is indeed a formal review following section "3.3.2 Public comment" of the Vocabulary Maintenance Specification for a vocabulary enhancement. It is not a new standard, it is a Vocabulary Enhancement, see section 4, specifically:
Because a vocabulary enhancement is special category of vocabulary change, the general change process described in the subsections of Section 3 apply. That is, the vocabulary enhancement as a package will be proposed formally via the tracking system (Section 3.3.1), be subjected to public comment (Section 3.3.2), and forwarded for an Executive Committee Decision (Section 3.3.3) before it is adopted as an addition to the standard.
Thus, the order is correct and there is no review manager involved - that role is undertaken by the Maintenance Group. In this case official authorization to present for public comment was solicited from the core members of both the DwC Maintenance and ESP Interest Groups, with unanimous approval from both. I believe we are perfectly in keeping with process.

Perhaps this is the point of confusion, in the Task Group strategy it states
The outputs will follow the TDWG Standards Documentation Standard (SDS) and will be reviewed as required processes by the TDWG by-laws https://www.tdwg.org/about/process/ for the ratification of standards.
During execution of the listed tasks it was clear that the VMS was the relevant document to adhere to.

OK, I misunderstood that.  I thought Chrono would be a separate standard --  it has its own GitHub repo, I had assumed it would have a different standard number, etc. -- as I think other standards that have been called "extensions" have been handled.  My mistake.  (We have woven a tangled web.)  But perhaps also relevant to the concept of a standard's identity, isn't http://rs.tdwg.org/chrono/terms/   a different namespace than  http://rs.tdwg.org/dwc/terms/ or http://rs.tdwg.org/dwc/iri/ (which are obviously hierarchical siblings under dwc)?
Given my misunderstanding, I'm OK with posting this as is, but I actually don't have any authority on the Exec so I'm going to touch base with others who discussed this in the West Group meeting yesterday.  I expect they'll approve and then I'll merge the commit.

My stance is that namespace is a matter of convenience. It certainly isn't
a measure of standard identity. DwC and AC include terms from multiple
namespaces already, for example.
On Wed, Nov 25, 2020 at 4:27 PM Stan Blum<EMAIL_ADDRESS>wrote:

OK, I misunderstood that. I thought Chrono would be a separate standard --
it has its own GitHub repo, I had assumed it would have a different
standard number, etc. -- as I think other standards that have been called
"extensions" have been handled. My mistake. (We have woven a tangled web.)
But perhaps also relevant to the concept of a standard's identity, isn't
http://rs.tdwg.org/chrono/terms/ a different namespace than
http://rs.tdwg.org/dwc/terms/ or http://rs.tdwg.org/dwc/iri/ (which are
obviously hierarchical siblings under dwc)?
Given my misunderstanding, I'm OK with posting this as is, but I actually
don't have any authority on the Exec so I'm going to touch base with others
who discussed this in the West Group meeting yesterday. I expect they'll
approve and then I'll merge the commit.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/tdwg/website/pull/256#issuecomment-733906694, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/AADQ726KWZNG3TB7UOYS3MLSRVLDJANCNFSM4UBI7ADA
.


Why a fixed list of supported PDO driver?

Hi,
I don't understand the reason why PDOExtector check the PDO driver and refuse all except 'mysql', 'sqlite' and 'pgsql'.
Looking at the code, I do not find anything which prevent other drivers to be used.
I need to connect a Oracle database using a custum, but fully compliant, PDO driver.

Hello,
There are two spots that could cause problem as they are not really driver agnostic:
https://github.com/fab2s/YaEtl/blob/master/src/Extractors/DbExtractorAbstract.php#L142
    /**
     * Build the LIMIT...OFFSET bit of the query
     *
     * @return string
     */
    protected function getLimitOffsetBit(): string
    {
        return ' ' . \implode('', [
            ' LIMIT ' . (int) $this->batchSize,
            $this->offset ? ' OFFSET ' . (int) $this->offset : '',
        ]);
    }

and:
https://github.com/fab2s/YaEtl/blob/master/src/Extractors/PdoUniqueKeyExtractor.php#L109
    /**
     * This method sets offset and limit in the query
     * WARNING : if you set an offset without limit,
     * the limit will be set to  $this->maxdefaultLimit
     *
     * @return string the paginated query with current offset and limit
     */
    protected function getPaginatedQuery(): string
    {
        if ($this->joinFrom) {
            $this->queryBindings = array_values($this->uniqueKeyValues);

            $whereOrAndStr = stripos($this->extractQuery, 'WHERE') !== false ? 'AND' : 'WHERE';

            return $this->extractQuery . " $whereOrAndStr $this->uniqueKeyName IN (" . implode(',', array_fill(0, count($this->uniqueKeyValues), '?')) . ')';
        }

        return $this->extractQuery . $this->getLimitOffsetBit();
    }

They should be ok with more drivers, but since that's also kind of a design issue at the moment, will move them around in v2.
Now, it's easy to extend, since all extractors inheriting from the pdo branch do carry PdoExtractorTrait, you can just extend the one you use and add more entries in the $supportedDrivers property:
    /**
     * List of supported drivers
     *
     * @var array
     */
    protected $supportedDrivers = [
        'mysql'  => 'mysql',
        'sqlite' => 'sqlite',
        'pgsql'  => 'pgsql',
    ];

Doing this should solve your current concern, as long as the two above method don't mess up, but, you can always overload them in your extractor (if so, thank you for sharing your findings).

Hi,
yes I already saw the point and I've already tried to implement an extractor for backends which don't support pagination, but I'm confused: why I have to implement ExtractorInterface when extract() is never called from outside the implementing class itself?

Concrete implementations do inherit from a cascade of abstract that are intended to be branch the logic at a higher level, should it be necessary (some extractor do not paginate, others can't have a limit etc ...) like it is the case for file extraction.
About pagination branching occurs after ExtractorLimitAbstract, which only set support for backbends supporting a limit in the number of records you can request at once, or even above in ExtractorAbstract, the beginning of the pagination logic is added in ExtractorBatchLimitAbstract.
Though, DBMS should be able to somehow paginate queries, and you should be able to either tweak the getPaginatedQuery method in your class and do what's necessary (you really just need to write the proper query to include limit and offset, which are already set properly before).
Laravel flavor of the db extractor could provide with more compatibility since they use its db driver, worth a try too.


scroll bar problem on IE11

Whenever I grab the scroll bar, the dropdown is closed immediately. Thanks.

I set closeOnBlur property to false then it works on IE. Maybe is this the workaround for the issue? Why it works well on Chrome while the property set to true.


ModuleNotFoundError: No module named 'withrootnotincwd'

Dear @lucsorel, @doyou89, @jonykalavera, @jjerphan,
While trying to generate UML content for "withrootnotincwd" module that is provided under /tests/modules/withrootnotincwd, I am encountering a ModuleNotFoundError.

After noticing this error, I tried running py2puml via CLI and encounter the same error:
(venv) supratiks-mbp:py2puml supratiksarkar$ py2puml tests/modules/withrootnotincwd/ tests.modules.withrootnotincwd
Traceback (most recent call last):
  File "/Users/supratiksarkar/Desktop/Prod/venv/bin/py2puml", line 8, in <module>
    sys.exit(run())
  File "/Users/supratiksarkar/Desktop/Prod/venv/lib/python3.8/site-packages/py2puml/cli.py", line 24, in run
    print(''.join(py2puml(args.path, args.module)))
  File "/Users/supratiksarkar/Desktop/Prod/venv/lib/python3.8/site-packages/py2puml/py2puml.py", line 12, in py2puml
    inspect_package(
  File "/Users/supratiksarkar/Desktop/Prod/venv/lib/python3.8/site-packages/py2puml/inspection/inspectpackage.py", line 19, in inspect_package
    domain_item_module: ModuleType = import_module(name)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/Users/supratiksarkar/Desktop/Prod/py2puml/tests/modules/withrootnotincwd/segment.py", line 3, in <module>
    from withrootnotincwd.point import Point
ModuleNotFoundError: No module named 'withrootnotincwd'

In order to fix this error, I invested the segments.py file under test/modules/withrootnotincwd and notice that changing the following line:
from withrootnotincwd.point import Point
to
from .point import Point
fixes the issue.
Output after fixing the file:
(venv) supratiks-mbp:py2puml supratiksarkar$ py2puml tests/modules/withrootnotincwd/ tests.modules.withrootnotincwd
@startuml tests.modules.withrootnotincwd
namespace tests.modules.withrootnotincwd {
  namespace point {}
  namespace segment {}
}
class tests.modules.withrootnotincwd.point.Point {
  x: float
  y: float
}
class tests.modules.withrootnotincwd.segment.Segment {
  a: Point
  b: Point
}
tests.modules.withrootnotincwd.segment.Segment *-- tests.modules.withrootnotincwd.point.Point
footer Generated by //py2puml//
@enduml

(venv) supratiks-mbp:py2puml supratiksarkar$

Can you please take a look at it?
Thank you so much!

Hi @supratik21,
Thank you for this report.
I will try to have a look at it when I get some time.

Hello @jjerphan,
Thank you for looking into this. I encountered this error while testing py2puml for my application. It'd be extremely helpful if you let me know once you have tested this from your end. Look forward to hearing from you soon.

hello @supratik21 :smiley:, thank you for your message.
And thank you @jjerphan for giving some feed back.
I investigated and there is no bug, but a misunderstanding:

it is true that the following commands yield the error you reported:

# activates the environment to make py2puml available in the virtual environment
source .venv/bin/activate
py2puml tests/modules/withrootnotincwd/ tests.modules.withrootnotincwd

It is because tests.modules.withrootnotincwd is an incorrect Python module path. In this test example, withrootnotincwd is the root module of a test Python project, thus the ModuleNotFoundError: No module named 'withrootnotincwd' error message if you start the CLI call with the tests.modules.withrootnotincwd module path (which does not make sense in this test case).

to get the appropriate output from the CLI, these are the proper commands to run:

# activates the environment to make py2puml available in the virtual environment
source .venv/bin/activate
# moves to the appropriate working directory before running the py2puml command
cd tests/modules
py2puml withrootnotincwd withrootnotincwd

Some day, the py2puml command may handle calls like py2puml tests/modules/withrootnotincwd/ withrootnotincwd but it is not a priority because py2puml is meant to be used as development library within a python project, not as a system tool. I acknowledge that this can be misleading :smiley:


ExtensionHost took a long time to finish when the autocomplete is triggered.

ExtensionHost took a long time to finish when the autocomplete is triggered in new TS file.
As you can see in video, when I trigger the autocomplete, ExtensionHost and tsserver will spin up. In 11. second, tsserver CPU usage will drop to 0 but ExtensionHost keeps doing its stuff until 20. second.
The strange thing is that all the items in autocomplete list looks like from tsserver. So, I'm wondering what has ExtensionHost been doing for these 9 seconds. I have all other extensions disabled.
https://user-images.githubusercontent.com/5549148/119401382-b5ddbe00-bcdb-11eb-97f3-e4ec545ebabc.mov

Does this issue occur when all extensions are disabled?: Yes

VS Code Version: 1.56.2
OS Version: macOS Big Sur 11.3.1 x64

Steps to Reproduce:

Open VSCode
Wait until TS is initialised
Create new TS file and request autocomplete

Hm, I'm guessing this is because the file is part of a large TS project.
Could you please try collecting the TS Server logs to help us investigate this:

Set "typescript.tsserver.log": "verbose",
Restart VS Code and reproduce the problem
In VS Code, run the TypeScript: Open TS Server log command
This should open a large log file called tsserver.log

⚠Warning: The TypeScript log may include information from your workspace, including file paths and source code. If you have any concerns about posting this publicly on Github, just let me know and we can arrange something else. On our side, we only use these logs to investigate issues like this

Sure, there it is: https://github.com/deftomat/tsserver.log (its private, so please accept the invitation)


News: Ruby 2.4.1 Release!

Just a news from rubylang website: The release of 2.4.1 is available.
Regards ;-)
What problems are you experiencing?
Steps to reproduce
What's the output from ridk version?

Ruby is already updated per commit https://github.com/larskanis/rubyinstaller2/commit/606d5849ccbf9331dd4deeaf78c47c392694a40c on the gem branch. The gem branch will probably merged soon to master.

The ruby version 2.4.1 is on the master branch and I will publish a new pre-release.