Mavenization

I'm starting this pull request to get some feedback on the current changes.
Adding a Maven-based build system for JMeter implies moving and renaming some files and it would be best if we discuss this before I go too deep with customisations.
If you look at my commits, excluding the last one 'Add pom.xml files', they just rearrange files and update the changes in build.xml.
So, the plan is to still use ant, except on a Maven friendly file layout.
Note how I haven't moved the sources under src/main/java like Maven expects. I'm loading the sources from ./ but I would also like to move them. Each module (src/components, src/core, etc.) would get its own folder (src/components/src/main/java, src/core/src/main/java, etc).
As I've mentioned on the mailing list, I would also prefer to have all the modules at the same level. This means moving all the protocol/ftp, protocol/http modules a folder up, next to core and components/.
I'm able to load JMeter under Apache NetBeans and IntelliJ IDEA with the new Maven config so I am pleased with this as this is what was bothering me.
Replacing ant altogether is a big step but if we do it incrementally like I'm showing here by just preparing the file layout, etc. we can do it with less friction.
build.xml is 3600 lines long and can't easily be replaced all at once. I can imagine a transition period where ant will still be used for many targets, perhaps via the maven-antrun-plugin Maven plugin.

Thanks for your work. I have just had a glance and will look into it as soon as I have a bit more time.
But I like the general direction, especially that we can (hopefully) migrate from ant to maven in small steps.

Any update on this? Most of the steps, like "Move resources to src/main/resources" are quite harmless and could be done at any time.
It's complicated to work on different branches when I have Maven only on one of them.

Hello @emilianbold ,
I think we should wait for 3.3 release , don't you think so ?
Regards

I think we should wait for 3.3 release , don't you think so ?

I have checked to JARs to be identical so moving some files around while preserving the output seems safe.
Still, 3.3 is close, so it makes sense to have a code freeze.


Linear Search

Overview

Write code for Linear Search in C++.
Add that code into a directory named "Searching", if the directory doesn't exist, create one and add the code file.

Please take care of these things while creating the pull request.

The code file was added to the correct directory.
Code quality looks good.
The programming language used is the same as mentioned in the issue.

@vashuteotia123 Can I work on this ?

Hey @Nisarg-Chokshi , are you working on this issue? If not, I'd like to work on this.

I would like to work on this


Add human readable message to existing ENOENT error

It's useful to have err.code available for parsing when the error bubbles up to application error handlers.
Otherwise we would need to parse the human readable message which is messy and may change in future versions.

thanks dave, this is a good idea :)


Set raises to specific error in reallyRaiseMalformedSszError

Only raising the proper error, which is the same effect it gave with the template like it was before https://github.com/status-im/nim-ssz-serialization/pull/24
Honestly, I find the whole use of the raisesssz pragma rather counter productive. It "hides" a bit the actual errors from the user (and user would not have access to this pragma). And it also allows for laziness, in the sense that one just repeats the raisesssz instead of the actual errors, which seems to happen. At which point one could question why there are even these different errors and not just one SszError. SszSizeMismatchError is also not used much at all, and not even for raiseIncorrectSize().

Indeed, the code would be better if we have more precise raises lists.


Rename OrbitClientModel to ClientModel and add namespace

This ends up touching a lot of files, so let me know if it interferes with work you're doing (@dimitry- maybe?).

This ends up touching a lot of files, so let me know if it interferes with work you're doing (@dimitry- maybe?).

No worries, I can rebase.


enh: Efficient Image Handling for Multi-Modal Chats

Description
The current implementation of open-webui stores full-resolution images in base64 within the webui.db SQLite database. While this approach may be convenient, it can lead to:

Database Bloating: Storing images as base64 strings can significantly increase the size of the database, particularly when using multi-modal models frequently.

No Garbage Collection: Large image entries remain in the database after chats are deleted, leaving unused space. Currently, users can only do garbage collection manually with this shell command:
sqlite3 open-webui/backend/data/webui.db 'VACUUM;'

Bandwidth and Storage Limitations: Only uploading full-resolution images is supported, which can consume a lot of bandwidth and storage, especially for remote connections and uploading photos taken on phones (commonly 12MP or 48MP). Moreover, most vision models only support low-resolution images:

Model
Supported Resolutions (width, height) in px
Source

moondream2
(378, 378), (378, 756), (756, 378), (756, 756)
vision_encoder.py

llava-1.6
(336, 672), (672, 336), (672, 672), (1008, 336), (336, 1008)
config.json

Possible Solutions

Client-Side Image Resizing: Implement image resizing on client side using JavaScript to scale the resolution of images down to 2048x2048, or user-defined maximum size, before uploading them.

Alternatively, it could convert images to the best resolution supported by the underlying vision transformer, but this information is not currently exposed from ollama.

Image Storage as Files or Binary Blobs:

Store images as separate files inside a designated folder (e.g., backend/data/uploads/images). Image entries in the database would then be URI links or hashes to these images, enabling easier cleanup and organization.
Alternatively, store images as binary blobs within the database.

Database Cleanup Mechanisms:

Manual Cleanup: Add a button in "Settings" -> "Chats" to manually call SQLite VACUUM command and remove unlinked images. Preferably, display the current size of the database and potential reduction in size from cleanup.
Automatic Cleanup: Alternatively, implement a mechanism to detect large chunks of deletion commits (e.g., when users and their chat histories are removed). Periodically reclaim unused space in the database and perform cleanup tasks. Note that VACUUM should not be called frequently, as it just reconstructs the database.

Client Size Resizing would fix a lot of challenges with Anthropic and GPT-4-Turbo, especially when using mobiles.  The resolution on phones these days is just too good.

Yes, this has been an ongoing issue for me as well.
I encounter myself quite frequently in situations in where I take a photo using my phone, and ask GPT-4o something. Since each photo is like 5MB, it takes an eternity to upload, and also wastes A LOT of tokens since the image received by it will be absolutely GIGANTIC.

vote for Client Size Resizing.

Closing in favour of #6848


simple get command produces abort / timeout message

I have no clue what it happening.  The simple get command I used to run before this was a desktop app stops working and only returns abort / timeout.
I can go to any browser and copy/paste the command and it runs just fine and runs quickly.  So, nothing is malformed like the help message suggests. It does return a fair amount of data, but like I said, the response is quick.

I have the same problem. Request that used to work with old ARC and that works in, say, Postman doesn't work in new ARC. Request is a simple GET with one key-value pair in the header and the response is immediate and very small (one tiny JSON).

Hi,
Thank you for issue report.
The request is canceled after 20 secs of no response.
This is duplicate of the #502

I wouldn't bet on it being the timeout issue. My request receives an immediate response using other REST clients, and it was the same situation with old ARC.

@slouc please, do that. And add app logs in when the response is made. It will help debug it. See debuging section for more details.

Found the cause and opened an issue. Please check if it's duplicate, I didn't find anything. Thanks.


chore: Remove stale bot

Stale bot has been noisy and unfriendly. See discussions at https://github.com/argoproj/argo-workflows/issues/11802. Open to feedback and suggestions.

I'd prefer keeping stalebot on for pull requests.  This lets contributors know whether a pull request is still active or not.  When it gets flagged and closed, this lets contributors know they can attempt the fix.

There are currently only 48 open PRs, so I think that's a manageable size.

@jmeridth that scenario is 3.ii. in https://github.com/argoproj/argo-workflows/issues/11802#issuecomment-1720117452. It is one of two valid scenarios, but those two are in the tiny minority of usage of stalebot.
As I mentioned there, old stale PRs can be manually marked as stale and closed, or they can be left open until there is a superseding PR (the closes #xxx syntax also allows you close a PR from another PR in GitHub).
I also don't think stalebot itself has a way to configure PRs vs. issues. stalebot is also deprecated and the stale action is now recommended (which is a good bit more configurable as well).

🤦 I'm a stale action user. Not stalebot.
I still believe marking PRs stale and closing is better than maintainers "waiting" manually and then allowing others to supersede PRs.

I don't think the stale action has a way to configure for lack of response from maintainers (certain users). There are a good number of PRs that get marked as stale in this repo but never really got an adequate response from approvers 😕

@agilgur5 that blog post has holes IMO.
I have personal opinions that counter that post in multiple ways.

If an issue is important enough to work on, a PR will get created.
If a PR is worth finishing, it will get finished.
old, open issues do not show popularity. It shows inactivity and care by maintainers IMO.

At least the author is honest about their bias against GitHub. Open issues

@agilgur5 that being said I'm a fan of replacing stalebot with stale GitHub action. And keep on for PRs. Willing to get outvoted. What do you think?

👍  for removing stalebot on issues

WDYT? @sarabala1979 @juliev0

If an issue is important enough to work on, a PR will get created.
If a PR is worth finishing, it will get finished.

It only requires one counter-example to disprove these, and I can point to many in this repo and many others, including several I am or was a maintainer of. I think those opinions rely on idealistic assumptions that don't hold up in my experience.
Also, as is often in OSS, the number of active contributors are several orders of magnitude smaller than the number of users, so I think these scenarios will happen almost by definition. Not to mention that contributors are often spread thin across several repos as well.

old, open issues do not show popularity. It shows inactivity and lack of care by maintainers IMO.

I would say both are true. Old open issues tend to have many upvotes (conversely, popular issues closed as stale tend to have more duplicates). And they tend to be complex in some way that maintainers have been unable to get to it.
The reason for that is irrelevant though, it does happen and has happened in this repo many times. That it happens is all that matters. I actually think this argument is more of a con of stalebot.

Willing to get outvoted. What do you think?

But that's just one blog post, and it's not even one I found myself. Someone else had linked it in Argo and it was an instant bookmark for me. @isubasinghe and I also left comments about it and we're just two contributors.
I am fairly positive most users do not like stalebot either (if not hate it passionately). The amount of passion against stalebot is substantial, and I've never seen anything even remotely close to that in support of stalebot.

@agilgur5

I think those opinions rely on idealistic assumptions that don't hold up in my experience.

That's fair.  I've had the opposite experience but the repos I've maintained haven't dealt with the scale of this repo. 😄
Thank you for the discussion.

Throwing a recent example here: I just got linked to #8224 via Slack from a user. It's a very popular bug that got closed as stale without being resolved. It also seems to be the root cause of some other templating bugs too.
So this is a very concrete example of where stalebot had ended up obscuring bug reports as well.

@jmeridth that scenario is 3.ii. in #11802 (comment). It is one of two valid scenarios, but those two are in the tiny minority of usage of stalebot.

For these two use-cases where stalebot can actually be useful, we may want to add the newer Stale Action in a very limited capacity: if an issue or PR is labeled with more information needed, then it can be marked as stale and closed out if no response. If there is a response, probably both the more information needed and stale tags should be removed, and it would be up to a contributor to mark it with more information needed again if the response does not suffice.
That process is still pretty manual, so I don't think it's much of a productivity increase based on the current issue load, but Stale Action in that very limited capacity I do think can be useful. I might implement that myself if that situation happens often enough.

Added Stale Action in #12488


Run end to end tests

Codecov Report

Merging #532 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master     #532   +/-   ##
=======================================
  Coverage   98.45%   98.45%
=======================================
  Files         231      231
  Lines        3441     3441
=======================================
  Hits         3388     3388
  Misses         53       53

Continue to review full report at Codecov.

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


Bone rotation and scale issues after import of previously exported glTF file from 3ds Max

Hi. I could not find any solution in the previous issues which where already discussed, so I hope you can help:
Problem:
After I exported a biped-character from 3ds Max as glTF file and imported it in blender 2.82 (sub 7 build date: 2020-03-12, 15:41:08) by using the glTF importer 1.1.46 I get the following result.

The bones are to big and the orientation is wrong.
I would expect, that the bones have the same length and orientation as in the original file.

This is the original in 3ds Max.
Is there a way to solve this problem? I attached the glTF file below.
Thank you in advance
blender 2.82 (sub 7 build date: 2020-03-12, 15:41:08, windows 10; 3ds Max 2018)
glTF_export.zip

You didn't include the .bin file so I can't test it, but the situation should be better if you upgrade to Blender 2.83 or a 2.90 alpha.

Thanks for the fast reply. Here is the new zip file with the bin file.
glTF_export.zip


Added support of kerning to Text. Added example for text rendering.

Now Text does not support kerning for a string. I've adde property kern to support kerning.
Also added example of text rendering to mac and iOS example applications.

Hi Andrew,
This looks like a good feature! Some quick notes:

Let's use kerning name for this property, like it named in SVG: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/kerning.
Please use SwiftLint to avoid code styling warnings.
It would be great if you could check why build was failed.

I'll recreate pull request later.

Build was failed because some tests failed, I did not look at tests.


CODE CHANGE:FOLLOW US-social media buttons

Is there an existing issue for this?

[X] I have searched the existing issues

Describe the code change
WHEN CLICKING SOCIAL MEDIA BUTTONS IN FOOTER FOLLOW US, it opens on same page it looks bad
Proposed solution
we can fix it and make it work like after clicking it should open to new tab
Record

[X] I agree to follow this project's Code of Conduct
[X] I'm a GSSOC'24 contributor
[X] I want to work on this issue

can u assign it to me?


Black background behind folder icon

Description
Sometimes there will be a black background behind the folder icon.

Steps To Reproduce
I believe it happens when something is downloaded and placed in that folder.
Expected behavior
It should just have nothing behind the folder icon but instead, it has a black square behind it.
Files Version
<IP_ADDRESS>
Windows Version
Windows 11 21H2 22000.778
Relevant Assets/Logs

Merging with #6373


provides a way to auto(re)subscribe after an auto(re)connect in the PubSub client

just use list to remember which channel is subscribeed


Placeholder not respected

Hi Benjamin,
Thank you for creating this awesome field!
Could you please fix the issue where the placeholder is not respected?
Example below:
TextWithSlug::make('Title')->sortable()->rules('required', 'max:96')->withMeta(['extraAttributes' => [
'placeholder' => 'Magazine',
'maxlength' => 96
]])->slug('Slug')
In this scenario, the output placeholder is "Title", while it should be "Magazine".
Looking forward to the fix!

Hi @benjaminhirsch,
Any update on this issue?
Thanks


Media buttons in notification

i would like to know how to customize the notification in media 3 like shown in pictures below
Expected behavior how it was before with PlayerNotificationManager

how it is now with media3

PlayerNotificationManager does not work together with Android 13 out of the box. If you want to customize the notification to get a notification as above you can implement a CustomLayout that defines the custom commands that should be displayed on the mini player/media notification.
There is issue #38 that explains how a custom layout can be done that provides a notification across all API levels.
You can use DefaultMediaNotificationProvider to tune the look of the notification on API levels lower than 33 (see JavaDoc and please see #213 that is fixed on the main branch).
You may want to consult the Android 13 documentation on how custom actions are used to layout the new miniplayer.
https://developer.android.com/about/versions/13/behavior-changes-13#playback-controls

hello Marc thanks for reaching back to me
first 2 pics is with Media3 and below is PlayerNotificationManager
im using media3 now and I like it but I have these problems
I tried searching around and I can't seem to figure out how to make it work on my own I even looked at the documentation and in sourcecode for DefaultMediaNotificationProvider
its described how to get it appear in miniplayer but not how to make ( PREV : PLAY_PAUSE : NEXT ) appear in miniplayer below android 13
and can't figure out to replace (play next prev) icons in android 13 I know Spotify did it and it works for me below android 13
is it how it is in android 13+

I'm also having a really hard time figuring this out.
I'm developing an audiobook player so the hard fast forward / rewind do not make sense at all.
However I still need them to be supported because if for example a user presses next / previous through a bluetooth headset gesture I need to handle that as a fast forward / rewind instead.
I achieved that by overwriting the commands in my wrapping player:
  override fun seekToPreviousMediaItem() {
    seekBack()
  }

  override fun seekToPrevious() {
    seekBack()
  }

  override fun seekToNext() {
    seekForward()
  }

  override fun seekToNextMediaItem() {
    seekForward()
  }

Setting EXTRAS_KEY_SLOT_RESERVATION_SEEK_TO_PREV does / NEXT does not seem to  have any effect.
Right now I could get two things to work:

Advertise the default commands and overwriting their actions. This has the disadvantage that in the Android 13 Notification, the previous / next icons are shown instead of the fast forward / rewind icons.
Remove the next / previous from the available commands. This leads to my custom fast forward / rewind being shown. So from the UI everything is perfect. This however now breaks the ability to control the fast forward / rewind using bluetooth headset taps.

Is there any way to fix this?

val player =
      ExoPlayer.Builder(this)
        .setAudioAttributes(AudioAttributes.DEFAULT, /* handleAudioFocus= */ true)
        .build()

val forwardingPlayer =
      object : ForwardingPlayer(player) {
        override fun getAvailableCommands(): Player.Commands {
          return super.getAvailableCommands()
                  .buildUpon()
                  .remove(COMMAND_SEEK_TO_PREVIOUS)
                  .remove(COMMAND_SEEK_TO_NEXT)
                  .build()
        }
      }
MediaSession.Builder(context, forwardingPlayer)
    .build()

Now, the skip previous and the skip next button would not be displayed in the mini player

if i have more than one MediaItem, the button is displayed but do nothing if clicked when trying to use this code. is this a bug or an intended behavior ?

I managed to obtain the first expected screenshot by using this media notification builder implementation. My aim was to have all 3 buttons (skip previous, play/pause, skip next) shown in compact mode on both android 12 and 13.
My guess is that further customization can be done with addNotificationActions. Maybe this can further help people who also run into this issue.

class MediaNotificationBuilder(val context: Context) : DefaultMediaNotificationProvider(context) {
override fun addNotificationActions(
    mediaSession: MediaSession,
    mediaButtons: MutableList<CommandButton>,
    builder: NotificationCompat.Builder,
    actionFactory: MediaNotification.ActionFactory
): IntArray {

    val skipPreviousCommandButton = CommandButton.Builder().setPlayerCommand(COMMAND_SEEK_TO_PREVIOUS).setEnabled(true).setIconResId(androidx.media3.ui.R.drawable.exo_ic_skip_previous)
        .setExtras(Bundle().apply { putInt("androidx.media3.session.command.COMPACT_VIEW_INDEX", 0)}).build();

    val playCommandButton = CommandButton.Builder().setPlayerCommand(COMMAND_PLAY_PAUSE).setEnabled(true).setIconResId(if(mediaSession.player.isPlaying) androidx.media3.ui.R.drawable.exo_icon_pause else androidx.media3.ui.R.drawable.exo_icon_play)
        .setExtras(Bundle().apply { putInt("androidx.media3.session.command.COMPACT_VIEW_INDEX", 1)}).build();

    val skipNextCommandButton = CommandButton.Builder().setPlayerCommand(COMMAND_SEEK_TO_NEXT).setEnabled(true).setIconResId(androidx.media3.ui.R.drawable.exo_ic_skip_next)
        .setExtras(Bundle().apply { putInt("androidx.media3.session.command.COMPACT_VIEW_INDEX", 2)}).build();

    mediaButtons.clear()
    mediaButtons.add(skipPreviousCommandButton)
    mediaButtons.add(playCommandButton)
    mediaButtons.add(skipNextCommandButton)

    return super.addNotificationActions(mediaSession, mediaButtons, builder, actionFactory)
}

}

Thanks for the snippet @brabebhin
If you override DefaultMediaNotificationProvider.getMediaButtons(...) and then return that list of buttons that you create above, would that be the same? The list would then be the argument mediaButtons in addNotificationActions(...). That's how the API was designed. Sorry for this not being documented yet besides the JavaDoc. Documentation work has been started and is on it's way.

This is for beta2. In beta3 it is no longer possible to derive DefaultMediaNotificationProvider, as I just tried right now.

Yes, sorry, my bad. The public constructors are already added in the main branch and this will be part of the next release that we are currently preparing (see #213).
I mark this issue as a bug to add the session like for addNotificationActions(..).

Hi do we have any update for this?
I've been facing same challenges with Media3 recently, and I could really use some help. To give you a brief overview, I migrated our app from ExoPlayer to Media3 and followed Google's migration guide. However, it appears that there's no straightforward way to handle MediaButton KeyEvent actions manually.
I've been trying to find a solution, but so far, I haven't been successful.
I tried to elaborate my question in in this post
I'd greatly appreciate any insights or suggestions you may have on how to handle MediaButton actions manually with Media3.
Thanks

I'm not quite sure how your question is related to this issue. I think #249 may be more interesting for you.

It appears that there's no straightforward way to handle MediaButton KeyEvent actions manually.

That's true. I think you shouldn't focus on media button events, but instead solve your problem with the Media3 API. Besides Bluetooth, media button events are only a thing for actions coming from the notification below API 33. I wouldn't recommend going on this rather lower-level API because on API 33 and above the notification sends commands directly to the session without using media button events.
MediaButton events coming from a Bluetooth device are delivered by the system to the platform media session that delegates them to onMediaButtonEvent of the MediaSession.Callback and then delegates to MediaSessionCompat.Callback.onSkipToNext(). That's where Media3 receives it after the media button event has been resolved by the platform session to the specific callback method onSkipToNext:
onSkipToNext:455, MediaSessionLegacyStub (androidx.media3.session)
onSkipToNext:1691, MediaSessionCompat$Callback$MediaSessionCallbackApi21 (android.support.v4.media.session)
onMediaButtonEvent:967, MediaSession$Callback (android.media.session)
onMediaButtonEvent:1611, MediaSessionCompat$Callback$MediaSessionCallbackApi21 (android.support.v4.media.session)
handleMessage:1593, MediaSession$CallbackMessageHandler (android.media.session)
dispatchMessage:106, Handler (android.os)
loopOnce:201, Looper (android.os)
loop:288, Looper (android.os)
main:7884, ActivityThread (android.app)
invoke:-1, Method (java.lang.reflect)
run:548, RuntimeInit$MethodAndArgsCaller (com.android.internal.os)
main:936, ZygoteInit (com.android.internal.os)

Media3 then delegates the event to the player.
I'm not quite sure why you are trying to intercept media button events from your question. I assume you want to intercept commands coming from a BT headset.
If I'm right, then you can try to wrap the player in a ForwardingPlayer before you pass it to the Builder with which you build your session. This is an approach where you don't have to care about API levels or similar:
val forwardingPlayer =
  object : ForwardingPlayer(player) {

    override fun seekToPrevious() {
      val packageName = mediaLibrarySession.controllerForCurrentRequest?.packageName
      if (packageName == "com.google.android.bluetooth") {
        previousSegment()
        return;
      }
      super.seekToPrevious()
    }

    override fun seekToNext() {
      val packageName = mediaLibrarySession.controllerForCurrentRequest?.packageName
      if (packageName == "com.google.android.bluetooth") {
        nextSegment()
        return;
      }
      super.seekToNext()
    }
  }

mediaLibrarySession =
  MediaLibrarySession.Builder(this, forwardingPlayer, librarySessionCallback)
    .build()

session.controllerForCurrentRequest is the controller that sent the command and you can filter this way to only change the behavior for Bluetooth. If you want to change this behavior generally, you obviously don't need this check.
Can you try if this is an approach that would work for you?

I only play one media item at a time, however I need to show skip to next / skip to prev button and handle them manually.
Could use a forwarding player to intercept the command but I couldnt find a way to show skip to next and prev buttons without building a playlist in exoplayer.
Any advice on this ?

Have you tried overriding getAvailableCommands() and isCommandAvailable(int command) with your ForwardingPlayer and then make sure COMMAND_SEEK_TO_NEXT and COMMAND_SEEK_TO_PREVIOUS is always available? If the command is available, the button is drawn by the notification.

I was able to hide the buttons I didn't want overriding getAvailableCommands. Now I'm implementing seek for the current MediaItem.
Is there a way to enable this command without adding it to the notification?

I think the best would be if the SDK provides you some API for this. If an SDK is burrying the API provided by a library that they wrap then I think the SDK should be in charge to either provide a way to integrate differently or expose the existing API to not restrict their users.
So the ForwardingPlayer is indeed what you should be able to do. Because the notification sends playback commands via PendingIntent or directly to the session depending on the API level. Overriding onStartCommand only gives you the commands below API 33. You also don't receive media button events on API 26 and later that for instance are coming from a Bluetooth events. The system sends these directly to the session as well. All of these eventuality arrive at the ForwardingPlayer. That's why this is the solution.

user presses the PLAY button, I need to check some conditions on the client - and only then pass (or not pass) this event to the player.

I don't think this is a good idea, because in the case of PLAY commands, the service is expected to be put in the foreground. Media3 puts the service in the foreground when the player is playing. So if you intercept the wrong Play event, then your app may crash with a ForegroundServiceDidNotStartInTimeException on API 31 and higher. See #167 for more details.
I'm not sure about your use case, but regarding Play commands, it's better to make sure that a given sender does not have an option to send the play command (like not showing a Play button). Once the command is sent, it's probably too late because it's risky to stop a Play command and turn it into a no-op for the reasons given above.

If I may add, one very common use-case where I would want to detect clicks on the notification is analytics.
Knowing if a next action comes from the app, the media controls or elsewhere.

@phcannesson

If I may add, one very common use-case where I would want to detect clicks on the notification is analytics.

In the main branch we added a method MediaSession.isMediaNotificationController(controllerInfo). Starting with the next release 1.2.0, an app can recognize whether a player command or a custom command is coming from the notification with this method:
val forwardingPlayer = object: ForwardingPlayer(player) {
      override fun play() {
        val controller = mediaLibrarySession.controllerForCurrentRequest
        controller?.let {
          if (mediaLibrarySession.isMediaNotificationController(controller)) {
            // handle command coming from media notification
          }
        }
        super.play()
      }
    }

This sounds like would be useful for your use case of analytics. Media3 makes sure that the calling controller is always the same  on all API levels. Under the hood, the commands can come from a PendingIntent or sent directly to the session starting with API 33. However, Media3 makes sure it always has the same calling controller that you can recognize with this helper method conveniently.

I had to customize the SEEK_TO_PREVIOUS/SEEK_TO_NEXT icons for notification player and looking at this issue (and some others) I've come to a conclusion that I need to add custom session commands AND also remove the player commands (COMMAND_SEEK_TO_PREVIOUS, COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM, COMMAND_SEEK_TO_NEXT, COMMAND_SEEK_TO_NEXT_MEDIA_ITEM) so they don't show in the notification.
In my case I have to have different buttons in the notification depending on the type of media that is currently playing (i.e. live media shouldn't have seek forward or back, only play/pause)
So I though the best place for me to change the commands is in MediaLibrarySession.Callback.onGetItem (I'm open to criticism, if this is not correct):
override fun onGetItem(
    session: MediaLibrarySession,
    browser: MediaSession.ControllerInfo,
    mediaId: String
): ListenableFuture<LibraryResult<MediaItem>> {
    // for versions below Android 13 I have CustomMediaNotificationProvider,
    // extending DefaultMediaNotificationProvider with overriden getMediaButtons method
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        if (mediaItem.isLive) {
            session.mediaNotificationControllerInfo?.let {
                session.setAvailableCommands(
                    it,
                    MediaSession.ConnectionResult.DEFAULT_SESSION_COMMANDS,
                    MediaSession.ConnectionResult.DEFAULT_PLAYER_COMMANDS
                )
            }
        } else {
            val availableSessionCommands =
                MediaSession.ConnectionResult.DEFAULT_SESSION_COMMANDS.buildUpon()
            notificationPlayerCustomCommandButtons.forEach { commandButton ->
                commandButton.sessionCommand?.let { availableSessionCommands.add(it) }
            }
            val playerCommands =
                MediaSession.ConnectionResult.DEFAULT_PLAYER_COMMANDS.buildUpon()
                    .removeAll(
                        COMMAND_SEEK_TO_PREVIOUS,
                        COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM,
                        COMMAND_SEEK_TO_NEXT,
                        COMMAND_SEEK_TO_NEXT_MEDIA_ITEM,
                    ).build()
            session.mediaNotificationControllerInfo?.let {
                session.setAvailableCommands(
                    it,
                    availableSessionCommands.build(),
                    playerCommands
                )
            }
        }
    }
    LibraryResult.ofItem(
        mediaItem,
        LibraryParams.Builder().build()
    )
}

And then in onCustomCommand I can make everything work as expected:
override fun onCustomCommand(
    session: MediaSession,
    controller: MediaSession.ControllerInfo,
    customCommand: SessionCommand,
    args: Bundle
): ListenableFuture<SessionResult> {
    if (customCommand.customAction == NotificationPlayerCustomCommand.PREVIOUS.customAction) {
        session.player.seekToPrevious()
    }
    // other custom commands
    return Futures.immediateFuture(SessionResult(SessionResult.RESULT_SUCCESS))
}

However, what I don't understand and I find really counterintuitive is why does this even work? To be more specific, why is this line working:
session.player.seekToPrevious()

if the underlying player command has been removed? Even the documentation for seekToPrevious mentions:

This method must only be called if COMMAND_SEEK_TO_PREVIOUS is available.

me to change the commands is in MediaLibrarySession.Callback.onGetItem

onGetItem being called is not related to what is currently in the player. It probably works for your specific app in case you are using this method before setting the item to the player, but from the library side there is not relationship between onGetItem and what is playing.
I would recommend listening to Player.Listener.onMediaItemTransitioned instead. That is the event that is emitted by the player when the item currently being played changed. That's when you want to customize the notification for that item I think and independent from how this media item is set into the player. You want to listen to the result, not the action that triggers this result.

if the underlying player command has been removed? Even the documentation for seekToPrevious mentions:

Your code removes the commands from a specific controller, not from the player. While the controller can't send the command and the session would drop it if it arrives, the player can still do everything if an app wants it.
This only removes the command from the player. I think this is correct and works as intended:
session.mediaNotificationControllerInfo?.let {
    session.setAvailableCommands(
        it,
        availableSessionCommands.build(),
        playerCommands
    )
}

It's a common scenario that you may want to have different commands available for different controllers. You only remove this from the controller, so that that specific controller can't send such a command. However, under the hood you as the app should still be able to call every command on the actual player. Else removing a command on controller A would disallow calling such a method for all controller, which is not intended.

I would recommend listening to Player.Listener.onMediaItemTransitioned instead

Thanks! I'll check how to do it using this method.

Your code removes the commands from a specific controller, not from the player

Oh yeah right I'm only changing the notification controller, my bad. Really silly to not notice that's how it works, when it's kinda obvious now. Thanks!

It's a common scenario that you may want to have different commands available for different controllers.

Indeed, that's what I'm doing right now actually and I think it finally clicked after reading your comment.

Ok, cool. Thanks for confirming.
I'm actually going to close this issue. Mostly because it has diverged a bit from the initial report that looks answered. The conversations here are not easily to find under this broad umbrella bug. :)
Don't hesitate to open a new issue with a more specific subject, if you have further questions. Happy to help!


Working tests failing with "[FAIL. Reason: Invalid data] setUp()" on Windows

Component
Forge
Have you ensured that all of these are up to date?

[X] Foundry
[x] Foundryup

What version of Foundry are you on?
forge 0.2.0 (cb925b1 2022-11-21T16:24:05.0674358Z)
What command(s) is the bug in?
forge test
Operating System
Windows
Describe the bug
For a newly-installed Foundry project with running tests (confirmed on the other machines), I cannot make the test run successfully: they fail during the setUp() execution, with [FAIL. Reason: Invalid data] setUp().
I'm currently running forge 0.2.0 (cb925b1 2022-11-21T16:24:05.0674358Z) on Windows 11.
The general advice for this issue both in this group and inside the Foundry Discussions on GitHub is to update Foundry. However, when I try doing this (by building from source via cargo install --git https://github.com/foundry-rs/foundry foundry-cli anvil chisel --bins --locked), I keep getting the following error:

What's wrong and how can I fix this?

The cause of the error, to my shame, is, likely, the lack of the necessary rights to execute the moving of forge.exe to another location.
Either that - or the version of rust/rustup that's being used to compile Foundry from source.
I've just tried updating Foundry again, making sure my rust & rustup are up to date, and that I'm running the command line with admin privileges (even though I thought I had the latter assured previously, as well...) - and it worked:

I'm closing this issue for now, and will reopen it if I happen to reproduce it in the future.

Closing per the above comment :)


add styled components

add styled components

Closed with https://github.com/chingu-voyage3/bears-16/commit/8ed7c739ab0d521bf2c019fa7cc1d75db6acabac


WIP Implementation of peer credentials.

This implements peer credentials for UnixStream. Closes #12.
This is WIP now. It contains only Linux implementation (macOS coming soon). I published it now so I can have it reviewed to avoid huge rewrite.
I decided to name the method peer_cred instead of get_peer_cred to be consistent with other methods (e.g. peer_addr).
The implementation is based on one I found in PostgreSQL.
Relevant SO question
I think this might be added to std and then forward it but I think it'd be nice to use this crate as a testing ground.
Unresolved questions:

Bikeshed names (I'm fairly confident about at least method name but I'm open to other suggestions.)
Should I implement for Solaris too? I have nothing to test it on.
Tests? (I don't see any tests in this crate but that doesn't mean there shouldn't be.)
Is documentation sufficient?
Someone else should probably review the unsafe code (it should be just syscall though, nothing complicated)
Should I define #[repr(C)] struct UCred manually or should it be somehow auto-generated? I didn't find it in libc. (Maybe PR against `libc?) I found it. Fixed in e0da3a9d342115d2f87acb0534659347855381c4.
Is this method applicable for other Unix sockets? (E.g. datagram.)

Note: I've created a simple test to play with it.

 :D Anyway, I've tested it on macOS and it works! :tada:
Could you comment on the code and help with resolving the questions, please?

I've updated the code as you requested. I tested it on Linux and it works. Will test on macOS tomorrow.

Mind adding a test in this PR? That way it can be tested on Travis

OK, do you think something like this would be fine? Possibly checking uid against geteuid() (same with gid).

Sure!

:tada:
Anything else you would like? Do you think the documentation is sufficient?

Nah looks good, thanks!

I'm happy I helped. I've opened https://github.com/rust-lang/rust/issues/42839 now.


ruby_3_1,ruby_3_0,ruby_2_7: allow enabling dtrace support on linux

Description of changes
Allow enabling dtrace on linux.
Verified to work with bpftrace -p (pid-of-ruby) -l:
sudo bpftrace -p 320064 -l
uprobe:/proc/320064/root/nix/store/fryagbkvxwrmqg4lrdhk0h4sd8q3kkxk-ruby-3.1.2/bin/ruby:__do_global_dtors_aux
uprobe:/proc/320064/root/nix/store/fryagbkvxwrmqg4lrdhk0h4sd8q3kkxk-ruby-3.1.2/bin/ruby:_dl_relocate_static_pie
(...)
usdt:/proc/320064/root/nix/store/fryagbkvxwrmqg4lrdhk0h4sd8q3kkxk-ruby-3.1.2/lib/libruby-3.1.2.so.3.1.2:ruby:array__create
usdt:/proc/320064/root/nix/store/fryagbkvxwrmqg4lrdhk0h4sd8q3kkxk-ruby-3.1.2/lib/libruby-3.1.2.so.3.1.2:ruby:cmethod__entry
(...)

Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[x] Tested basic functionality of all binary files (usually in ./result/bin/)
23.05 Release Notes (or backporting 22.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

Sorry for notification spam. GH got a bit carried away when changing base to staging :(


Behaviour for SharePoint Document Libraries that require Check In

I've managed to determine through trial and error that files copied into a Document Library that require check-in simply won't work if you are supplying the file name.  The operation succeeds with a 202, and checking the Location in the Response Header tells me it that all completed successfully.
If you exclude the file name it all just works.
I've had to build my own download/upload operation and force the check-in at the end of the operation.
I'm fine with this behaviour, it just would have been nice to have it documented and save me half a day.

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

ID: d887c2a6-40ba-675b-7b09-a7a3fffe17f5
Version Independent ID: 03692ea1-b802-f768-a3bc-04a846b6771a
Content: driveItem: copy - Microsoft Graph v1.0
Content Source: api-reference/v1.0/api/driveitem-copy.md
Product: sharepoint
Technology: microsoft-graph
GitHub Login: @JeremyKelley
Microsoft Alias: MSGraphDocsVteam

As part of a repository clean up effort we are closing older issues. If this issue remains, please: open a new issue, reference this issue, and provide any additional details that may help in resolution. Thank you for your understanding as we work to improve our responsiveness.


subgen.py Crashing

subgen.py crashes when processing certain files. I'm aware that you have a list of extensions to exclude from processing, however, for me the file it crashed on is an actual video file.
Here is a simple fix for the problem, it works well for me:
I created a new function to start the gen_subtitles as a process. If whisper were to crash, it would only crash the process, not the program or the docker container. After a process crash, the program will function as normal since each gen_subtitles runs in a new process.
import multiprocessing
def gen_subtitles(file_path: str, transcription_type: str, force_language=None):
process = multiprocessing.Process(target=gen_subtitles_process, args=(file_path, transcription_type, force_language))
process.start()
process.join()
// The origional gen_subtitles function
def gen_subtitles_process(file_path: str, transcription_type: str, force_language=None) -> None:

I'd rather fix the underlying problem then mask it behind a process.  If I know what the deal is, I can improve the error handling.
I've been running this personally for over a year and haven't had it crash on a single video file.

For me sugben.py crashed with SIGSEGV 11 at result = model.transcribe_stable(file_path, language=force_language, task=transcription_type, **args). So whisper or a library used by whisper is trying to access an invalid memory address. So there is no easy way of error handling this other than masking it behind a process.
For me, it works for 99.9% files but crash on the 0.1% is just annoying.
If you don't like "mask it behind a process" you can close this issue, and I'm totally fine with it. I can just patch the file myself.

Are you running it in the docker?  Previous sigsegv 11 issues were tied to unintentionally having duplicate libs loaded or in rare cases running out of or bad memory.
is there anything special about the file?  Is it a massive 4K with DD or something?

Yes, it's running in a docker in Unraid. I think the problem is the audio codec of the file. The video file is avi format, and the audio codec is vo1+. VLC does not even support this codec.

Yeah OGG/Vorbis files are notoriously bad.  What's ffprobe show so I can catch them/ignore them?

I have a libvorbis file that appears to work, but I would guess vor1,vo1+,vor2,vo2+,vor3,vo3+ won't.

ffprobe version 6.1-full_build-www.gyan.dev Copyright (c) 2007-2023 the FFmpeg developers
built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --pkg-config=pkgconf --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-dxva2 --enable-d3d11va --enable-libvpl --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
libavutil      58. 29.100 / 58. 29.100
libavcodec     60. 31.102 / 60. 31.102
libavformat    60. 16.100 / 60. 16.100
libavdevice    60.  3.100 / 60.  3.100
libavfilter     9. 12.100 /  9. 12.100
libswscale      7.  5.100 /  7.  5.100
libswresample   4. 12.100 /  4. 12.100
libpostproc    57.  3.100 / 57.  3.100
[avi @ 0000029da9249700] Could not find codec parameters for stream 1 (Audio: none (og[0][0] / 0x676F), 48000 Hz, 2 channels, 128 kb/s): unknown codec
Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
Input #0, avi, from 'file.avi':
Duration: 01:31:46.70, start: 0.000000, bitrate: 1303 kb/s
Stream #0:0: Video: mpeg4 (DX50 / 0x30355844), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 1164 kb/s, 30 fps, 30 tbr, 30 tbn
Stream #0:1: Audio: none (og[0][0] / 0x676F), 48000 Hz, 2 channels, 128 kb/s
Unsupported codec with id 0 for input stream 1

I updated the check to ignore files with 'none' as the audio.  Update=True if you want to give it a shot.
`def has_audio(file_path):
try:
if has_image_extension(file_path):
logging.debug(f"{file_path} is an image, skipping processing")
return False
    with av.open(file_path) as container:
        # Check for an audio stream and ensure it has a valid codec
        for stream in container.streams:
            if stream.type == 'audio':
                # Check if the codec is supported (not 'none')
                if stream.codec.name != 'none':
                    return True
                else:
                    logging.debug(f"Unsupported codec for audio stream in {file_path}")
        return False

except (av.AVError, UnicodeDecodeError):
    logging.debug(f"Error processing file {file_path}")
    return False`

Launching subgen.py
INFO:root:Subgen v2<IP_ADDRESS>
INFO:root:Starting Subgen with listening webhooks!
INFO:root:Transcriptions are limited to running 1 at a time
INFO:root:Running 4 threads per transcription
INFO:root:Using cuda to encode
INFO:root:Using faster-whisper
INFO:root:Starting to search folders to see if we need to create subtitles.
Traceback (most recent call last):
File "/subgen/subgen.py", line 1130, in
transcribe_existing(transcribe_folders)
File "/subgen/subgen.py", line 863, in transcribe_existing
gen_subtitles_queue(path_mapping(file_path), transcribe_or_translate, forceLanguage)
File "/subgen/subgen.py", line 626, in gen_subtitles_queue
if not has_audio(file_path):
File "/subgen/subgen.py", line 822, in has_audio
if stream.codec.name != 'none':
File "av/audio/stream.pyx", line 15, in av.audio.stream.AudioStream.getattr
AttributeError: 'NoneType' object has no attribute 'codec'
Traceback (most recent call last):
File "/subgen/launcher.py", line 168, in
main()
File "/subgen/launcher.py", line 163, in main
subprocess.run([f'{python_cmd}', '-u', 'subgen.py'], check=True)
File "/usr/lib/python3.10/subprocess.py", line 526, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['python3', '-u', 'subgen.py']' returned non-zero exit status 1.

If you’re willing, try it again.  Made an update to check one more thing.  If this doesn’t work, I think you’re better off with your solution for now.  It’s nearly impossible to test this without a file having that problem.

It still crashes, but looks like you are just using the wrong attribute name. The stream object does not have a codec attribute, I think you are trying to use codec_context. On your latest version after replacing codec with codec_context, the program no longer crashes.

Thanks for the help.  I pushed it.
if stream.codec_context and stream.codec_context.name != 'none':


[core] fix flex-end in row-reverse

We fount that, when flex-direction is row-reverse, justify-content:flex-end is not available, not matter justify-content is flex-start or flex-end, layout system always layout items as flex-start.
Demo:
https://jsplayground.taobao.org/raxplayground/a3ad1d37-a6b7-41bb-9b72-3c00ab4ee161

@YorkShen  layout preview


Tweaks made in the Contact.html with reference with issue assigned to me #159

Fixed issues.

Initially the Phone Number input was of type text, so if anyone inputs the character then also it will be going to submit, Now its made to number so that only numbers will be submitted.
2.The outline of the submit button fixed.
3.There was typo error in the views.py where the contact views is.Its fixed now.

@PrabhatP2000 Can u pl. resolve the conflicts so that I can review and merge

Successfully resolved the conflict.
You can now merge the pull request.

@PrabhatP2000  Great contribution dude!! 🙌
Don't forget to star⭐ the repo and follow us on GitHub


This function acquiresTokenSilent which it uses to renew the token for me automatically?

Core Library
MSAL.js v2 (@azure/msal-browser)
Core Library Version
2
Wrapper Library
Not Applicable
Wrapper Library Version
2
Description
I need to know if this is the right code so that after my token expires, call a refresh token to not stop my app.
MSAL Configuration
//MSAL configuration
const msalConfig = {
    auth: {
        clientId: '7e391644-15a5-47d4-9cd6-5d86711f4c66',
        authority: 'https://login.microsoftonline.com/92d143fd-f58c-420c-8469-393fab93e1ea',
        redirectUri: 'http://localhost:8080'
    }
};
const msalRequest = { scopes: ['user.read'] };
function ensureScope (scope) {
    if (!msalRequest.scopes.some((s) => s.toLowerCase() === scope.toLowerCase())) {
        msalRequest.scopes.push(scope);
    }
}
// Inicializa a Biblioteca MSAL.
const msalClient = new msal.PublicClientApplication(msalConfig);

// Conecta o usuário.
async function signIn() {
    const authResult = await msalClient.loginPopup(msalRequest);
    sessionStorage.setItem('msalAccount', authResult.account.username);
}
// Manipula a obtendo um token de acesso que Microsoft Graph pode usar.
async function getToken() {
    let account = sessionStorage.getItem('msalAccount');
    if (!account) {
        throw new Error(
            'As informações do usuário foram apagadas da sessão. Saia e faça login novamente.');
    }
    try {
        // Primeiro, tente obter o token silenciosamente
        const silentRequest = {
            scopes: msalRequest.scopes,
            account: msalClient.getAccountByUsername(account)
        };

        const silentResult = await msalClient.acquireTokenSilent(silentRequest);
        return silentResult.accessToken;
    } catch (silentError) {

        // Se as solicitações silenciosas falharem com InteractionRequiredAuthError,
        // tenta obter o token interativamente

        if (silentError instanceof msal.InteractionRequiredAuthError) {
            const interactiveResult = await msalClient.acquireTokenPopup(msalRequest);
            return interactiveResult.accessToken;
        } else {
            throw silentError;
        }
    }
}

Relevant Code Snippets
No response
Identity Provider
Azure AD / MSA
Source
Internal (Microsoft)

When my application's token expires, I can't search the database, so I've been trying to renew this token for 1 week.

Hi @gustavoabell ! Can you provide more information in the description regarding the part you are blocked on.
Also, please refer to [https://github.com/AzureAD/microsoft-authentication-library-for-js/issues/1246] ,hope it helps!

@bmahall done.

@gustavoabell Thanks for that! As per https://github.com/AzureAD/microsoft-authentication-library-for-js/issues/1246#issuecomment-578963619
you need to use acquireTokenSilent with the client-id of your application as the scope.
Let me know if it helps!

@gustavoabell  Can you try setting the silent request config similar to this and retry: (note the forceRefresh set to false option) :
var currentAccount = msalInstance.getAccountByUsername(username);
var silentRequest = {
scopes: ["Mail.Read"],
account: currentAccount,
forceRefresh: false
};

in case this configuration you sent me, as soon as my access token expires will another one be called?

@bmahall my goal is to bring a refresh token to my app, so when my access token expires it calls another one.. because when my app has an expired token I can't access the database.

@bmahall I have a question, in my case i published my app on microsoft azure and added an identity provider.. do i really need the MSAL login and logout to make the token scheme?

@bmahall  I would also like to know if msal is an identity provider too.. because if it is I don't need the microsoft azure platform identity provider to authenticate to microsoft.

@gustavoabell Was the previous question resolved? Please update.
In regards to the new questions, Msal can be used to authenticate with MSA/AAD/other Social IDPs like Google, Facebook (Using B2C). It enables developers to acquire tokens from the Microsoft identity platform. If you prefer using an IDP other than the Azure IDP, you can do so.
The MSAL Login and Logout Api calls are required for authentication.
Does that help?

@bmahall Can I have a more direct contact with you? my application does not need to logout.. just that when I access the application it redirects me to the login screen (this I have already managed to do) but I need to get the access token and do a validation so that when this token expires, get another token not to stop my application. Can you help me with this?

@bmahall I can upload the application to my github repository

@gustavoabell Please provide the steps you are currently taking, and where you are seeing issues, so that we can better help you.

All Right.

@gustavoabell Are you still having issues with this? A more detailed list of steps for the authentication flow can help us better understand what the desired behavior is here.


[simple_system] Bump C++ version in core files

This sets the C++ standard that's being used for a compiler that's building a Verilator simulation. Recent versions of Verilator (since 5.020) require the compiler to be in C++14 mode, so passing -std=c++11 breaks the build with them.
Looking at history, -std=c++14 has been supported since GCC 6.1 (released in 2016), so I don't think this argument is going to cause any tooling problems.
Fixes #2153.

GitHub's API seems to be quite laggy today, even 30 seconds of retry doesn't seem long enough.


ignore .editorconfig

This is an alternative to #98 :wink:

Why ignore it? Having an editorconfig at least helps for software and users that support it.

Why ignore it? Having an editorconfig at least helps for software and users that support it.

There are literally hundreds of editors and a lot of them provide custom config files. I usually ignore them in my projects so that users do not check them in by accident. Guys, I really don't care much... 🌞

.editorconfig is to solve the "hundreds of editors" problem by providing a global config that any editor can read from. These settings then override the editors settings to keep the project-determined settings for basic style points.


Fix/missing kid

Will release asap (next week at latest), the problem now is that mypy suddenly decided to fail my pipeline, no idea why at the moment since locally mypy doesn't return any errors for me.

Released https://github.com/dorinclisu/fastapi-auth0/releases/tag/0.4.0


Cannot extend mapped types

TypeScript Version:  2.1.4
Code
interface A {
    x: number;
}

interface B extends Partial<A> {
    y: number;
}

Expected behavior: Compiles
Actual behavior: An interface may only extend a class or another interface.

This is not an easy change as it would require some deeper architectural reworking. Note that you can accomplish pretty much the same effect with the intersection type operator:
type B = Partial<A> & { y: number };

Just wanted to add: I have considered suggesting this myself, though one thing I must mention is that even if it was made possible to inherit from computed types, that would still miss a significant use case for them as generators of "templates" for new types (rather than serving as base types). I'll try to demonstrate:
Let's say I have an existing type of this shape:
type SomeType = {
	a: number;
	b: boolean;
	c: string;
}

Now I want to declare a type that has the same exact keys only each key is now mapped to a an object that has a property val with the type of the corresponding key in SomeType. Mapped types allow me to do that:
type MyMappedType<T> = { [ P in keyof T]: { val: T[P] } };

Now I want to customize the resulting type, so the closest thing the language allows me is to try to "inherit" from that mapped type. Let's assume that was possible:
interface MyInterface extends MyMappedType<SomeType> {
	a: { val: number, a: string[], b: boolean[] };
	b: { val: boolean, c: number};
}

There's only one problem here:
I forgot to specify property c, so it "fell back" to { val: string }, however the compiler didn't tell me anything went wrong! why? because I used the wrong operator.
What if what I want is not to "inherit" from the mapped type, but simply use it as a "model" or "constraint" for the new type?
I have tried my best to propose a solution in #12942. It's still in an early stage though. I've submitted it at least with the hope that it might influence or inspire the typescript team to include something of that sort in the future, even if it eventually appears with a different syntax or in a more limited form.

I am trying to develop Vue.js app with TypeScript and also having a trouble because of the limitation that mapped types are not available in classes or interfaces.
In Vue.js, you can pass props to a component (just like React) and the properties of props are injected into the properties of the component instance.
Therefore, the declaration of the class of Vue component should be something like this, which is not possible currently.
declare class Vue<Props> {
  [P in keyof Props]: Props[P];
}

// example usage
class Foo extends Vue<{ message: string }> {
  render(h) {
    return <span>{this.message}</span>;
  }
}

@ahejlsberg's workaround cannot work in this situation.


Do not throw a warning when epoll is not supported.

Using the client on OSX results in the following warning: nats-0.5.1/lib/nats/client.rb:154: warning: epoll is not supported on this platform. It would be great to suppress this warning.
Here is a PR that does something similar: https://github.com/tweetstream/tweetstream/pull/182

Which version of EM are you running?

1.0.8

Ok just made a PR to try to address this.  Found a similar issue in em-proxy (https://github.com/igrigorik/em-proxy/issues/48), this seems to be needed due to latest changes in EM 1.0.8.

:+1:


README rethink, prepare for renaming

ref #83
@l3r8yJ take a look, please

PR-Codex overview
Detailed summary

Added badges for Maven Central, Javadoc, Hits-of-Code, Lines-of-Code, PDD status, and License
Updated the motivation and added examples for OOPCOP tool
Added instructions on how to use the tool as a Maven plugin or by running it directly
Added sections for Mutable Objects, Parsers, Validators, Controllers, Utility classes, Getters, Objects without state, and Long class names
Updated the contribution guidelines

✨ Ask PR-Codex anything about this PR by commenting with /codex {your question}

@h1alexbel thank you for your Pull Request. I'll assign someone to review it soon.
If this PR solves a todo from the code, please don't forget to remove it.

@l3r8yJ please review this Pull Request. Deadline (when it should be merged or closed) is 2024-01-01T08:30:23.072703.
You should check if the requirements have been implemented (partially or in full), if there are unit tests covering the changes and if the CI build passes. Feel free to reject the PR or ask for changes if it's too big or not clear enough.
Estimation here is 30 minutes, that's how much you will be paid. You will be paid even if this PR gets rejected.

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Comparison is base (0523402) 74.02% compared to head (1c75403) 74.02%.

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@            Coverage Diff            @@
##             master      #86   +/-   ##
=========================================
  Coverage     74.02%   74.02%
  Complexity       50       50
=========================================
  Files            14       14
  Lines           154      154
  Branches          3        3
=========================================
  Hits            114      114
  Misses           37       37
  Partials          3        3

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

pdd will be fixed in #84 ,wait for it

@l3r8yJ rerun pdd please

@l3r8yJ rerun pdd please, it should be fixed

already

@h1alexbel can you reopen this pr?

@l3r8yJ thank you for resolving this ticket. I've just added it to your active invoice. You can always check all your invoices and more on the Contributor Dashboard.

@l3r8yJ what's wrong with this?

@h1alexbel pdd action is starting, it was created before fix

check: https://github.com/l3r8yJ/sa-tan/pull/90


Release next version for support arm64 in macOS.

Can we release next version for support Apple Silicon?
If changes are insufficient, I think we can build v0.6.1 again just with macOS build.
p.s. I'll try to use cibuildwheel for Linux too. And also this makes to support arm64(aarch64) Architecture's wheels in Linux too.
Thanks. :)

Hi @Hazealign seems the pipeline got broken for publishing new images, see error that we are getting here [1] any chance for taking it a look? Once fixed I can delete the tag and give it a second try
[1] https://github.com/emcache/emcache/runs/7753510309?check_suite_focus=true

I'm really Sorry @pfreixes. I'll make quickfix PR in just today(on KST).

I can't allocate my time. @pfreixes I'll try at this Saturday morning. I apologize for this issue.

Not a problem, not in a rush

Handling this issue now.

Merged but still having issues here https://github.com/emcache/emcache/runs/7973903762?check_suite_focus=true#step:6:13 ... any chance that you could take a look?

@pfreixes that's weird. emcache binaries are uploaded and downloaded well as expected. I'll check it.

@Hazealign can be this closed?


Updated grpcio c extension build for windows to use mingw.

The default compiler for Python c extensions is VS2008
or VS2010 depending on the Python version.  Since c-core
moved onto the c99 standard, these compilers are not
compatible.

Change content looks good but I'd like to learn a lot more from the commit log message. What went wrong since the last release that caused this to need to be revisited as part of this release? What was misunderstood between then and now and in what change?

(Some of that information is already here as a pull request comment.)

The pull request comment is straight from the commit message.
The part that might be missing is "What was misunderstood between then and now and in what change", but I can't really point to a single commit because once we started with c99, there were a lot of offending changes.

I saw that the first time I read the commit message; I don't know why I missed it the second time. My apologies.
Luhguhtum.


API docs broken

The API automodule documentation doesn't seem to be populated in the  latest release
https://pytac.readthedocs.io/en/latest/pytac.html#pytac-element-module
This needs to be fixed. We can consider a move to github pages at the same time.

Fixed with skeleton adoption.


Build on OSX on travis

Fix #4662
cc @victorhurdugaci

The job exceeded the maxmimum time limit for jobs, and has been terminated.

This fails consistently because the build takes too long on Travis OSX agents.


Feature Request: Filter predicate for predefined Hub classes in SqlServerOptions

Can you add feature to filter out specific Hub classes, so other won't be part of SQL backplane ?

No, this is not the responsibility nor even the capability of an individual backplane. It also strikes me as a very unusual use case - why would you want to maintain infrastructure for multiple different backplanes?
The lifetime manager is registered as an unconstructed generic singleton with .AddSqlServer is called (or any other backplane-registering extension, like AddStackExchangeRedis). You can then (ab)use the DI system to register a more specific type for specific hubs that will take priority:
services.AddSingleton<HubLifetimeManager<ChatHubA>, DefaultHubLifetimeManager<ChatHubA>>();
services.AddSingleton<HubLifetimeManager<ChatHubB>, RedisHubLifetimeManager<ChatHubB>>();
services.AddSingleton<HubLifetimeManager<ChatHubC>, SqlServerHubLifetimeManager<ChatHubC>>();

I have 2 hubs, one where I use Groups (this is where backplane needed if I have load balancing), another just per connection which doesn't required to store shared data, also its frequently changing passing back and forth updated value. But the problem is, by default it will create backplane for every hub which is what I want to prevent.

Thanks, it's working as expected


Look into using a proper C++ test harness

E.g., https://github.com/google/googletest instead of our home-rolled one for Test/Test.cpp .

Total possibilities are:

https://github.com/philsquared/Catch
https://github.com/google/googletest
http://banditcpp.org

Catch looks the most attractive.

Once #99 is closed, some work I have done offline can get checked in related to this.


Convert JobResult logs to separate database model

Environment

Python version:
Nautobot version:

Proposed Functionality
Instead of storing JobResult logs as a JSON blob on the JobResult model, each log message should be stored as a distinct database entry.
Use Case
Allow for proper filtering/sorting/searching of log messages. Improve performance of JobResult rendering (#992). Avoid needing to parse JSON on the fly when rendering JobResults, and allow for the JobResult data field to be used for arbitrary JSON data as originally intended (#453).
Database Changes
New database model, migrations for existing JobResult records.
External Dependencies
None

Fixed by #1030.


Allow scale to tolerate absolute lengths

Description
Currently, the scale function only supports values of the type ratio, making it somewhat difficult to resize content to an absolute width/height such as that of the current page or container. This is possible in LaTeX using \resizebox{width}{height}{Foo} (for possible reference, not to add any pressure) and can currently be achieved in Typst by "normalizing" the size of the content to be scaled and multiplying it by a given length as in:
#layout(container => {
  let contents = $a^2 = b^2 + c^2$
  let contents-dimensions = measure(contents)
  let scale-ratio = container.width / contents-dimensions.width * 100%
  scale(reflow: true, x: scale-ratio, y: scale-ratio, contents)
})

Notably, setting contents to something that spans multiple lines such as lorem(50) here would produce questionable output due to the nature of measure.

Use Case
While I don't like tautologies, I'm feeling the urge to simply say that this would make scaling to an absolute length easier, which in turn would facilitate the use case presented above, among others, without needing to resort to using math explicitly. Admittedly, the uses of this are limited by the fact that most people resize images, where absolute lengths are indeed valid; however, I've seen a question from three different people on the Discord server about resizing text, a fletcher diagram as well as an equation to fit exactly in a page. This may not be a lot in terms of demand, but is indicative of utility.

Would it also make sense for scale to allow at most one of x and y to be auto to indicate that that axis should be scaled with the same ratio as the other?


How to get the captions' 2D rendered images?

Hi, thanks for your interesting work!
I can only find the captions and the corresponding point indices, but I can't find the corresponding 2D rendering images. How could I get them?
Thanks a lot!!

Hi, we use real-world images from ScanNet dataset instead of rendering images. You can obtain the image (scannet_frames_25k) downloading link from ScanNet's official website.

I got it, thank u very much!


Add issue template

There is currently no issue template. Having an issue template could mean:

More detailed bug reports
More structured bug reports
More searchable/discoverable issues

You could use a similar template to what the Ruff project uses: https://github.com/astral-sh/ruff/blob/05b406080ada9af8e5e0ff7c25b954fb4f3ae469/.github/ISSUE_TEMPLATE.md?plain=1

Done! Thanks for the suggestion.


Automated cherry pick of #1622: 兼容zone及usable参数

Cherry pick of #1622 on release/2.10.0.
#1622: 兼容zone及usable参数

Codecov Report

:exclamation: No coverage uploaded for pull request base (release/2.10.0@484a94b). Click here to learn what that means.
The diff coverage is 0%.

@@               Coverage Diff                @@
##             release/2.10.0   #1632   +/-   ##
================================================
  Coverage                  ?    7.7%
================================================
  Files                     ?     409
  Lines                     ?   62383
  Branches                  ?       0
================================================
  Hits                      ?    4807
  Misses                    ?   57167
  Partials                  ?     409

Flag
Coverage Δ

#aFlag
7.7% <0%> (?)

Impacted Files
Coverage Δ

pkg/compute/models/networks.go
0.92% <0%> (ø)

Continue to review full report at Codecov.

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

/lgtm
/approve


Hyperlinks for rules

Is your feature request related to a problem? Please describe.
I found this formatter when looking for the parallel of eslint-formatter-pretty (and I found it!). However, this formatter does not appear to hyperlink to the rules the same way eslint-formatter-pretty does.
Describe the solution you'd like
This formatter should provide hyperlinks for the rules similar to eslint-formatter-pretty.
Describe alternatives you've considered
Not use this formatter or build my own.
Additional context
This could turn into a "merge from upstream" series of commits, depending on any other parity gaps desired to close.

Thank you, I will take a look at this.

Adding linked rules would require something similar to https://github.com/stefanbuck/eslint-rule-docs for Stylelint which AFAIK does not exist yet.
I might add links to something like https://stylelint.io/user-guide/rules/<rule-name> but then it would be limited to Stylelint’s ruleset, but links for custom rules created by plugins would not be possible.

The built-in rules at least have the url property. Example: https://github.com/stylelint/stylelint/blob/main/lib/rules/alpha-value-notation/index.js#L21-L24


Language parameter for the demo

What's up?
It would be good if the demo accepted a language parameter which could be set when linking to the demo to set the language.
Example:
https://pygments.org/demo/#lang=python

I'm sure this is obvious, but what do we mean "linking to the demo"? The playground?

My bad, I opened this in the wrong project. How clumsy of me!
It's intended for us be able to specify #lang=prql when linking to the Pygments demo.

No prob, agree with the idea! 😀


Bosh-init version change is not taken into account by deploy command

The deploy command checks if a release, the stemcell, or the deployment manifest has changed. I run into an issue as I had to update bosh-init (support for pre-start scripts was added with version 0.0.82) but running the deploy command resulted in a "nothing changed" message. Shouldn't the version of bosh-init be also taken into account when determining if a new deployment has to be triggered?
I've already started to work on a pull request (but cannot run the integration tests as reported here) - please let me know if this is something useful that I should continue or if this is not treated as an issue.

@philippthun im not sure if it should account for the version since bosh-init records deployment info at the end of the successful procedure. i would not expect new bosh-init version to suddenly redeploy machine it has previously deployed successfully.

@cppforlife probably not re-deploy automatically. What about a switch to do so explicitly? Much like bosh deploy --recreate?

Although for our specific setup (automated pipeline) it would be best to have this automatic redeploy mechanism, I understand that for most bosh-init users this would be strange and not expected. Thus I agree with @voelzmo that there should be a switch. So I will close this issue in favor of https://github.com/cloudfoundry/bosh-init/issues/60


[jupyter extension] show error dialog when there is an error downloading files

instead of silently swallowing errors, show a dialog box that reports them when there is an issue downloading.

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.Kevin Yang seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.You have signed the CLA already but the status is still pending? Let us recheck it.


Note link rendering as nested tags when no other content is present in a field

What happened?

For fields like Person: [[Bill Gates]], this will render as a nested tag list (interpreting each  "[" separately) in the table view.
If you input Person: some [[Bill Gates]] this will render correctly
Also, Person: [[Bill Gates]] roses breaks the field completely, whereas "Person: some [[Bill Gates]] roses" would work correctly.

What I've seen is if I put Person: "[[Bill Gates]]" (with quotation marks) this will render correctly. Is that the expected behavior?
DQL
No response
JS
No response
Dataview Version
0.4.20
Obsidian Version
0.13.7
OS
MacOS

These are all in frontmatter, I assume? If so, yes, the recommended way to define links in frontmatter is "[[Bill Gates]]".
For context: The YAML parser does parsing before I ever see the data so I have no way of disambiguating between a doubly-nested list:
Ingredients:
- [A, B]

And a link:
Ingredients: [[A, B]]

Since these will appear as the same YAML.


API Documentation Generation and Deployment

Issue #216 is now fixed, which is great because we can now create good API docs.  But that creates another issue (this one).  We now need to automatically generate re-frame’s API docs and put them somewhere, probably via GitHub Actions.  Perhaps look at Reagent for inspiration (it has an API link in its docs).  Also, isn’t there already a central site which aggregates the docs from various Clojure projects?  Is that cljdoc? If so, perhaps just point to there?  See #576 ??

Feel free to ping me directly in Slack if you have any questions around using cljdoc for this. Here are the current docs for re-frame on cljdoc.

Codox generates files for the website in the GitHub Actions workflow.
Cljdoc config has been moved to this repo and is verified on continuous integration.


Code for inference

Is there a sample code that you can provide for an inference on a sample image or video?

Hello, I reproduced very poorly on the RAP dataset, and the difference was 6% on Recall. Do you have any suggestions for this? The environment I use is the same as mentioned in the paper

Is there a sample code that you can provide for an inference on a sample image or video?

I have the sample script

Sorry, there this no specialized script for single image inference, but you can easily write one.

Is there a sample code that you can provide for an inference on a sample image or video?

I have the sample script

Would you please provide me with the sample script?

Is there a sample code that you can provide for an inference on a sample image or video?

I have the sample script

Would you please provide me with the sample script?

Sure. You can email me. I'll send the script.

Is there a sample code that you can provide for an inference on a sample image or video?

I have the sample script

Would you please provide me with the sample script?

Sure. You can email me. I'll send the script.

Thank you for your reply. Would you mind email me? My email is<EMAIL_ADDRESS>

Thank you for your reply. Would you like to send me the script?
Memona S. @.***> 于2022年4月18日周一 20:50写道：

Is there a sample code that you can provide for an inference on a sample
image or video?
I have the sample script
Would you please provide me with the sample script?
Sure. You can email me. I'll send the script.
—
Reply to this email directly, view it on GitHub
https://github.com/chufengt/iccv19_attribute/issues/65#issuecomment-1101383621,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ALT4MCGJ4LYBWLMTI4KZZ43VFVLBLANCNFSM5Q6TJ6YA
.
You are receiving this because you commented.Message ID:
@.***>

Is there a sample code that you can provide for an inference on a sample image or video?

I have the sample script

Would you please provide me with the sample script?

Sure. You can email me. I'll send the script.

Could you send me the script for inference thanks a lot. My email is<EMAIL_ADDRESS>

@ThangLehcmute @Swaggeraqua sent.

Got it, thanks!
Memona S. @.***> 于2022年4月21日周四 20:15写道：

@ThangLehcmute https://github.com/ThangLehcmute @Swaggeraqua
https://github.com/Swaggeraqua sent.
—
Reply to this email directly, view it on GitHub
https://github.com/chufengt/iccv19_attribute/issues/65#issuecomment-1105131281,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ALT4MCDXQC6DPULPABLB5HTVGFBEFANCNFSM5Q6TJ6YA
.
You are receiving this because you were mentioned.Message ID:
@.***>

Could you send me the script for inference thanks a lot. My email is<EMAIL_ADDRESS>

您是否可以提供示例代碼來推斷示例圖像或視頻？

我有示例腳本

能否請您提供示例腳本？

當然。你可以給我發電子郵件。我會發送腳本。

Could you send me the script for inference thanks a lot. My email is<EMAIL_ADDRESS>

@memona008 memona008 can you send me the script? thanks

@memona008, can you send me the script?
<EMAIL_ADDRESS>

@ThangLehcmute @Swaggeraqua sent.
@memona008 can you please send the script to me, thank you a lot
<EMAIL_ADDRESS>

Is there a sample code that you can provide for an inference on a sample image or video?

I have the sample script

Would you please provide me with the sample script?

Sure. You can email me. I'll send the script.
@memona008  @ThangLehcmute @Swaggeraqua
Hi , could any of you please send me the script ? Thanks

您是否可以提供示例代码来推断示例图像或视频？

我有示例脚本

Excuse me, can you also send me a sample script when you are free? My email is<EMAIL_ADDRESS>

@ThangLehcmute @Swaggeraqua sent.

Excuse me, could you also send me a sample script when you are free? My email is<EMAIL_ADDRESS>

Hello @memona008 could you please share the script with me as well?
<EMAIL_ADDRESS>Many thanks.

Could you send me the script for inference thanks a lot. My email is<EMAIL_ADDRESS>

Is there a sample code that you can provide for an inference on a sample image or video?

I have the sample script

Would you please provide me with the sample script?

Sure. You can email me. I'll send the script.

Could you send me the script for inference thanks a lot. My email is<EMAIL_ADDRESS>

Could you send me the script for inference thanks a lot. My email is<EMAIL_ADDRESS>

inference.py
https://drive.google.com/file/d/1Ryue0WzPH3LGJj5KicvAxhsIuZdvXNBH/view?usp=drive_web
Hi all, I just checked my email.
Here is the inference script.
I have written it for my specific use-case (only age and gender) You guys
can modify it according to your usecase.
On Wed, Sep 7, 2022 at 9:05 AM imchanyoung @.***> wrote:

Is there a sample code that you can provide for an inference on a sample
image or video?
I have the sample script
Would you please provide me with the sample script?
Sure. You can email me. I'll send the script.
Could you send me the script for inference thanks a lot. My email is
@.***
Could you send me the script for inference thanks a lot. My email is [
@.***
—
Reply to this email directly, view it on GitHub
https://github.com/chufengt/ALM-pedestrian-attribute/issues/65#issuecomment-1238944664,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AKJNZS7GCDSIGACYYWEPILTV5AWBFANCNFSM5Q6TJ6YA
.
You are receiving this because you were mentioned.Message ID:
@.***>


Move DNS providers out of the lego executable

lego could grow indefinitely by supporting every DNS provider API ever made, but this seems less than ideal (#100). I'd like to discuss how to move DNS providers out of the lego executable.
It is fortunate that DNS-01 has a very small surface area in terms of what functions are required. There's basically just two operations:

Create the record _acme-challenge.whatever IN TXT "abc123"
Clean up

lego can monitor the authoritative DNS servers to watch and wait for success, so communication from the DNS provider back to lego can be as little as just signaling failure.
Go limits the mechanisms by which external code can interact with a project like lego. The most straightforward mechanism is to launch a child process and interact with it, and based on my understanding of the requirements, I think that model would work fine:

lego does everything ACME-related, ultimately deciding that it needs to create  _acme-challenge.whatever IN TXT "abc123".
lego, having been invoked with --dns=foo, spawns lego-dns-foo "_acme-challenge.whatever" "abc123", passing on its environment variables.
lego-dns-foo uses FOO_USERNAME and FOO_PASSWORD to create the record indicated by its arguments, then waits.
lego spins and waits for a) _acme-challenge.whatever to show the correct value, b) lego-dns-foo to exit, or c) some configurable timeout.
lego sees _acme-challenge.whatever get created and proceeds in its ACME dance, yielding a completed challenge and a certificate for whatever.
lego no longer needs _acme-challenge.whatever, and indicates this by closing lego-dns-foo's stdin.
lego-dns-foo sees its stdin close, removes the record, and terminates successfully.

This scheme avoids unnecessary complexity (it's simple enough that a provider could be implemented with a shell script) and platform dependence (i.e. signals don't really port well to Windows). lego-dns-foo could communicate back by printing to stdout/stderr and by exiting with a failure code, which seems like it's enough.
Some negatives of this approach are:

lego-dns-foo doesn't get run until late in the operation, which means DNS-related configuration errors aren't detected until late in the operation. This could be mitigated by launching lego-dns-foo with no arguments before doing anything else (i.e. "don't actually create any records, but do fail immediately if you would fail immediately"), or by adding a separate dns-test function which creates a TXT record and verifies its content outside an ACME exchange (#110).
go get github.com/xenolf/lego becomes insufficient. (That's sort of the point, though.) Would it be okay to make users say go get github.com/xenolf/lego-dns-foo? Do we want users to have a kitchen sink option?

Thoughts?

I wonder how many DNS providers really require a whole library to be imported in order to set and delete TXT records. For example, when I implemented DigitalOcean's DNS solver I simply used net/http.
If we can strip down the code of each provider to just using standard library functions, then I'm OK with adding more providers as long as they go in their own package.
But if each provider is going to add another tree of dependencies, then... I'd rather avoid that.

I agree with this comment, that stripping down the code might be the way forward. I started to write a challenge solver for Gandi API before realizing I could make http-01 work with the Stdlib reverse proxy. However, I got far enough to realize that the (huge) Gandi Go package was not necessary and I could just marshall/unmarshall the XML myself quite easily, since as you say it's only a couple of functions needed.
If anyone has a desperate need for a Gandi solver I can finish off what I did. Just leave a comment here. But as I said, I no longer need it just now.

I agree that it's possible to implement many providers in terms of net/http and standard library crypto. On the other hand, take where we are now as a baseline: lego currently uses libraries for AWS Route53, CloudFlare, and DNSimple, so it needs ongoing work to track changes in those libraries. Removing them would mean re-implementing the relevant parts of those libraries, and the ongoing work switches from tracking library changes to track protocol changes.
I think it's pragmatic to re-use existing libraries, though admittedly the scale of the AWS client library colors my thinking. (I use both ~/.aws/credentials and credentials from EC2 instance metadata, hence #102.) Obviously using libraries brings undesirable dependency baggage, hence this proposal to externalize DNS challenge providers instead of rewriting minimal versions of them.

Hmm… maybe it makes sense to use both strategies? Keep zero-dependency providers internal, and spin off e.g. lego-dns-route53?

That is a fair point you make @willglynn that tracking libaries is easier than tracking protocols. Especially if the person who writes the solver disappears. Each solver will likely have a different author and they may not stick around to maintain it. But I guess it comes down to balance and a sort of cost/benefit analysis as to whether to use the lib or not.

Thinking about this some more, maybe this would work:
Have each DNS solver in a seperate package, say under:
github.com/xenolf/lego/acme/dns-XXXX
Keep the plain acme package just for the non-dns solvers
An API user would then just import whichever solver they want, and get the bloat they want.
For the CLI app, lego, we could have the default go get action build it with no DNS solver and be nice and light. Then have a build flag, eg go get -tags dnssolvers build it with every dns solver built in, no matter how huge`. That would be quite straight forward. On the github download page we could have both precompiled binaries available ("fat" and "thin"), or maybe just "fat" would do.

I've been tinkering with moving DNS providers out of package acme, and I have this in a branch right now. (All the providers are still in a single package at the moment, but it need not stay that way.) There's a registry which lets cli.go ask "which providers do I have?" and to instantiate them as directed. Each provider starts with code like:
func init() {
	Registry.addProvider("digitalocean", "DO_AUTH_TOKEN", func() (acme.ChallengeProvider, error) {
		return NewDNSProviderDigitalOcean(os.Getenv("DO_AUTH_TOKEN"))
	})
}

This model would suit conditional compilation just fine.
I should also mention an additional motivation for my original proposal: I have a use case for an external DNS challenge provider.
One of my clients has a bizarre environment that I expect no one else will ever encounter. I could plop a provider in lego/acme/dns_challenge_bizarre.go, but I wouldn't open a PR because it plainly doesn't belong upstream. Internal-only means I need to maintain a local fork of lego, but supporting external providers means I could use my local --dns=bizarre with a normal, unmodified lego build.
(Besides being simple, the child process approach also means I could write lego-dns-bizarre in a different language, which would be another win in this particular case.)
If we're leaning towards keeping lego's usual providers self-contained (though possibly not compiled in by default), this particular itch could be scratched separately by adding a --dns=external provider that fork/exec's a child process.

I'm sorry that I'm a bit late to the party but I had to think about this.
As I said in #100 I'm in favor of moving the DNS providers apart from the manual provider out of the ACME package to lessen the dependency burden. The manual provider should remain in the package as I think every challenge should be solvable by just importing the package.
Concerning the other providers, I think it makes sense to put them into their own packages to allow people to only import what they need... Using the DO provider should not mean to import the huge AWS library for example.
I imagine the folder structure as follows:
lego/acme/providers/dns/cloudflare.go
This gives us the freedom to add providers for the other challenges as well. (Some have already been requested like a manual provider for HTTP-01)
For the CLI the best method would probably be to support build tags in order to allow people to customize their build by using go get.
As far as "plugins" to the CLI go I'm torn back and forth. I intended the CLI to be simple and only a thin wrapper around the library and this would kinda break it.
Looking forward to your thoughts.

That is a good point about keeping the manual DNS provider within the core acme package, and within whatever the "basic" build of the CLI is.

I took a stab at some reshuffling in #112.
I put the DNS providers in lego/dns_providers, rather than lego/acme/dns_providers, because there really isn't anything ACME-specific about them. The DNS challenge providers themselves are bits of code that can create and destroy TXT records, but they're totally oblivious to the details.
greping that branch, the only reason providers import the acme package at all is so acme.DNS01Record() can tell them the details of the TXT records they're intended to create. I'd rather create a DNSProvider interface that directly works in terms of TXT records (and then adapt that interface to conform to acme.ChallengeProvider) instead of having every provider do this independently. Put another way, I think the interface to the DNS providers should be described in terms of the records they need to create and destroy, instead of being described in terms of the broader ACME exchange – hence why I made it a sibling instead of a child to acme.
Moving to one package per provider makes total sense to me. Consuming applications can then import lego/acme, which would have direct dependencies on a minimal set of providers, including a manual DNS-01 challenge provider. If the consuming application wants DigitalOcean, they could import …/digitalocean. We could create an additional package like …/all that would pull in all the providers for convenience, so you could depend on that and get everything even as new providers are added.
I think the registry populated on init() solution in #112 is a sound approach. This lets consumers (lego CLI and otherwise) easily get a list of everything that's available, no matter how it got linked into the binary. It's also by no means mandatory; if you know you want the Digital Ocean provider, you could import and call it directly without talking to a registry.
Speaking of available: I think lego should default to including everything. Build tags are a fine thing to offer users that have a reason to want slimmed-down binaries, but convenience is very important for the masses. Features that aren't available out of the box (i.e. things that require recompilation) tend to suffer.

The DNS challenge providers themselves are bits of code that can create and destroy TXT records, but they're totally oblivious to the details.

You are right, I am not objected to making them siblings.
I agree that lego should to import all providers by default. People who are concerned about the size can customize the build by passing in buildflags.
I would also like to think about how providers to other challenges would fit into your approach. I know that at the moment we have more providers for DNS-01 compared to the other two challenges but I expect that to change and I don't want to introduce any barriers for the future.

With the merge of #144, I guess we can close this. Feel free to reopen if there is still something left to discuss.


Incremental compilation support for modules

Xmake Version
2.7.2
Operating System Version and Architecture
ubuntu
Describe Bug
Modifying headers doesn't trigger recompiling; https://github.com/xmake-io/xmake/issues/2961
we can test it in user_headerunits test.

[ ] xxx.mpp cannot generate deps with header
[ ] we need improve to parse header file from xxx.gcm.d and xxx.cpp.o.d if it contains modules
[ ] ccache will also affect incremental compilation
[ ] we need improve it for gcc/clang/msvc

Expected Behavior
..
Project Configuration
No response
Additional Information and Error Logs
No response

we need improve to parse include deps with modules for gcc.
hello.gcm.d
build/.objs/user_headerunit/linux/x86_64/release/src/hello.mpp.o  /mnt/xmake/tests/projects/c++/modules/user_headerunit/build/.gens/user_headerunit/linux/x86_64/release/rules/modules/cache/hello.gcm:  src/hello.mpp\
build/.objs/user_headerunit/linux/x86_64/release/src/hello.mpp.o  /mnt/xmake/tests/projects/c++/modules/user_headerunit/build/.gens/user_headerunit/linux/x86_64/release/rules/modules/cache/hello.gcm:  ./src/header.hpp.c++m\
hello.c++m:  /mnt/xmake/tests/projects/c++/modules/user_headerunit/build/.gens/user_headerunit/linux/x86_64/release/rules/modules/cache/hello.gcm\
.PHONY: hello.c++m\
/mnt/xmake/tests/projects/c++/modules/user_headerunit/build/.gens/user_headerunit/linux/x86_64/release/rules/modules/cache/hello.gcm:|  build/.objs/user_headerunit/linux/x86_64/release/src/hello.mpp.o\
CXX_IMPORTS += ./src/header.hpp.c++m

we need improve to parse include deps with modules.
gcc
hello.gcm.d
build/.objs/src/hello.mpp.o  /modules/cache/hello.gcm:  src/hello.mpp\
build/.objs/src/hello.mpp.o  /modules/cache/hello.gcm:  ./src/header.hpp.c++m\
hello.c++m:  /modules/cache/hello.gcm\
.PHONY: hello.c++m\
/modules/cache/hello.gcm:|  build/.objs/src/hello.mpp.o\
CXX_IMPORTS += ./src/header.hpp.c++m

I really don't understand this include dependency format of gcc. what's :|? neutral_face

That's an order only dependency, it just means hello.gcm must be built after hello.mpp.o, but need not be rebuilt if it's older than hello.mpp.o.

we need improve to parse include deps with modules.
gcc
hello.gcm.d
build/.objs/src/hello.mpp.o  /modules/cache/hello.gcm:  src/hello.mpp\
build/.objs/src/hello.mpp.o  /modules/cache/hello.gcm:  ./src/header.hpp.c++m\
hello.c++m:  /modules/cache/hello.gcm\
.PHONY: hello.c++m\
/modules/cache/hello.gcm:|  build/.objs/src/hello.mpp.o\
CXX_IMPORTS += ./src/header.hpp.c++m

I really don't understand this include dependency format of gcc. what's :|? neutral_face

That's an order only dependency, it just means hello.gcm must be built after hello.mpp.o, but need not be rebuilt if it's older than hello.mpp.o.

Got it, thanks!


LICENCE vs LICENSE

https://github.com/ai-cfia/devops/blob/b650fb48b9ded1bd981239a6dc582484bbe73aa9/github-repository-creation-guide.md?plain=1#L8

Github uses LICENSE
https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/licensing-a-repository

Fixed in PR #8