HA Cloud: media_player lost volume functionality due to being changed to switch type

Home Assistant release with the issue:
All versions since 0.61
Last working Home Assistant release (if known):
0.60
Operating environment (Hass.io/Docker/Windows/etc.):
Hass.io on RPi3
Component/platform:
https://www.home-assistant.io/components/cloud/
Description of problem:
This  commit removed all volume functionality from media_player entitys when using Google Assistant. The rationale is flawed IMO, I would much rather keep the ability to set volume using Google Home since I seldom say the phrase "Turn off ALL the light" unless I'm going to bed/leaving the house, while the ability to set the volume is useful. I'm surprised no one else noticed this change.
Problem-relevant configuration.yaml entries and (fill out even if it seems unimportant):
cloud:
google_actions:
Traceback (if applicable):
Additional information:

Is this why volume is not working on Chromecasts recently also?

Media players are not lights. Sending them as lights would be even more of a hack then sending as a switch. You can still control volume via setting brightness.
There is no official device type or trait that can be used to set volume on media players.
However there are some undocumented device types that could be used.
Closing this as it is working as intended.

Media players are not lights. Sending them as lights would be even more of a hack then sending as a > switch. You can still control volume via setting brightness.

It's not possible set the brightness via Google Assistant as the devices is picked up as a switch with only on/off capability. Trying to set the brightness just initiates a web search for the phrase.
I don't understand why it would be more of a hack to set the device type to Light as this -only- affects the Google Assistant integration and nothing else, and in this case setting it to a light provides more functionality than setting it as a switch.
I can understand not wanting to implement a hack at all until the component is implemented as a proper media player, but in that case the rest of the brightness code should be removed as it's not working.

UPDATE: I realized it was not the switch type that was at fault - you're correct that it's possible to set brightness on a switch that supports it. Sorry for stating otherwise.
The problem is in the webostv component, which does not have SUPPORT_VOLUME_SET set in the feature list. I'm not sure why since it does implement set_volume_level function.
I added SUPPORT_VOLUME_SET to the features and now I can set the volume using Google Assistant.


Razor view intelligence

Issue Type: Bug
Razor view intelligence doesn't get updated unless there be a change in csproj file! For example, I added a custom tag Helper class and razor intelligence didn't show any autocomplete until I made a change into csproj file (just a space) and then I had my tag in Autocomplete drop-down list.
VS Code version: Code 1.66.0 (e18005f0f1b33c29e81d732535d8c0e47cafb0b5, 2022-03-30T05:50:14.623Z)
OS version: Windows_NT x64 10.0.19044
Restricted Mode: No

Pls create an issue in the extension's repo responsible for this


Initial KE100 support.

Reading data works. Setting temperature and frost protection returns empty result from the device, which creates an EmptyResult runtime error.

I did some more digging and the EmptyResult error is thrown in control_child method in tapo/src/api_client.rs on the last statement.
    pub(crate) async fn control_child<R>(
        &self,
        device_id: String,
        child_request: TapoRequest,
    ) -> Result<R, Error>
    where
        R: fmt::Debug + DeserializeOwned + TapoResponseExt,
    {
        debug!("Control child...");
        let params = MultipleRequestParams::new(vec![child_request]);
        let request = TapoRequest::MultipleRequest(Box::new(TapoParams::new(params)));

        let params = ControlChildParams::new(device_id, request);
        let request = TapoRequest::ControlChild(Box::new(TapoParams::new(params)));

        let responses = self
            .protocol
            .execute_request::<ControlChildResult<TapoMultipleResponse<R>>>(request, true)
            .await?
            .ok_or_else(|| Error::Tapo(TapoResponseError::EmptyResult))?
            .response_data
            .result
            .responses;

        let response = responses
            .into_iter()
            .next()
            .ok_or_else(|| Error::Tapo(TapoResponseError::EmptyResult))?;

        validate_response(&response)?;

        response
           .result
           .ok_or_else(|| Error::Tapo(TapoResponseError::EmptyResult))
    }

Since the control_child method is used for read and write operations, I guess we need to check the result to be empty at some point, but would it make sense to do the check, when we interpret the result?

Looking at the tapo app source code, I see a few fields that might be useful:

temp_unit string (it should probably be converted to an enum)
min_control_temp integer
max_control_temp integer
min_temp integer (it ends up getting used by frost protection)

You're correct. ApiClient::control_child should either be updated to handle empty responses or a copy of the function that can should be created.

This what I get when executing device.set_temperature(19).await?;:
 2023-10-20T06:07:48.307Z INFO  tapo_ke100                                > EXECUTING COMMAND WITH EMPTY RESULT
 2023-10-20T06:07:48.307Z DEBUG tapo::api::api_client                     > Control child...
 2023-10-20T06:07:48.307Z DEBUG tapo::api::protocol::passthrough_protocol > Request to passthrough: {"method":"control_child","params":{"device_id":"REDACTED","requestData":{"method":"multipleRequest","params":{"requests":[{"method":"set_device_info","params":{"device_on":true,"target_temp":19}}]}}}}
 2023-10-20T06:07:50.506Z DEBUG tapo::api::protocol::passthrough_protocol > Device responded with: TapoResponse { error_code: 0, result: Some(TapoResult { response: "kSb5Ej1g6e5y/FqhXbR8zs2pbesSXEoFnpur25O4SvYOAZIpvJ6bXrBACLOoaxeYHShR60TbXG1bad+r/jBY1vjKaAvEN3TYXqkxTTHp051EIBT88l1z1rV538LWPgGcLy+hD1rUdDX0wMO/p7HvDwMPIv6wxhnG/NwGxaTxt8g=" }) }
 2023-10-20T06:07:50.506Z DEBUG tapo::api::protocol::passthrough_protocol > Device inner response decrypted: {"result":{"responseData":{"result":{"responses":[{"method":"set_device_info","error_code":0}]}}},"error_code":0}
 2023-10-20T06:07:50.507Z DEBUG tapo::api::protocol::passthrough_protocol > Device inner response: TapoResponse { error_code: 0, result: Some(ControlChildResult { response_data: TapoMultipleResponse { result: TapoMultipleResult { responses: [TapoResponse { error_code: 0, result: None }] } } }) }
 2023-10-20T06:07:50.507Z DEBUG tapo::api::protocol::passthrough_protocol > validate_response passed
 2023-10-20T06:07:50.507Z DEBUG tapo::api::protocol::passthrough_protocol > assign result passed

What do you think about splitting ApiClient::control_child into ApiClient::read_child and ApiClient::write_child to handle the None response for the write operation? I'm struggling a bit to make ApiClient::control_child handle both cases.

This should get the job done.
api_client
    pub(crate) async fn control_child<R>(
        &self,
        device_id: String,
        child_request: TapoRequest,
    ) -> Result<Option<R>, Error>
    where
        R: fmt::Debug + DeserializeOwned + TapoResponseExt,
    {
        debug!("Control child...");
        let params = MultipleRequestParams::new(vec![child_request]);
        let request = TapoRequest::MultipleRequest(Box::new(TapoParams::new(params)));

        let params = ControlChildParams::new(device_id, request);
        let request = TapoRequest::ControlChild(Box::new(TapoParams::new(params)));

        let responses = self
            .protocol
            .execute_request::<ControlChildResult<TapoMultipleResponse<R>>>(request, true)
            .await?
            .ok_or_else(|| Error::Tapo(TapoResponseError::EmptyResult))?
            .response_data
            .result
            .responses;

        let response = responses
            .into_iter()
            .next()
            .ok_or_else(|| Error::Tapo(TapoResponseError::EmptyResult))?;

        validate_response(&response)?;

        Ok(response.result)
    }

hub_handler
    pub(crate) async fn control_child<R>(
        &self,
        device_id: String,
        request_data: TapoRequest,
    ) -> Result<Option<R>, Error>
    where
        R: fmt::Debug + DeserializeOwned + TapoResponseExt,
    {
        self.client.control_child(device_id, request_data).await
    }

s200b_handler
    pub async fn get_device_info(&self) -> Result<S200BResult, Error> {
        let request = TapoRequest::GetDeviceInfo(TapoParams::new(EmptyParams));

        self.hub_handler
            .control_child(self.device_id.clone(), request)
            .await?
            .ok_or_else(|| Error::Tapo(TapoResponseError::EmptyResult))
    }

Thanks for the code snippets. I managed to resolve the issue with the None result in 8716347a4efdd0f6021316116e89eacc6218fde1. Need to work a bit more on this to support temperatures in float and add the parameters you suggested above.

Meanwhile I added support for min/max_control temp, child_protection and temp_offset.
I added a min_temp parameter, but although the API doesn't respond with an error when setting a value the value on the device doesn't change (checked in the app). What is strange, is that neither device_info nor component_list seem to expose the min_temp parameter.
I'm thinking of adding a function to query the current temp directly for convenience as this will most likely be a common use case, apart from setting the temperature.
Let me know if you have any other thoughts on what could be added.

You're correct.
There's a separate endpoint called set_frost_protection that requires min_temp and temp_unit as parameters. It's up to you if you want to include it in this pull request. Alternatively, we could save it for a future update to keep this one more manageable.
By the way, there's also a get_frost_protection endpoint that I suspect will return the min_temp.
However, It would be useful to include temp_unit.
Regarding your question, there's a separate endpoint called get_temperature_records that should fulfill the task. You can implement it in a similar way to get_trigger_logs.

I've tried the changes you proposed but seem to be getting a compilation error in tapo/src/api/child_devices/ke100_handler.rs now:
error[E0698]: type inside `async fn` body must be known in this context
  --> tapo/src/api/child_devices/ke100_handler.rs:63:14
   |
63 |             .control_child(self.device_id.clone(), request)
   |              ^^^^^^^^^^^^^ cannot infer type for type parameter `R` declared on the method `control_child`
   |
note: the type is part of the `async fn` body because of this `await`

I suggest we try to get this one fixed and then close this PR. I'll keep working on the other stuff and will create another PR once ready.
Thanks for the help with getting the Rust code right. As you may have recognized I'm learning by doing here.

Never mind, I fixed it. If I understood the Rust documentation right, I needed to bind control_child: .control_child::<KE100Result>.
    pub async fn set_temperature(&self, target_temperature: u8) -> Result<(), Error> {

        let control_range = self.get_control_range().await?;

        if target_temperature < control_range[0] || target_temperature > control_range[1] {
            return Err(Error::Validation {
                field: "target_temperature".to_string(),
                message: format!("Target temperature must be between {} (min_control_temp) and {} (max_control_temp)", control_range[0], control_range[1]),
            });
        }

        let json = serde_json::to_value(TrvSetDeviceInfoParams::new().target_temp(target_temperature)?)?;
        let request = TapoRequest::SetDeviceInfo(Box::new(TapoParams::new(json)));

        self.hub_handler
            .control_child::<KE100Result>(self.device_id.clone(), request)
            .await?;

        Ok(())
    }

I assume I can use the same pattern for all the functions which don't return a result?

I assume I can use the same pattern for all the functions which don't return a result?

Exactly, yeah. However, it would be better to use .control_child::<serde_json::Value> instead of .control_child::<KE100Result>.
Please give me a shout when you're done with everything you want to do, and I'll do a review.
If you don't have the time to address all the little things, you can permit me to contribute to the PR.

Just pushed the last updates. I think the PR is ready to go for review.

I found one more thing I may need your help with. It's about decoding the base64 encoded nickname. The following fragment in example/tapo_ke100.rs returns the base64 encoded nickname:
let hub = ApiClient::new(tapo_username, tapo_password)?
    .h100(ip_address)
    .await?;

But when I use the detour via get_child_device_list() as in the following fragment, I get the decoded nickname in device.nickname
// Adapted code from examples/tapo_h100.rs

let hub = ApiClient::new(tapo_username, tapo_password)?
    .h100(ip_address)
    .await?;
let child_device_list = hub.get_child_device_list().await?;

for child in child_device_list {
    match child {
        ChildDeviceResult::KE100(device) => {
            info!(
                "Found KE100 child device with nickname: {}, id: {}, current temperature: {} {:?} and target temperature: {} {:?}.",
                device.nickname,
                device.device_id,
                device.current_temperature,
                device.temperature_unit,
                device.target_temperature,
                device.temperature_unit,
            );
        }

Do you see a similar behavior, when you test other child devices such as s200b or t300? Is this intended behavior or should we do something about this?

Ah, that is a defect. Nice find!
I've fixed it in https://github.com/mihai-dinculescu/tapo/commit/fa73e407e578dc748a4a4bca9f6528f4a18649e4.

Merged your fixes for the nickname decoding into this PR. The decoding seems to work also with the feature I added to supported empty results for the control_child function.

I've committed some minor tweaks for language and lints.
I think this is in a good shape to ship 🚀

Released in v0.7.6.
Thank you for this amazing effort!


Invalid Route detecting

I am unable to use this library as it is detecting wrong route in 40% cases. can someone tell what wrong i am doing.
here is result of one case geojson link.
below is the sample code :

bellow is the switches i passed to generate routerdb from osm pbf
idp --read-pbf E:\Geo\india_osm.pbf --pr --create-routerdb vehicles=bicycle,pedestrian,car,bigtruck,smalltruck --contract car.shortest --contract car --contract bigtruck.shortest --write-routerdb E:\Geo\india_shortest.routerdb
The issue is if vehicle is travelling through LAN1(upward direction) suppose, but this library resolve it on LAN2(downward direction). see the below snap

green checked is what correct and red cross is wrong and is also point resolved by this library.
google gives correct route
https://www.google.com/maps/dir/26.596151+74.874098/26.578853+74.818142/@26.5941986,74.8423378,16z/data=!4m9!4m8!1m3!2m2!1d74.874098!2d26.596151!1m3!2m2!1d74.818142!2d26.578853

Suppose we have four points A->B->C->D in forward direction.  And Itinero should resolve Points on LAN1 i.e. LEFT LAN(OneWay), but in actual Itinero resolve them as below:
A: LAN1 [LEFT Road(OneWay)]
B: LAN2 [RIGHT Road(OneWay)]
C: LAN2 [RIGHT Road(OneWay)]
D:LAN1 [LEFT Road(OneWay)]

anyone who could reply my query?

The resolving function tricky, it does not take into account anything else but the location.
What is the issue exactly? Are points being resolved on the incorrect lane while the coordinate is directly above that lane? Is it an option to improve the location of the coordinates?
Can you give me the coordinates of a resolve that fails together with where it should resolve?

Hi Ben Abelshausen, Thanks for reply. i'll try to explain things.

What is the issue exactly? Are points being resolved on the incorrect lane while the coordinate is directly above that lane?

yes, point are being resolved on the incorrect lane.  Coordinate(lat:26.596151,long:74.874098) to be resolved and itinero resolved as this Coordinate(lat:26.596212,long:74.87421) RouteDb_Result_GeoJson_link
Vehicle was traveling from Point A to Point D via Point B and Point C link.
And you can find google resolve it correctly as I need google_link

Is it an option to improve the location of the coordinates?
may be, if we find how google is resolving it on correct lane, like guessing travelling direction and shortest path.

Also, would like to know why Itinero has decided to do this

RouteDb_Result_link

@mukeshrebari, have you tried calling TryResolveConnected passing true for forward? In some tests I have run it seems to help but not always:
//Try to resolve the point connected to the route going forward
						var resolved = routingClient.TryResolveConnectedPoint((float)ll.Lat, (float)ll.Long, 2000, 1000, true);

						//If there was an error then use the normal resolve
						if (resovled.IsError)
						{
							resovled = routingClient.TryResolvePoint((float)ll.Lat, (float)ll.Long, 1000);

							//If still an error than discard it
							if (resovled.IsError) continue;
						}

Hi @juliusfriedman , Thanks for reply. I would try it and let you know.


BUGFIX: non-ASCII ReadMe error

Avoid crash on ReadMe files containing non-ASCII symbols
Without such workaround this module constantly caused Server Error 500 in repository view with the following log dump, if the repo contained ReadMe file in UTF-8 codepage:
  Rendered plugins/redmine_git_hosting/app/views/repositories/show.html.erb within layouts/base (191.4ms)
Completed 500 Internal Server Error in 303ms (ActiveRecord: 30.8ms)

ActionView::Template::Error ("\xE2" from ASCII-8BIT to UTF-8):
    47:                        :id => @project, :page => nil, :key => User.current.rss_key})) %>
    48:    <% end %>
    49:
    50:    <%= call_hook(:view_repositories_show_bottom) %>
    51:
    52:    <% other_formats_links do |f| %>
    53:     <%= f.link_to 'Atom',
  lib/redmine/hook.rb:61:in `block (2 levels) in call_hook'
  lib/redmine/hook.rb:61:in `each'
  lib/redmine/hook.rb:61:in `block in call_hook'
  lib/redmine/hook.rb:58:in `tap'
  lib/redmine/hook.rb:58:in `call_hook'
  lib/redmine/hook.rb:158:in `call_hook'
  app/controllers/repositories_controller.rb:125:in `show'

Thank you!


Change from master to main

Change from assuming principle branch is named "master" to "main", as is the new convention.

Thank you very much for the change @kthyng. Have you built a test project from the changed code? I really need some automatic way of testing the git part of this package automatically...

I have though not sure how helpful they will be? I did make other changes too in setting it all up. Here are two:

https://github.com/axiom-data-science/extract_model
https://github.com/axiom-data-science/ocean_data_gateway

Very helpful indeed! I see that the CI etc are working, so I assume that this change is good to merge.
Thanks again!

Eep! I really hope I didn't mess anything up! I think I'll need to go through this process again soon and I'll take better notes so I can help integrate more changes.
Thank you so much for making this package! It has really helped me get better up to speed on best practices.

Well we can always change things again, if they break hehe. And thanks for contributing back. I hope this project can evolve to become a 'living' version of crowdsourced best practices.


declare BigQuery GA

Yay!
+1 to Garrett's suggestion to wait to update the readme until after the packages are published.

@garrettjonesgoogle PTAL

Was this packaged up? Looks like we're still missing the README update if so.

Yes it's packaged & released now - now we just need to update the READMEs.


Not compatible with Flutter 3.10????

Package
dynamic_color
Existing issue?

[X] I checked the existing issues

What happened?
While trying to add dynamic_color to a brand new Flutter 3.10 project:
Because every version of flutter_localizations from sdk depends on material_color_utilities 0.2.0 and dynamic_color >=1.6.4 depends on material_color_utilities ^0.5.0, flutter_localizations from sdk is incompatible with dynamic_color >=1.6.4.

So, this is not compatible with Flutter SDK? O.o
Relevant log output
Because every version of flutter_localizations from sdk depends on material_color_utilities 0.2.0 and dynamic_color >=1.6.4 depends on material_color_utilities ^0.5.0, flutter_localizations from sdk is incompatible with dynamic_color >=1.6.4.

You should be able to downgrade to 1.6.3 for now. It's the flutter_localizations and flutter_test packages which need to be updated, but for now 1.6.3 will work

@tomc128
There seems to be other issues triggering this error.
I do get the following
`Because every version of flutter_test from sdk depends on material_color_utilities 0.3.0 and dynamic_color >=1.6.4 depends on material_color_utilities ^0.5.0, flutter_test from sdk is incompatible with dynamic_color >=1.6.4.
So, because goaly depends on both dynamic_color ^1.6.4 and flutter_test from sdk, version solving failed.
You can try the following suggestion to make the pubspec resolve:

Consider downgrading your constraint on dynamic_color: flutter pub add dynamic_color:^1.6.3`

I do have the following in pubspec.yaml
environment:   sdk: '>=3.0.0 <4.0.0'
dev_dependencies:   flutter_test:     sdk: flutter

Downgrading is not proper solution. Request author/contributors to resolve this.

I forgot to publish 1.6.5 to address this issue by introducing a range for material_color_utilities, thereby supporting multiple Flutter SDKs. This should be fixed now.


Make CFBundleIdentifier configurable.

CFBundleIdentifier is currently hardcoded to mainClassName.
I'd suggest to add a bundleIdentifier property to MacAppBundlePluginExtension and use that if configured, with mainClassName being the fallback.

Sounds reasonable. Using mainClassName was to be compatible with the Gradle Application plugin
https://docs.gradle.org/current/userguide/application_plugin.html

It's definitely a reasonable default.

Done in 2.1.1

Great! Thanks!


Static IP assignment

On your router or DHCP server assign a static IP to your Pi-hole device ...

This would not work for me.  I wanted both DNS and DHCP.
I would set as such on my ISP router, but after disabling DHCP on ISP router (UK TalkTalk and Virgin Media offerrings) it would seemingly drop connectivity to the Pi-Hole.  Upon enabling DHCP on ISP router connectivity would resume.  I worked around this by setting a static IP address within resin.io as detailed here.
I would have thought more issues would have been raised if this was a wider problem, but perhaps a foot-note is worth adding to the wiki just in case :)

The wording is technically incorrect - What we're actually suggesting is that you create a reservation on your DHCP server for your Pi-hole device so that it assigns a consistent address.  The issue is that not every DHCP server (especially ISP-provided ones) actually allow reservations.  We're not actually telling you to turn off DHCP; that would be bad!
I'll try to clean up the wording sometime soon.

Thanks.  Appreciate not everyone wants to change DHCP too, but the UI on the Virgin Media Hub 3 is absolutely awful.  I had DHCP on the Pi-Hole enabled, and would then disable DHCP on the ISP router.   No real issue here, can close.  Only posted because it took me a while to resolve my issue.


Creation of managed environment fails via SDK

This issue is a: (mark with an x)

[x] bug report -> please search issues before submitting
[ ] documentation issue or request
[ ] regression (a behavior that used to work and stopped in a new release)

Issue description
I am using the preview version of the Resource Management SDK to create Azure Container Apps resource. When I try to create a managed environment, I have to provide the Log Analytics workspace. Even when I do so, the creation still fails.
Steps to reproduct

Start with empty resource group, where you wanna create an environment, empty, no container apps yet.
Use the SDK in your c# example:
<PackageReference Include="Azure.ResourceManager.Applications.Containers" Version="1.0.0-beta.1" />
The try to execute the following source code:

    [TestMethod]
    public async Task A_DeployManagedEnvironment()
    {
        SubscriptionResource subscription = await _armClient.GetSubscriptions().GetAsync(_subscriptionId.ToString(), cancellationToken);
        ResourceGroupResource resourceGroup = await subscription.GetResourceGroups().GetAsync(_resourceGroupName, cancellationToken);

        ManagedEnvironmentCollection managedEnvironmentCollection = resourceGroup.GetManagedEnvironments();

        ManagedEnvironmentData managedEnvironmentData = new ManagedEnvironmentData(_location)
        {
            DaprAIInstrumentationKey = null,
            DaprAIConnectionString = null,
            AppLogsConfiguration = new AppLogsConfiguration
            {
                Destination = "log-analytics",
                LogAnalyticsConfiguration = new LogAnalyticsConfiguration
                {
                    CustomerId = _logAnalyticsCustomerId,   // NOTE: This is the value I've got from the LogAnalytics resource.
                    SharedKey = null
                },
            },
            ZoneRedundant = false,
            Location = _location,
            Tags = { },
        };
        await managedEnvironmentCollection.CreateOrUpdateAsync(WaitUntil.Completed, _managedEnvironmentName, managedEnvironmentData, cancellationToken);

    }

Exception occurs:

Test method Class1.A_DeployManagedEnvironment threw exception:
Azure.RequestFailedException: Service request failed.
Status: 400 (Bad Request)

Content:
{"code":"InvalidRequestParameterWithDetails","message":"LogAnalyticsConfiguration is invalid.  Must provide a valid LogAnalyticsConfiguration"}

Headers:
Cache-Control: no-cache
Pragma: no-cache
x-ms-ratelimit-remaining-subscription-resource-requests: REDACTED
api-supported-versions: REDACTED
Server: Microsoft-IIS/10.0
X-Powered-By: REDACTED
x-ms-request-id: 8a9bb00b-ca13-4e9b-a813-0acef0ce68d6
x-ms-correlation-request-id: REDACTED
x-ms-routing-request-id: REDACTED
Strict-Transport-Security: REDACTED
X-Content-Type-Options: REDACTED
Date: Fri, 15 Jul 2022 04:39:39 GMT
Content-Length: 143
Content-Type: application/json; charset=utf-8
Expires: -1

Expected behavior
No exception is thrown and "empty" Container App environment is created.
Actual behavior [What actually happened.]
Exception which says that configuration is invalid.
Screenshots
n/a
Additional context
The SDK works super nice, we managed to make it work for all our use cases so far except the creation of the Managed Environment. Frankly, when you create an environment via Azure Portal, then debug the code, you see which properties in the SDK are filled in, example of existing environment:

On the screenshot you see that the only parameter available for the Log Analytics Configuration is the CustomerId.

Hi @vturecek ,
No, I am not providing the SharedKey, only the CustomerId.
Should I be providing both?

Hi @k-krupka - yes, the SharedKey is required.


Search for export

Is there any export with i can trigger this change ?
`function ApplyPrisonerSkin()
local playerPed = PlayerPedId()
local Player = QBCore.Functions.GetPlayerData()
if DoesEntityExist(playerPed) then
	local DataMale = { --CHANGE CLOTH HERE
			outfitData = {
		['t-shirt'] = {item = 15,texture = 0},
		['torso2']  ={item = 146,texture = 0},
		['decals'] = {item = 0, texutre = 0},
		['arms']     = {item = 119, texture = 0},
		['pants']  ={item = 3, texture = 7},
		['shoes']  = {item = 12, texture = 12},
		['vest']  = {item = 0, texture = 0},
		['bag']  = {item = 0, texture = 0},
		['mask']  = {item = 0, texture = 0},
		['hat']  = {item = 0, texture = 0},
			}}
	local DataFemale = {
			outfitData = {
		['t-shirt'] = {item = 3,texture = 0},
		['torso2']  ={item = 38,texture = 3},
		['decals'] = {item = 0, texutre = 0},
		['arms']     = {item = 120, texture = 0},
		['pants']  ={item = 3, texture = 15},
		['shoes']  = {item = 66, texture = 5},
		['vest']  = {item = 0, texture = 0},
		['bag']  = {item = 0, texture = 0},
		['mask']  = {item = 0, texture = 0},
		['hat']  = {item = 0, texture = 0},
			}}

			if Player.charinfo.gender == 0 then

				TriggerEvent('qb-clothes:client:loadOutfit', DataMale) --Change Here the Clothing resource
			else
			 	TriggerEvent('qb-clothes:client:loadOutfit', DataFemale) --Change Here the Clothing resource

			end

	SetPedArmour(playerPed, 0)
	ClearPedBloodDamage(playerPed)
	ResetPedVisibleDamage(playerPed)
	ClearPedLastWeaponDamage(playerPed)
	ResetPedMovementClipset(playerPed, 0)

end

end`

RegisterNetEvent('qb-clothing:client:loadOutfit', DataMale)

how we can do it for esx ?


Docker + Pycharm Test Problem

docker-compose -f local.yml run django python manage.py test works fine
Using Docker Python Interpreter in PyCharm to run the tests throws an error:

psycopg2.OperationalError: could not connect to server: No such file or directory
	Is the server running locally and accepting
	connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Tests run correctly when Docker-compose is used in Pycharm but it exits the existing container.

It could be that we just need better documentation on how to use Cookiecutter + Docker + Pycharm but I couldn't get either of the last two methods to work correctly.

When you press run, PyCharm prints the command. What was the command? Additionally, did you first build then migrate THEN run the tests? Lastly, UNIX domain on Windows... are you using a Linux subsystem on your Windows machine?

When you press run, PyCharm prints the command. What was the command?

python -u /opt/.pycharm_helpers/pycharm/django_test_manage.py test myproject.tests.TestMyProjectView /opt/project

did you first build then migrate THEN run the tests?

docker-compose should do this. As I mentioned on #3, it runs fine when running from the terminal.

Lastly, UNIX domain on Windows... are you using a Linux subsystem on a Windows machine?

I'm on Mac OS X.

I just tried and was unable to reproduce the problem. Here is what I did:

I created a project using Docker + Pycharm
Opened project in PyCharm
Configured a remote interpreter with Docker Compose:

config file: local.yml
service: django
left all the rest as default

Wait a couple of minute for PyCharm to connect & save
Run pytest configuration on the top right, all good

Can you clarify what you mean by "Using Docker Python Interpreter in PyCharm to run the tests"? I have a different command printed at step 4, so I
The error you get seems to indicate that the DB isn't able to start or bind the port properly. If you open the "Services" tool window (⌘ + 8), is posgres running in your compose stack? You can click on it to see the logs.
Do you have Postgres installed on your Mac? I had issues in the past where Docker was trying to bind the same port as the server running on my host machine.

@browniebroke those are the exact steps I took for 3)
By Docker Python Interpreter in PyCharm in 2), I meant using a remote interpreter with Docker.
I do have Postgres installed on my Mac but I run into a different problem when I use a remote interpreter with Docker Compose. The tests run fine but it exits the existing container.

I had all sorts of problems with postgres because I forgot to delete volumes. If I have a postgres problem in dev the first thing i do is delete unused volumes

I had all sorts of problems with postgres because I forgot to delete volumes. If I have a postgres problem in dev the first thing i do is delete unused volumes

Closing this as I'm still unable to reproduce.


Reverse query results iteration by design

As per #175, mutating the query results array while iterating upon that array (e.g. via entitiy.removeComponent(), or entity.addComponent() in a Not() query) can result in unexpected behaviors, and at the moment it's easy to stumble into those mutations accidentally.
An alternative to documenting the work-around as suggested in #163, a custom object could be used for query results to work around the behavior by substituting iteration methods which iterate in reverse order by default, perform a .slice() prior to iteration, or some other means.
As @fernandojsg mentioned on Discord, any such solution should be benchmarked (pending #178) as using custom objects in place of arrays might come at a high cost.

Hey! Just wanted to bump this. I've been working in ecsy for a few months now and I've run into this multiple times. It's really easy to forget and I think many new users will get tripped up by this.

IMO reversing iteration is just trying to hide the inherent complexity that queries are tied to entity mutations. There are all sorts of other issues that can come up as well, so we just need better ways of being able to think about that complexity rather than trying to hide it. Unity largely does this by making these mutations happen at more explicit points in the frame using EntityCommandBuffers, I think a similar abstraction could make sense and could also get rid of some of the weirdness and confusion around deferred entity removal.

After thinking on it more over the last few weeks, I've come to agree with @netpro2k's assessment - virtually any implementation adds unnecessary obfuscation.


Hostlist

This makes (most) executors set a PSIJ_NODEFILE variable pointing to a nodefile, which is a solution for #200 and touches on https://github.com/ExaWorks/job-api-spec/issues/148, although it would be good to figure out a way to formalize this in the spec.
It also contains a few other minor fixes.

Looks reasonable to me! The format of all the node files is the same--a hostname on each line or something?

In theory, yes.


feat: add If-Match Support for OpRead, OpWrite, OpStat

close #1966
This PR introduces if_match: Option<String> for structs OpRead, OpWrite and OpStat

This PR only introduces options in Op(s) without service implementation.
I noticed that lots of contributors want to build the implementation to popular backends, so this PR just opened without implementation for not blocking their works.

I noticed that lots of contributors want to build the implementation to popular backends, so this PR just opened without implementation for not blocking their works.

Thank you very much! I apologize for the pressure. We will work on improving our task assignments in the future.

I noticed that lots of contributors want to build the implementation to popular backends, so this PR just opened without implementation for not blocking their works.

Thank you very much! I apologize for the pressure. We will work on improving our task assignments in the future.

That's OK. I am REALLY pleased to see many active contributors in opendal community. ❤


Update ubuntu.md.erb

Fix path

Hey @eminetto, thanks for the contribution! So that line there is to copy the ubuntu upstart configuration, so it'll automatically boot up another agent on startup (and allows you to run sudo service buildkite-agent-2 start to start another agent on the same machine). You don't need to copy/paste the cfg file, because each agent can use the same configuration (unless there's something specifically you need to change) - does that make sense? :)

Ah, good catch @eminetto. Like Keith said, the instructions were correct but the wording was terrible. I've just updated the Ubuntu and Debian instructions in 2a2179f52f5f6a02c70387a7f0f3c327340dab3b and 438594cc214826949c824d8e2bb33f39236dc5ed to clarify! Sorry for the confusion.


Can't unregistered jdbc driver when application closed

I'm using Tomcat, and while stopping I get message : unregistered jdbc driver when application
I have close and shutdown the datasource

@rizagp This is a frequently asked Tomcat question.  I recommend searching stack overflow and reading the Tomcat FAQs.  There are several ways to fix it: moving the jdbc driver jar, configuring using the datasource rather than by URL or driver class name, etc.


query returning not up to date data about etext_quality

see link (from buda-base/public-digital-library#930)

Not sure why the images don't work anymore, but I think it's about the etext quality aggregates being returned for the whole collection and not just the search results:

duplicate of https://github.com/buda-base/public-digital-library/issues/953


Hit api

In this part of the project we implement the follwoing

Initialize API
GET data from the API
POST data to the API

thanks for the review @rloterh


[New chain]: HashKey Testnet 1.4.1

Summary
I would like to add HashKey Testnet 1.4.1 chain addresses
Chain ID
133
Chain detail URL
https://chainlist.org/chain/133
RPC URL
https://hashkeychain-testnet.alt.technology
Blockscout Client URL
https://hashkeychain-testnet-explorer.alt.technology/api/v1/graphql
Etherscan Client URL
No response
Etherscan Client API URL
No response
Version
1.4.1
Address (Master copy)
0x41675C099F32341bf84BFc5382aF534df5C7461a
Deployment Tx hash (Master copy)
0x7c2fb95f3286c83814b04ee35ca3913bfc49d77e9c9daaa0554a5e886f4315e1
Block explorer URL (Master copy)
https://hashkeychain-testnet-explorer.alt.technology/address/0x41675C099F32341bf84BFc5382aF534df5C7461a
Address (Master copy L2)
0x29fcB43b46531BcA003ddC8FCB67FFE91900C762
Deployment Tx hash (Master copy L2)
0x5028e9fbf1373532679f70442d7926e48314b1ba2e1498d2b23622201d9ae2b0
Block explorer URL (Master copy L2)
https://hashkeychain-testnet-explorer.alt.technology/address/0x29fcB43b46531BcA003ddC8FCB67FFE91900C762
Address (Proxy factory)
0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67
Deployment Tx hash (Proxy factory)
0x13c3dd69d925ccabe3acbb13282de54289aa6d9cf09c642e68738a3d29110f1a
Block explorer URL (Proxy factory)
https://hashkeychain-testnet-explorer.alt.technology/address/0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67

Hi @HashKeyCloud,
Please, Could you add the deployment in the safe-deployments-repo first? Thanks
It's necessary to have the chain addresses in the deployments repository before executing this issue.

Pending to merge https://github.com/safe-global/safe-deployments/pull/898

Pending to merge feat: add 1.4.1 canonical contracts for HashKey Chain Testnet safe-deployments#898

done.

/execute


Add Logstash tests

This request comes from a Java support case, where a developer was getting unexpected errors running Logstash, on Java 8 and the critical part was the platform: Power9 Linux PPCLE. The errors did not happen on Power8.
I don't know when AdoptOpenJDK will get Power9 hardware to test on, but maybe that doesn't matter. Perhaps any test material set up here can be reused by whatever project does get Power9 test hardware.
The errors below came from jruby (running Logstash). The LoadError happened once and the SyntaxError was reported at many points in the jruby script:
LoadError: library 'jruby' could not be loaded: java.lang.NullPointerException
SyntaxError: class/module name must be CONSTANT
Here are the details I could get, of the test set up that found
errors.

download the application from https://artifacts.elastic.co/downloads/logstash/logstash-5.4.2.tar.gz
extract the jruby application
export JAVA_HOME environment
create a simple configuration file named index.conf in the folder logstash-5.4.2 with below content

input {
beats {
port => "5045"
congestion_threshold => 60
}
}
filter {
}
output {
}

start the application with command line:

bin/logstash -f index.conf
then you will see the exception and programme terminated. [Only Power9 platform only].

Reference PMR 02048,001,866 from Zhan Wei Wang

Plan to address this issue:
thirdparty_containers/startup directory for a set of tests that just starts up applications (doesn't run a suite of tests), as a quick sniff.  These tests can/should be run on actual machines, vs in Docker containers if needed.

Closing this issue (now added to the list in #172).


Consider the option to show folders between files

Is your feature request related to a problem? Please describe.
This is possible e.g. in finder on macos so maybe you could consider this option? But I don't know if this is technically possible?
Describe the solution you'd like
Consider the option to show folders between files like in finder on macos. (So when sorting alphabetically or Date modified it get shown between files.
Describe alternatives you've considered
currently no other idea
Additional context
Here is a screenshot from finder from macos:

Thank you for opening this issue.

This can probably be added as a sort option, however there doesn't seem to be much support for adding this feature.

This can probably be added as a sort option, however there doesn't seem to be much support for adding this feature.

I see, would of course love this getting implemented nonetheless.

@szaimen I am going to be leaving this issue open. As the app gets more users, the needs of the users change and there might be more requests for this feature.

Closing this issue due to lack of interest.

The option to sort files together with folders is now available. You can download the latest version of Files from our website https://files.community/download


Does Seahorse support dictionaries?

Hi,
As the title says I want to know if Seahorse supports the dictionaries or if we should not use them?
Also, do you have a list of forbidden things that can be done in python but should not be used in Seahorse somewhere?

Dictionaries aren't supported yet! It's on the todo list, but hasn't received very high priority compared to other things (e.g. more support for Solana constructs, etc.). Do you have a specific need for them?
Also, the docs are mostly comprehensive in showing what is and isn't added.


locale support

support optionally defining locales other than en_US.UTF-8
if en_US.UTF-8 is the only locale present (default), maintain existing behavior

ansible has a locale-gen module


built in emojies?

some phones have a problem where  after selecting gboard for emojies once selected inside of 8vim gboard is put as default again would be nice to not need to change keyboards for that feature.
Before selecting emojies

when selected

after selection

Currently, 8Vim doesn't have a built-in emoji selection. This is doable but the current idea is to rely on the app emoji selection (most apps have one)
I have created a poll to see what people think about having one (#438)


JavaLanguageNamer missing JavaDoc

The interface is missing JavaDoc for each method. So we need to add those.


Enable require_code_owner_reviews: true via .asf.yaml

Pretty sure this goes on develop branch as it is our default. Otherwise, we'll need to cherry-pick to master to take effect.
Thank you for submitting a contribution to Apache Geode.
In order to streamline the review of the contribution we ask you
to ensure the following steps have been taken:
For all changes:

[ ] Is there a JIRA ticket associated with this PR? Is it referenced in the commit message?

[ ] Has your PR been rebased against the latest commit within the target branch (typically develop)?

[ ] Is your initial contribution a single, squashed commit?

[ ] Does gradlew build run cleanly?

[ ] Have you written or updated unit tests to verify your changes?

[ ] If adding new dependencies to the code, are these dependencies licensed in a way that is compatible for inclusion under ASF 2.0?

Note:
Please ensure that once the PR is submitted, check Concourse for build issues and
submit an update to your PR as soon as possible. If you need help, please send an
email to<EMAIL_ADDRESS>

cool, this will realize the final phase of the CODEOWNERS proposal by requiring one a code owner review.  all of the other settings match what was previously decided by the community (cool that ASF is making more thing self-service instead of requiring an INFRA ticket now)

cool, this will realize the final phase of the CODEOWNERS proposal by requiring one a code owner review.  all of the other settings match what was previously decided by the community (cool that ASF is making more thing self-service instead of requiring an INFRA ticket now)


Integrate and Manage CAPTCHA Validation for User Registration

Summary
This PR introduces a comprehensive CAPTCHA validation mechanism to enhance security during the user registration process. It incorporates the generation, validation, and cleanup of CAPTCHA responses to prevent automated systems from abusing our registration workflow.
Diagram of feature
sequenceDiagram
    participant User as "User"
    participant HTTP_server as "HTTP server"
    participant Mixins as "Mixins"
    participant Customer as "Customer"
    participant Utils as "Utils"
    participant DB as "Database"
    participant AuthBackend as "Auth Backend"
    participant Middleware as "Middleware"

    User->>HTTP_server: POST /en-gb/accounts/login/
    activate HTTP_server

    HTTP_server->>Mixins: register_user(form)
    activate Mixins

    Mixins->>Mixins: send_registration_email(user)
    activate Mixins

    Mixins->>Customer: send_registration_email_for_user(user, extra_context)
    activate Customer

    Customer->>Utils: get_messages(event_code, extra_context)
    activate Utils

    Utils-->Customer: messages
    deactivate Utils

    Customer->>Utils: dispatch_user_messages(user, messages)
    activate Utils

    Utils->>Utils: send_user_email_messages(messages)
    activate Utils

    Utils->>Utils: create_email(user, messages, email)
    activate Utils

    Utils->>DB: INSERT INTO communication_email
    deactivate Utils

    Utils-->Utils: Email instance
    deactivate Utils

    Utils-->Customer: email object
    deactivate Utils

    Customer-->Mixins: None
    deactivate Customer

    Mixins-->Mixins: None
    deactivate Mixins

    Mixins->>AuthBackend: _authenticate(credentials)
    activate AuthBackend

    AuthBackend->>AuthBackend: user_can_authenticate(user)
    activate AuthBackend

    AuthBackend-->Mixins: User (authenticated)
    deactivate AuthBackend

    Mixins-->HTTP_server: User
    deactivate Mixins

    HTTP_server->>Middleware: process_response(request, response)
    activate Middleware

    Middleware-->HTTP_server: HttpResponseRedirect
    deactivate Middleware

    HTTP_server-->User: 302 Redirect
    deactivate HTTP_server

Implementation Details

CAPTCHA Generation: Upon accessing the registration form, new CAPTCHA challenges are generated and stored in the database with a unique hashkey, challenge-response pair, and an expiration timestamp. See the queries that insert new CAPTCHA records for more details.
CAPTCHA Validation: During form submission, the user's CAPTCHA response is validated against the stored challenge-response pairs. This process involves selecting the relevant CAPTCHA entry based on the hashkey and comparing the provided response with the expected one.
Cleanup Process: CAPTCHA entries are regularly cleaned up to remove expired challenges, ensuring our database remains clutter-free and efficient. This prevents the build-up of unused CAPTCHA entries over time.

Key Code Snippets and Queries

CAPTCHA Generation Query:

Copy
INSERT INTO "captcha_captchastore" ("challenge", "response", "hashkey", "expiration")
VALUES ('AFKQ', 'afkq', '2cc01ac2f6ec6bc447b308a5453b03ed33ef78f4', '2024-02-05T19:13:07.844269+00:00'::timestamptz)

CAPTCHA Validation Query:

Copy
SELECT "captcha_captchastore"."id", "captcha_captchastore"."challenge",
"captcha_captchastore"."response", "captcha_captchastore"."hashkey", "captcha_captchastore"."expiration"
FROM "captcha_captchastore"
WHERE "captcha_captchastore"."hashkey" = 'PASSED' LIMIT 21

Cleanup Process Query:

Copy
DELETE FROM "captcha_captchastore" WHERE "captcha_captchastore"."expiration" <= '2024-02-05T19:08:07.860958+00:00'::timestamptz

Files Modified

views.py: Incorporation of CAPTCHA validation logic within the registration form validation process.
forms.py: Addition of CAPTCHA fields and validation methods to the user creation form.
Database query execution related to CAPTCHA handling is evident in the sequence diagrams and the provided SQL queries.

Test Cases

CAPTCHA Validation: Ensures CAPTCHA responses are accurately validated against stored challenges.
CAPTCHA Cleanup: Verifies expired CAPTCHA entries are appropriately deleted from the database.

Considerations
The implementation focuses on interoperability, maintainability, and security. Future enhancements may include adapting more sophisticated CAPTCHA mechanisms or exploring alternative validation strategies to improve user experience while maintaining security integrity.

Proposed Changes Status

Install the django-simple-captcha library: ✅

The library django-simple-captcha has been added to the requirements.txt file.

@@ -17,6 +17,7 @@ redis>=3.5,<5.1
 requests>=2.25,<3
 uWSGI>=2.0.19
 whitenoise>=5.2,<6.6
+django-simple-captcha==0.6.0

Update Django settings: ✅

The captcha app has been added to INSTALLED_APPS in settings.py.

@@ -250,6 +250,7 @@

 INSTALLED_APPS = [
+    'captcha',
     'django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',

Modify the registration form: ✅

The EmailUserCreationForm has been updated to include the CAPTCHA field.

@@ -18,6 +18,7 @@
 from oscar.core.loading import get_class, get_model, get_profile_class
 from oscar.core.utils import datetime_combine
 from oscar.forms import widgets
+from captcha.fields import CaptchaField

 CustomerDispatcher = get_class("customer.utils", "CustomerDispatcher")
 ProductAlert = get_model("customer", "ProductAlert")
@@ -106,6 +107,7 @@ class EmailUserCreationForm(forms.ModelForm):
     password1 = forms.CharField(label=_("Password"), widget=forms.PasswordInput)
     password2 = forms.CharField(label=_("Confirm password"), widget=forms.PasswordInput)
     redirect_url = forms.CharField(widget=forms.HiddenInput, required=False)
+    captcha = CaptchaField()

Update the user registration view: ✅

The test files show that the CAPTCHA field is being set and processed, which implies the registration view is handling the CAPTCHA field.

@@ -96,6 +97,16 @@ def test_receives_an_email_when_their_email_address_is_changed(self):
 class TestAnAnonymousUser(WebTestCase):
     is_anonymous = True

+    @classmethod
+    def setUpClass(cls):
+        super().setUpClass()
+        captcha_settings.CAPTCHA_TEST_MODE = True
+
+    @classmethod
+    def tearDownClass(cls):
+        super().tearDownClass()
+        captcha_settings.CAPTCHA_TEST_MODE = False
+
     def assertCanLogin(self, email, password):
         url = reverse("customer:login")
         form = self.app.get(url).forms["login_form"]
@@ -20,6 +30,8 @@ def test_allows_a_partner_user_to_be_created(self):
         form["email"] =<EMAIL_ADDRESS>         form["password1"] = "helloworld"
         form["password2"] = "helloworld"
+        form["captcha_0"] = "PASSED"
+        form["captcha_1"] = "PASSED"
         form.submit()

         self.assertEqual(1, partner.users.all().count())

Adjust templates to render CAPTCHA: ✅

The registration template has been updated to render the CAPTCHA field.

@@ -27,6 +27,11 @@
             {% csrf_token %}
             {% include "oscar/partials/form_fields.html"  %}
+            {{ form.captcha.label_tag }}
+            {{ form.captcha }}
+            {% if form.captcha.errors %}
+                {{ form.captcha.errors.as_text }}
+            {% endif %}
             <button name="registration_submit" type="submit" value="Register" class="btn btn-primary btn-lg" data-loading-text="{% trans 'Registering...' %}">{% trans 'Register' %}</button>
             {% if cancel_url %}
                 {% trans "or" %} {% trans "cancel" %}.

Summary

[X] Install the django-simple-captcha library
[X] Update Django settings
[X] Modify the registration form
[X] Update the user registration view
[X] Adjust templates to render CAPTCHA


[Storage] Change StorageSharedKeyCredential browser stub to class

This fixes #8499.
The issue was that in StorageClient.ts we have the following check
and assume that in browser scenario isNode would be false which
would short-circuit the evaluation of factory instanceof StorageSharedKeyCredential. So we added an undefined const for
browser stub of StorageSharedKeyCredential.
      if (
        (isNode && factory instanceof StorageSharedKeyCredential) ||
        factory instanceof AnonymousCredential ||
        isTokenCredential(factory)
      ) {
        this.credential = factory;
      }

However, in an Electron + Angular application, isNode is true but
browser files are used. So the condition after && is evaluated and
caused an error:
TypeError: Right-hand side of 'instanceof' is not an object
at DataLakeServiceClient.StorageClient (StorageClient.js:35)
at new DataLakeServiceClient (DataLakeServiceClient.js:39)

This fix changes the stub of StorageSharedKeyCredential to an empty
class instead so the condition will not throw but be evaluated to
false because this credential type is not supported in browser.

/run js - storage-blob - tests

/azp run js - storage-blob - tests


Use parquet metadata in /rows

Step 2 of https://github.com/huggingface/datasets-server/issues/1186

Codecov Report
Patch coverage has no change and project coverage change: -4.42 :warning:

Comparison is base (3cb7724) 90.14% compared to head (41c300f) 85.72%.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1214      +/-   ##
==========================================
- Coverage   90.14%   85.72%   -4.42%
==========================================
  Files         180       62     -118
  Lines        9994     1822    -8172
==========================================
- Hits         9009     1562    -7447
+ Misses        985      260     -725

Flag
Coverage Δ

jobs_cache_maintenance
99.08% <ø> (ø)

jobs_mongodb_migration
83.26% <ø> (-0.08%)
:arrow_down:

libs_libcommon
?

services_admin
86.83% <ø> (ø)

services_api
?

services_worker
?

Flags with carried forward coverage won't be shown. Click here to find out more.
see 120 files with indirect coverage changes

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.

The docs for this PR live here. All of your documentation changes will be reflected on that endpoint.

Excellent. As talked by chat: please enable the images and audio files only on a hardcoded list of datasets for now, in order to be able to test well on the real infrastructure.


Ability to pin sub-dependencies at a lower version?

I'm trying to use the following Maven Reference in a project with IKVM.Maven.Sdk version 1.1.1:-
<MavenReference Include="org.eclipse.jdt:org.eclipse.jdt.core:3.26.0"/>

While this correctly produces the dll for the main jar, the dependencies (org.eclipse.core.runtime etc) of this jar do not convert to .NET correctly as it appears they are compiled with a later version of java, so the resultant dlls do not have .net code in side of them.
I have attempted to "pin" a sub-dependency at a version that are compatible with java 8 by including a lower version as another maven reference:-
<MavenReference Include="org.eclipse.jdt:org.eclipse.jdt.core:3.26.0"/>
<MavenReference Include="org.eclipse.platform:org.eclipse.core.runtime:3.22.0"/>

however this results with a error
Error NullReferenceException: Object reference not set to an instance of an object.
   at IKVM.Maven.Sdk.Tasks.Aether.VersionConstraintJsonConverter.WriteJson(JsonWriter writer, Object value, JsonSerializer serializer) in D:\Work\ikvm-maven\src\IKVM.Maven.Sdk.Tasks\Aether\VersionConstraintJsonConverter.cs:line 52
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeConvertable(JsonWriter writer, JsonConverter converter, Object value, JsonContract contract, JsonContainerContract collectionContract, JsonProperty containerProperty)

... rest snipped for brevity

Is there any other way or a workaround for telling ikvm-maven to use a lower version of a sub-dependency?

Well, we do exactly what Maven does. So if there's a way to do this in Maven, it should be working for us as well.

The error received here should be resolved in 1.4. Due to a problem dealing with version ranged constraints.


Improve ES6 shorthanded object literal scope/color

I don't know if it's just me, but when I see this pattern it looks very weird. age is a variable, but it's also an object key. I think the key behavior in this case is "more important" and should be highlighted green too.

In the example above, green shorthanded object literals would be easier to differentiate an object from an array.
Looking at the scopes, normal keys are:

source.js.jsx
constant.other.object.key.js
string.unquoted.js

And shorthanded object literals are:

source.js.jsx
variable.other.readwrite.js

So thinking about scopes, these shorthanded terms aren't represented good enough.

Yes, sounds reasonable. I'll take a look but there may be an issue with destructuring syntax.

@daltones @Moeriki  it is syntax like....
var { foo, bar } = { foo: "lorem", bar: "ipsum" };
console.log(foo);
// "lorem"
console.log(bar);
// "ipsum"

That needs thinking about. I presume we should leave foo and bar as variables?

Yes, I think destructuring is perfect as it is. :+1:
Including nested destructuring:

Destructuring is fine.

As for object-property shorthands I changed my mind. Though it might be possible the class should be slightly updated. I prefer it to be highlighted as a regular variable.

Sorry I wasn't clear. Currently the destructuring and object literal regex grammar use the  same 'code' path. If I change object literal to be highlighted differently this would have to change. In the current code also have to make a distinction for how the flow type of an object literal is presented.
E.g let a: {foo: string} ={foo: 'i am a string'}
I think this proposed change would make things more difficult, although not impossible.

Okay, I didn't know the patterns work and I understand these limitations.
But a more specific scope for those literals would be a nice improvement, and then people could change the highlighting as they want. So maybe some time in the future… =)
Thanks!

In 2.37.0 I have scoped object literal shorthand properties with an additional css class id of shorthandpropertyname This allows the current themes to work unchanged but also allows users who prefer to add a scope to the styles.less file with any styling they require. I think this should be acceptable.

Thanks a lot! =)


[Service Bus] [Track 1] Update service-bus with the amqp-common latest

@azure/amqp-common library has been(not yet, waiting on https://github.com/Azure/azure-sdk-for-js/pull/7822 released now) updated to version 1.0.0-preview.11...

with an improvement that increases the default timeout for the requests sent to the service from 10s to 60s to avoid "$cbs" timeout.

This update is to take the changes from the latest @azure/amqp-common library to version 1.0.0-preview.11.
Fixes part of #7786

Build will only succeed after @azure/amqp-common version 1.0.0-preview.11 is released.

/azp run service-bus tests


Optimize point clouds

What
Some optimizations I found while playing around with large point clouds.
Checklist

[x] I have read and agree to Contributor Guide and the Code of Conduct
[x] I've included a screenshot or gif (if applicable)
[x] I have tested the web demo (if applicable):

Using newly built examples: app.rerun.io
Using examples from latest main build: app.rerun.io
Using full set of examples from nightly build: app.rerun.io

[x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG

PR Build Summary
Docs preview
Examples preview
Recent benchmark results
Wasm size tracking

Well, I have 16 cores, so color loading got around 16x faster :)


Connect Google Drive to OwnCloud as external storage documentation

From the OwnCloud side the documentatino for connecting shows https://doc.owncloud.com/server/10.8/admin_manual/configuration/files/external_storage/google.html#preparations-in-the-google-cloud-console
The documentation must be a bit outdated, as it doesn't exactly match the steps which need to be done
In the beginning, when creating a new application, these steps don't match exactly

Then when creating the APIs access for the application
1st step:
OwnCloud documentation:

Google Cloud

2nd step:
OwnCloud documentation:

Google drive

There rest of the steps is easier to figure out, it was the first time searching for where Google has placed the Google Drive APIs for the created application

if their docs have something which outdated or poorly documented and this is causing confusion this should be reported on their repo https://github.com/owncloud/docs, the deployer has nothing to do with this.
having said that, the link you shared gives 404, and from the URL I can see you are accessing the docs for the old version (10.8), maybe if you refer to the current version docs (10.10), info could be more updated.
see this for latest docs
https://doc.owncloud.com/server/10.10/admin_manual/configuration/files/external_storage/google.html


Regression in support of customized "role" in OpenAI compatible API (v.0.4.2)

Discussed in https://github.com/vllm-project/vllm/discussions/4745

Originally posted by tanliboy May 10, 2024
Hi vLLM team,
We have been using vLLM for serving models, and it went really well. We have been using the OpenAI compatible API along with our customized "role" for different entities. However, when we upgraded the version to v0.4.2 recently, we realized that the customized "role" is not supported and the role is only limited to "system", "user", and "assistant".
I understand that it is tightly aligned with OpenAI's chat completion role definition; however, it limits the customization of different roles along with fine-tuning. Moreover, we also saw a trend (including the recent Llama3 chat template) to support different roles for multi-agent interactions.
Can you upgrade to bring back the previous support of customized roles in OpenAI chat completion APIs?
Thanks,
Li

This is likely the result of #4355. Would this definition be sufficient for custom roles?
from openai.types.chat import (
    ChatCompletionMessageParam as OpenAIChatCompletionMessageParam,
    ChatCompletionContentPartParam as OpenAIChatCompletionContentPartParam)
class CustomChatCompletionContentPartParam(TypedDict, total=False):
    type: Required[str]
    """The type of the content part."""

ChatCompletionContentPartParam = Union[OpenAIChatCompletionContentPartParam,
                                       CustomChatCompletionContentPartParam]

class CustomChatCompletionMessageParam(TypedDict, total=False):
    """Enables custom roles in the Chat Completion API."""
    role: Required[str]
    """The role of the message's author."""

    content: Union[str, List[ChatCompletionContentPartParam]]
    """The contents of the message."""

    name: str
    """An optional name for the participant.

    Provides the model information to differentiate between participants of the
    same role.
    """

Thank you for the PR @DarkLight1337. Was wondering why my data pipeline stopped working when I just upgraded vLLM.

hello

Thank you, @simon-mo, @DarkLight1337 and @Tostino !
Is the PR ready to merge and incorporate into the upcoming release?

Merged.


Request for new features adding (Account status and Posting Count)

This is an idea of user requests for the app ,to add Account Status and Posting Count features.
Why Account Status feature?
Because this feature will help users to see:

Calculated: total steem and the amount of effective steem power.
Witnesses Voted Count: indicates the amount and name of the witness account.
Reputation: shows the reputation of the account in detail.
Proxy: shows the amount and name of the account you are proxying.
Proxied: this will indicate the amount of steem you are proxied.

Posting Count feature
My idea is that this is a feature to see the total number of your posts from the first you start using steemit. Here you can also see the payment of your posts in the past.
You can be seeing an example of an image that I have edited
I suggest adding these features in the settings, so when you open the settings you will see these features

This is a example image when you open the Account Status feature

Also, example images when you open Posting Count feature

This is a feature to see the total number of posts you have from your first using steemit platform. You can also see the amount paid for all posts. You just need to set the date above the chart to go to your old post.
Its just an example, you can be design it as you like later :)

Hi @shaphir,
Total steem and the effective steem power feature added in new version. I'm adding this suggestions to our workflow.
Thank you for your suggestions :)

Thanks for adding my suggestion to your workflow.
I believe this feature will be useful in the app :)


How can I get speed of the car from the data

Is there an easy way to get odometry data? More specifically to get linear velocity? I see there is linear acceleration, but not velocity. I am not familiar on how to calculate the linear velocity and before figuring out the calculations was wondering if it was already done or available in some other form.
This question is in reference to the Toolkit.

In a newer build, we now expose speed of the vehicle (and some more useful information) via the API. Please check out this release.


Add warning if fastlane is executed without bundle exec

This PR also updates the links to our new docs
Related https://github.com/fastlane/fastlane/issues/9748
Related https://twitter.com/orta/status/885543142405140480

Is there something we could do in a Fastfile to say that bundle exec needs to be used when executing? Otherwise, if i understand this PR correctly, this change will get in the way of people using packaged-fastlane, or people that just don't want to have a Gemfile, right?

We've shown the warning for a while when fastlane is slow starting up, except when it's a bundled fastlane (homebrew, mac app). We encourage people to use a Gemfile. This PR will change the behavior that it will warn people that don't use bundle exec, even though they have a Gemfile, to use bundle exec.

Ah! Got it!


BlockingIdentifierGenerator is broken

See https://github.com/quarkusio/quarkus/issues/16255.

@gavinking are you going to work on this or should I do it?

Yes, I'm on it.

Thanks


A few questions about dexie-import-export

I am using dexie-import-export to export and import some data and seeing some strangeness so seeking some clarity.
Does Dexie add more rows for metadata proposes than what is in the source database when exporting? Are those rows also written to the database when importing? If yes, is there a way to not write those rows? I just want to be able to clean transfer the source database exactly as-is but the size of imported database is significantly larger than the source one and apparently contains more rows too.
Perhaps related question: does Dexie add an index by default when opening a database? I believe it doesn't but I am wondering if it does and if it exports that information such that importing loads it too. A user of my code ran into DataError: Failed to read large IndexedDB value when trying to export a database and this stackoverflow answer makes me wonder if indexing has got anything to do with that, and if so, perhaps it is contributing to the extra crud: https://stackoverflow.com/questions/76686618/dexie-js-very-large-indexeddb-but-empty-tables
FWIW, I use very simple, straight-off-the-shelf code to export and to import
Any and all thoughts appreciated 🙏

dexie-export-import does not add any extra rows. It does not add any indexes either.

Thanks!


Ship selection toggle - changes selected loadout

Create game and join team.
Launch game and goto ship loadout screen.
Change ship (scout) loadout to other than default loadout and click "confirm change" button.
Toggle selected ship view to another ship (such as interceptor).
Toggle back to previous ship (scout) and note that the ship loadout is not what you previously confirmed.

Imported from trac ticket #158,  created by Big_Beta_Tester on 07-20-2010 at 23:58, last modified: 08-11-2010 at 20:39

r805
Trac comment by Imago on 07-25-2010 at 12:59

Confirm change should automatically save to loadout #0, this would fix the issue nicley
Trac comment by Imago on 07-25-2010 at 05:22


Feature/rm refactor awsrequest creation

Motivation
This reduces the impact of https://github.com/swift-aws/aws-sdk-swift-core/pull/276
Changes

Creation of AWSRequest is now moved into an extension on AWSRequest
This essentially impacts 2 overloaded methods on AWSClient (createAWSRequest) that were previously used to create those AWSRequests
A lot of tests are impacted by this change. Most of the time we now don't need to create a client anymore and can directly use the config
Moved the verifyStream method into an extension of AWSRequest and made it static
Using XCSkipUnless to conditionally skip a test to clearly differentiate between succeeding and skipped tests.
For now I left the new extensions on AWSRequest inside the AWSClient file to make reading this PR easier. Same goes for the testing methods as a lot of them might now be better suited for a AWSRequestTests class.

Discussion

In the previously used createAWSRequest methods, the AWSClient added its middleware by calling request.applyMiddleware(self.serviceConfig.middlewares + self.middlewares). Adding the middlewares now needs to be done manually every time we create an AWSRequest in the AWSClient. Is this ok? If so, do we need to apply those middlewares in the tests (where this logic was previously implicitly included)? From my point of view it's not needed but I possibly know too little to about the project to have a strong opnion on that ...
The test testCreateNIORequest previously checked if a header with name "x-amz-target" exists. If so, it would assert its value. From my understanding, this request will never contain a header with that name, because the previously used client used a config with amzTarget set to null (just checked with master: the assertion is indeed ignored because the header does not exist). So I removed this check. Is that ok?

* Using `XCSkipUnless` to conditionally skip a test to clearly differentiate between succeeding and skipped tests.

XCSkipUnless is unavailable in swift 5.1 so you will have to remove these

* For now I left the new extensions on `AWSRequest` inside the `AWSClient` file to make reading this PR easier. Same goes for the testing methods as a lot of them might now be better suited for a `AWSRequestTests` class.

I'm quite happy for you to move this out to AWSRequest.swift and create a new AWSRequestTests.swift for the tests

* In the previously used `createAWSRequest` methods, the `AWSClient` added its middleware by calling `request.applyMiddleware(self.serviceConfig.middlewares + self.middlewares)`. Adding the middlewares now needs to be done manually every time we create an `AWSRequest` in the `AWSClient`. Is this ok? If so, do we need to apply those middlewares in the tests (where this logic was previously implicitly included)? From my point of view it's not needed but I possibly know too little to about the project to have a strong opnion on that ...

Yes it is ok that middleware is applied outside of the init(). For the tests you don't need to apply middleware if you aren't testing it. Apart from the logging middleware all middleware is service specific.

* The test `testCreateNIORequest` previously checked if a header with name "x-amz-target" exists. If so, it would assert its value. From my understanding, this request will never contain a header with that name, because the previously used client used a config with `amzTarget` set to `null` (just checked with master: the assertion is indeed ignored because the header does not exist). So I removed this check. Is that ok?

Ugh that wasn't a great test. Maybe we should add an additional test to verify the x-amz-target is getting through to the request. Create a ServiceConfig with amzTarget set and verify the x-amz-target header is set with this value.

This is now merged in. Thanks @Ro-M


[do not merge] Prototype: show services under ‘Carer’s Allowance’ in search

I think this PR was part of the firebreak (https://trello.com/c/SPtkGVrd). Feel free to reopen.


The C2L server has a problem with reboot in ssh

When I have reboot my server , in the first time my server had ping, but my ssh has being refused . after this problem I had to have started server on Scalway's dashboard. in the second time I sent sudo reboot to the terminal my server not could not start . therfore I tried to start server in my dashboard becuse showed me time out of pings .

my server distribution is debian stretch (GNU/Linux 4.9.20-std-1 x86_64 ) and my plan is C2L BareMetal.

What do you think my problem is?

Still bugging on 4.4
My steps:
create new BareMetal server C2M Debian 9 (Stretch)
change the bootscript to x86_64 mainline 4.4.122 rev1
login via ssh start reboot
fail to boot

Odd. Updated bootscript to x86_64 mainline 4.4.122 rev1 and Debian Stretch reboots without issues.


metrics: Submit metrics when exiting.  Refactor MetricsAgent::run().

There are a few minor issues this change addresses:

When we send points to the MetricsWriter we are calling Instant::now() twice, using the first result in the metrics stats, and using the seconds value for last_write_time.  Yet, on the next upload, we would use last_write_time as a reference point.
We upload metrics using a network call, so it is far from instantaneous.  This creates a minor discrepancy in our time reporting.
Good news is that we do not really need to call Instant::now() twice at all, as we can use the same value for both stats and last_write_time.

We did not report metrics stats if we did not have any points accumulated.  It seems better to always report metric stats, including when no points have been accumulated.  In practice, this does not happen for the validator, as validators always report something during a 10-second accumulation interval.

We did not upload any points when the metrics thread was existing. This may cause a short number of metrics not to be reported.

collect_points() was always converting both points and counters into a vector of DataPoint, even if the final length was over the specified max_points.  In the mainnet-beta we have values of up to 5m points lost, so it could be a small optimization if we drop them sooner.

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

Project coverage is 81.9%. Comparing base (8e0a55f) to head (1b7baf4).
Report is 27 commits behind head on master.

Additional details and impacted files
@@           Coverage Diff           @@
##           master     #718   +/-   ##
=======================================
  Coverage    81.8%    81.9%
=======================================
  Files         851      851
  Lines      230453   230452    -1
=======================================
+ Hits       188726   188743   +17
+ Misses      41727    41709   -18


[Preprocessing] Split the Load preprocessing stage into two parts: LoadFile and LoadDir

We need to split the logic of loading into two parts. Now it's mixed and could be wrongly interpreted.

Probably should be a part of the Dataset API

Now this logic is moved to the Dataset creation


Fix IPv6 routing for Docker-based deployments

IPv6 routing is disabled by default on Docker. To have IPv6 work in Firezone
the same way IPv4 currently does (and IPv6 on Omnibus), four things are
generally required:

First, ensure your Docker host has IPv6 correctly set up with a quick
ping test:

> ping6 -c 4 google.com

PING google.com(sfo03s32-in-x0e.1e100.net (2607:f8b0:4005:814::200e)) 56 data bytes
64 bytes from sfo03s32-in-x0e.1e100.net (2607:f8b0:4005:814::200e): icmp_seq=1 ttl=51 time=1.96 ms
64 bytes from sfo03s32-in-x0e.1e100.net (2607:f8b0:4005:814::200e): icmp_seq=2 ttl=51 time=1.94 ms
64 bytes from sfo03s32-in-x0e.1e100.net (2607:f8b0:4005:814::200e): icmp_seq=3 ttl=51 time=1.92 ms
64 bytes from sfo03s32-in-x0e.1e100.net (2607:f8b0:4005:814::200e): icmp_seq=4 ttl=51 time=1.90 ms

Add an IPv6 address, subnet, and enable_ipv6: true to the Docker
compose. Note: Various Googling around the interwebs will uncover
the myth that enable_ipv6 is not supported on Docker Compose file
versions 3+ -- this seems to be incorrect. Leaving out enable_ipv6: true
prevented Docker from automatically assigning IPv6 addresses for
containers attaching to that network.
Add the following to /etc/docker/daemon.json:

{
  "ipv6": true,
  "ip6tables": true,
  "experimental": true,
  "fixed-cidr-v6": "fd00:dead:beef::/80"
}

The above causes Docker to automatically add ip6tables rules to
set up IPv6 NAT/Masquerade for containers. However, this breaks DHCPv6
Router Advertisements, so you'll need to re-enable them for your
default interface with:

egress=`ip route show default <IP_ADDRESS>/0 | grep -oP '(?<=dev ).*' | cut -f1 -d' ' | tr -d '\n'`
sudo bash -c "echo net.ipv6.conf.${egress}.accept_ra=2 >> /etc/sysctl.conf"

Fixes #1202

Pull Request Test Coverage Report for Build 98db9acc422eea79d29b51451e7ebf387d263288-PR-1204

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

Totals

Change from base Build eab4a3c13e555980fd2ead2315138efc2449212b:
0.0%

Covered Lines:
1199

Relevant Lines:
1808

💛  - Coveralls

Not working for me. But ping from busybox working.
docker run --rm -t busybox ping6 -c 4 google.com
PING google.com (2a00:1450:4007:807::200e): 56 data bytes
64 bytes from 2a00:1450:4007:807::200e: seq=0 ttl=114 time=5.105 ms
64 bytes from 2a00:1450:4007:807::200e: seq=1 ttl=114 time=5.134 ms
64 bytes from 2a00:1450:4007:807::200e: seq=2 ttl=114 time=5.095 ms
64 bytes from 2a00:1450:4007:807::200e: seq=3 ttl=114 time=5.220 ms

Not working for me. But ping from busybox working.
docker run --rm -t busybox ping6 -c 4 google.com
PING google.com (2a00:1450:4007:807::200e): 56 data bytes
64 bytes from 2a00:1450:4007:807::200e: seq=0 ttl=114 time=5.105 ms
64 bytes from 2a00:1450:4007:807::200e: seq=1 ttl=114 time=5.134 ms
64 bytes from 2a00:1450:4007:807::200e: seq=2 ttl=114 time=5.095 ms
64 bytes from 2a00:1450:4007:807::200e: seq=3 ttl=114 time=5.220 ms

Hmm. docker compose down and docker compose up -d? Does docker compose exec -it firezone ping6 google.com work?

Yep, ping6 working on firezone :
docker-compose exec -it firezone ping6 google.com
PING google.com (2a00:1450:4007:813::200e): 56 data bytes
64 bytes from 2a00:1450:4007:813::200e: seq=0 ttl=114 time=4.979 ms
64 bytes from 2a00:1450:4007:813::200e: seq=1 ttl=114 time=4.958 ms
64 bytes from 2a00:1450:4007:813::200e: seq=2 ttl=114 time=4.975 ms
64 bytes from 2a00:1450:4007:813::200e: seq=3 ttl=114 time=4.951 ms
64 bytes from 2a00:1450:4007:813::200e: seq=4 ttl=114 time=4.950 ms
64 bytes from 2a00:1450:4007:813::200e: seq=5 ttl=114 time=5.020 ms
64 bytes from 2a00:1450:4007:813::200e: seq=6 ttl=114 time=4.966 ms
^C
--- google.com ping statistics ---
7 packets transmitted, 7 packets received, 0% packet loss
round-trip min/avg/max = 4.950/4.971/5.020 ms

Docker-compose.yml :
x-deploy: &default-deploy
  restart_policy:
    condition: unless-stopped
    delay: 5s
    window: 120s
  update_config:
    order: start-first

version: '3.7'

services:
  caddy:
    image: caddy:2
    volumes:
      - ${FZ_INSTALL_DIR:-.}/caddy:/data/caddy
    # See Caddy's documentation for customizing this line
    # https://caddyserver.com/docs/quick-starts/reverse-proxy
    command:
      - /bin/sh
      - -c
      - |
        cat <<EOF > /etc/caddy/Caddyfile && caddy run --config /etc/caddy/Caddyfile

        https:// {
          log
          reverse_proxy * <IP_ADDRESS>:13000
          ${TLS_OPTS:-}
        }
        EOF
    network_mode: "host"
    deploy:
      <<: *default-deploy

  firezone:
    image: firezone/firezone
    ports:
      - 51820:51820/udp
    env_file:
      # This should contain a list of env vars for configuring Firezone.
      # See https://docs.firezone.dev/reference/env-vars for more info.
      - ${FZ_INSTALL_DIR:-.}/.env
    volumes:
      # IMPORTANT: Persists WireGuard private key and other data. If
      # /var/firezone/private_key exists when Firezone starts, it is
      # used as the WireGuard private. Otherwise, one is generated.
      - ${FZ_INSTALL_DIR:-.}/firezone:/var/firezone
         cap_add:
      # Needed for WireGuard and firewall support.
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      # Needed for masquerading and NAT.
      - net.ipv6.conf.all.disable_ipv6=0
      - net.ipv4.ip_forward=1
      - net.ipv6.conf.all.forwarding=1
    depends_on:
      - postgres
    networks:
      firezone-network:
        ipv4_address: <IP_ADDRESS>
        ipv6_address: 2001:3990:3990::99
    deploy:
      <<: *default-deploy

  postgres:
    image: postgres:15
    volumes:
      - postgres-data:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: ${DATABASE_NAME:-firezone}
      POSTGRES_USER: ${DATABASE_USER:-postgres}
      POSTGRES_PASSWORD: ${DATABASE_PASSWORD:?err}
    networks:
      - firezone-network
    deploy:
      <<: *default-deploy
      update_config:
        order: stop-first

# Postgres needs a named volume to prevent perms issues on non-linux platforms
volumes:
  postgres-data:

networks:
  firezone-network:
    enable_ipv6: true
    driver: bridge
    ipam:
      config:
        - subnet: <IP_ADDRESS>/16
        - subnet: 2001:3990:3990::/64
          gateway: 2001:3990:3990::1

nft list ruleset :
table inet filter {
        chain input {
                type filter hook input priority filter; policy accept;
        }

        chain forward {
                type filter hook forward priority filter; policy accept;
        }

        chain output {
                type filter hook output priority filter; policy accept;
        }
}
table ip nat {
        chain DOCKER {
                iifname "br-ef1ea60e149d" counter packets 0 bytes 0 return
                iifname "docker0" counter packets 0 bytes 0 return
                iifname != "br-ef1ea60e149d" meta l4proto udp udp dport 51820 counter packets 24 bytes 3540 dnat to <IP_ADDRESS>:51820
        }

        chain POSTROUTING {
                type nat hook postrouting priority srcnat; policy accept;
                oifname != "br-ef1ea60e149d" ip saddr <IP_ADDRESS>/16 counter packets 35 bytes 5542 masquerade
                oifname != "docker0" ip saddr <IP_ADDRESS>/16 counter packets 3 bytes 168 masquerade
                meta l4proto udp ip saddr <IP_ADDRESS> ip daddr <IP_ADDRESS> udp dport 51820 counter packets 0 bytes 0 masquerade
        }

        chain PREROUTING {
                type nat hook prerouting priority dstnat; policy accept;
                fib daddr type local counter packets 1739 bytes 84610 jump DOCKER
        }

        chain OUTPUT {
                type nat hook output priority -100; policy accept;
                ip daddr != <IP_ADDRESS>/8 fib daddr type local counter packets 0 bytes 0 jump DOCKER
        }
}
table ip filter {
        chain DOCKER {
                iifname != "br-ef1ea60e149d" oifname "br-ef1ea60e149d" meta l4proto udp ip daddr <IP_ADDRESS> udp dport 51820 counter packets 33 bytes 5536 accept
        }

        chain DOCKER-ISOLATION-STAGE-1 {
                iifname "br-ef1ea60e149d" oifname != "br-ef1ea60e149d" counter packets 1155 bytes 379586 jump DOCKER-ISOLATION-STAGE-2
                iifname "docker0" oifname != "docker0" counter packets 3 bytes 168 jump DOCKER-ISOLATION-STAGE-2
                counter packets 43443 bytes 4306638 return
        }

        chain DOCKER-ISOLATION-STAGE-2 {
                oifname "br-ef1ea60e149d" counter packets 0 bytes 0 drop
                oifname "docker0" counter packets 0 bytes 0 drop
                counter packets 2023 bytes 740985 return
        }

        chain FORWARD {
                type filter hook forward priority filter; policy accept;
                counter packets 35795 bytes 3064769 jump DOCKER-USER
                counter packets 35795 bytes 3064769 jump DOCKER-ISOLATION-STAGE-1
                oifname "br-ef1ea60e149d" ct state related,established counter packets 34588 bytes 2678447 accept
                oifname "br-ef1ea60e149d" counter packets 46 bytes 6316 jump DOCKER
                iifname "br-ef1ea60e149d" oifname != "br-ef1ea60e149d" counter packets 1155 bytes 379586 accept
                iifname "br-ef1ea60e149d" oifname "br-ef1ea60e149d" counter packets 13 bytes 780 accept
                oifname "docker0" ct state related,established counter packets 3 bytes 252 accept
                oifname "docker0" counter packets 0 bytes 0 jump DOCKER
                iifname "docker0" oifname != "docker0" counter packets 3 bytes 168 accept
                iifname "docker0" oifname "docker0" counter packets 0 bytes 0 accept
        }

        chain DOCKER-USER {
                counter packets 43443 bytes 4306638 return
        }
}
table ip6 nat {
        chain DOCKER {
                iifname "br-ef1ea60e149d" counter packets 0 bytes 0 return
                iifname "docker0" counter packets 0 bytes 0 return
                iifname != "br-ef1ea60e149d" meta l4proto udp udp dport 51820 counter packets 0 bytes 0 dnat to [2001:3990:3990::99]:51820
        }

        chain POSTROUTING {
                type nat hook postrouting priority srcnat; policy accept;
                oifname != "br-ef1ea60e149d" ip6 saddr 2001:3990:3990::/64 counter packets 63 bytes 5604 masquerade
                oifname != "docker0" ip6 saddr fd00:dead:beef::/80 counter packets 3 bytes 312 masquerade
                meta l4proto udp ip6 saddr 2001:3990:3990::99 ip6 daddr 2001:3990:3990::99 udp dport 51820 counter packets 0 bytes 0 masquerade
        }

        chain PREROUTING {
                type nat hook prerouting priority dstnat; policy accept;
                fib daddr type local counter packets 2 bytes 128 jump DOCKER
        }

        chain OUTPUT {
                type nat hook output priority -100; policy accept;
                ip6 daddr != ::1 fib daddr type local counter packets 0 bytes 0 jump DOCKER
        }
}
table ip6 filter {
        chain DOCKER {
                iifname != "br-ef1ea60e149d" oifname "br-ef1ea60e149d" meta l4proto udp ip6 daddr 2001:3990:3990::99 udp dport 51820 counter packets 0 bytes 0 accept
        }

        chain DOCKER-ISOLATION-STAGE-1 {
                iifname "br-ef1ea60e149d" oifname != "br-ef1ea60e149d" counter packets 212 bytes 28522 jump DOCKER-ISOLATION-STAGE-2
                iifname "docker0" oifname != "docker0" counter packets 12 bytes 1248 jump DOCKER-ISOLATION-STAGE-2
                counter packets 432 bytes 93010 return
        }

        chain DOCKER-ISOLATION-STAGE-2 {
                oifname "br-ef1ea60e149d" counter packets 0 bytes 0 drop
                oifname "docker0" counter packets 0 bytes 0 drop
                counter packets 224 bytes 29770 return
        }

        chain FORWARD {
                type filter hook forward priority filter; policy drop;
                counter packets 425 bytes 92282 jump DOCKER-ISOLATION-STAGE-1
                oifname "br-ef1ea60e149d" ct state related,established counter packets 168 bytes 59520 accept
                oifname "br-ef1ea60e149d" counter packets 21 bytes 1744 jump DOCKER
                iifname "br-ef1ea60e149d" oifname != "br-ef1ea60e149d" counter packets 212 bytes 28522 accept
                iifname "br-ef1ea60e149d" oifname "br-ef1ea60e149d" counter packets 21 bytes 1744 accept
                oifname "docker0" ct state related,established counter packets 12 bytes 1248 accept
                oifname "docker0" counter packets 0 bytes 0 jump DOCKER
                iifname "docker0" oifname != "docker0" counter packets 12 bytes 1248 accept
                iifname "docker0" oifname "docker0" counter packets 0 bytes 0 accept
        }
}

Yep, ping6 working on firezone :
docker-compose exec -it firezone ping6 google.com
PING google.com (2a00:1450:4007:813::200e): 56 data bytes
64 bytes from 2a00:1450:4007:813::200e: seq=0 ttl=114 time=4.979 ms
64 bytes from 2a00:1450:4007:813::200e: seq=1 ttl=114 time=4.958 ms
64 bytes from 2a00:1450:4007:813::200e: seq=2 ttl=114 time=4.975 ms
64 bytes from 2a00:1450:4007:813::200e: seq=3 ttl=114 time=4.951 ms
64 bytes from 2a00:1450:4007:813::200e: seq=4 ttl=114 time=4.950 ms
64 bytes from 2a00:1450:4007:813::200e: seq=5 ttl=114 time=5.020 ms
64 bytes from 2a00:1450:4007:813::200e: seq=6 ttl=114 time=4.966 ms
^C
--- google.com ping statistics ---
7 packets transmitted, 7 packets received, 0% packet loss
round-trip min/avg/max = 4.950/4.971/5.020 ms

Hmm if the firezone container has outbound IPv6 connectivity, tunneled clients should be able to Masquerade out over IPv6. It's working on my end -- WireGuard clients are able to ping6 google.com with the tunnel established.
It must be a NAT / Masquerade issue if you're not seeing the same. Have you tried removing any custom nftables or iptables rules that may be affecting this?
Is this on a fresh Debian 11 install? I can try to replicate it.

Yes it's a frech install on a Baremetal with Proxmox. I just tested also on a vps on DigitalOcean (auto script) with your modifications.
With the new version of docker compose, the ping6 in internet to docker does not work.

@jamilbk
Sorry, I reinstalled everything and it works.
Tested on a LCX debian 11 (Promox) and at DigitalOcean (debian 11).
Nice work and speed!


remove unnecessary uses of std.format

in order to reduce dependencies and bloat. Reduces size of "hello world" by 4K.
Requires https://github.com/D-Programming-Language/druntime/pull/1309

I agree with the replacing of std.format with straight concatenation for CT strings, that's a no-brainer. But I think the implementation detail of using std.format vs. some other internal library to convert integers to text is just rubble bouncing, no? 4k saved doesn't seem like a lot when we have things that add 900k in one go.
I also would like to voice my opposition to constantly micro-optimizing the hello world code size. I think it rather says something unsavory that we had to invent our own internal not-for-public-consumption functions to avoid the bloat our touted phobos expressive features, such as format or to add. Aren't we focusing on the wrong problem here?

4K doesn't seem like much, but it is 2%. It doesn't take a whole lot of those to add up.
it's only a handful of lines of code - not going to cause anyone angst
the library function already exists
using format is like using a cannon to shoot a squirrel

And the largest reason:

it substantially reduces the mutual dependence of all of Phobos modules importing each other. This has a large cognitive cost in terms of trying to isolate bugs, and trying to figure out why seemingly purposeless code is included in D binaries. std.utf is a low level module, and it just should not be depending on high level code like format.

I'm on the fence about this one. While I'm not a fan of replacing calls to format, it may well be a necessary stop-gap for the time being.
The real problem is that the current implementation of format is lacking. It automatically pulls in all manner of Phobos modules just on the off-chance that the format string might specify something that needs one of them. This is currently unavoidable because the format string is passed as a runtime string, even though almost all of the real-life use cases actually can be resolved at compile-time. The idea of a format that takes a compile-time format string has been discussed before, and is something I would like to try to implement when I get some free time. Such an implementation would allow format to take advantage of D's compile-time features to only import those modules that are actually required by the format string, and nothing else. Then we wouldn't need PR's like this one at all -- format would not have undue dependencies all over Phobos and could be used in many more places with little or no penalty.

P.S. https://issues.dlang.org/show_bug.cgi?id=13568

@quickfur while I agree with the sentiment and the goal, that is a long term goal, and will require a lot of work on a lot of fronts. In the meantime, Phobos has to be made as useful as possible, and that means we must deal with what we have at the moment. I.e. Phobos shouldn't be held hostage by what it ought to be, especially since these changes are entirely under the hood and do not affect user code.
It's much like using inline assembler. We can wait interminably for compiler technology to get better so it is unnecessary, and meanwhile suffer, or simply write the naughty bits in asm and get on with things.
Even if std.format does become the shining city on the hill, there's still the cognitive issue of imports being cyclic rather than acyclic.

Well yes, that's why I said this PR is probably a necessary stop-gap for the time being. :-)
And yes, cyclic imports are problematic. This isn't the first time it is an issue; a while back I remember seeing a bug encountered by somebody, that was almost impossible to trace because it involved a cyclic import triggering an obscure compiler bug (or quirk) that vanished as soon as you try to reduce the code. One of the main ideas behind the compile-time format string was to isolate the imports into specifier-dependent bits (possible thanks to scoped imports), so that the majority of use cases will not actually have any cyclic imports.

4K doesn't seem like much, but it is 2%. It doesn't take a whole lot of those to add up.

4K forward and 900K back? Doesn't seem like we're making progress.

it's only a handful of lines of code - not going to cause anyone angst

Bouncing the rubble was your angst.

the library function already exists

Fair enough, but the appearance of special hidden "performance for me, not for thee" functions smells to outside users. What we're saying here is "don't use format, it's bloaty"

using format is like using a cannon to shoot a squirrel

It doesn't have to be. I think @quickfur makes a strong case for fixing format and possibly reducing all program code sizes instead of special case hello world instances. My point was simply that this focusing on covering up the symptoms doesn't seem to be a good long-term plan. Given how the size of hello world bounces around, it's not even a good short-term plan.

it substantially reduces the mutual dependence of all of Phobos modules importing each other.

I fully support this goal. I think we have to do a lot more of unraveling all the cross-imports, and factoring out the low-dependency bits into their own package modules.
I'll say, the PR looks fine to merge, it's not really creating any issues or solving any. It just seems inconsistent with the recent push for avoiding rubble bounce.
The crazy-long import cycle on the last failure for Win32 was troubling (I haven't seen it get through Windows testing again, so I'm not sure if that was a weird fluke). Likely we have to do something to address https://issues.dlang.org/show_bug.cgi?id=14517 sooner rather than later.

I removed the changes to std.datetime, it seemed to cause circular static construction failures.

It's a little baffling to see a cyclic import failure, and none of the imports in the cycle are std.random or std.utf, the ones modified by this PR.

Please see the referenced bug. It's an issue that is going to continue to bite us if we don't fix it. This is the third PR I've seen that was affected by a mystery cycle (when changes didn't seem to introduce or remove any static ctors, or the modules listed in the cycle had nothing to do with the changes being made). I'm not 100% sure this was the cause, but it does smell like it.
I meant to discuss with Martin at dconf, but he wasn't able to go. You have any ideas on how to fix? For now, we can search for templated static ctors and factor them out in hopes they fix the issue. Please don't discard the changes you made, so we can test again!

Improving documentation on circular import failures: https://github.com/D-Programming-Language/druntime/pull/1314

Well this diff is good, aside from the other matters it touches upon. I'll pull.


Implement Teradata connector for Ingestion

Is your feature request related to a problem? Please describe.
Currently there is no support for Teradata but having recently moved to SQLFluff as a parser for SQLLineage(which supports Teradata), I think supporting Teradata would make sense. Teradata does currently not have any out of the box lineage tools available and requires manual development, OMD would solve a large gap in the Teradata community.
Describe the solution you'd like
Support a Teradata connector
Describe alternatives you've considered

Using the OpenMetadata Ingestion API to manually push Teradata tables/columns and lineage into OpenMetadata.

duplicate of #1077


blacklisting unicode range

I want to make two font files - one a small file with only the basic English language glyphs. The other file I want to contain everything else in the font, but I'm not sure of which unicode ranges I would need for that. Is it possible to use a blacklist unicode range so generate a font that has everything except what is specified in the range?

looks like a duplicate of https://github.com/fonttools/fonttools/issues/1153


Add support for tracking events in a Share Extension (close #700)

This PR just wraps the contribution from @onato in an issue PR scheduled for release.

Thanks for your pull request. Is this your first contribution to a Snowplow open source project? Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).
:memo: Please visit https://docs.snowplowanalytics.com/docs/contributing/contributor-license-agreement/ to learn more and sign.
Once you've signed, please reply here (e.g. I signed it!) and we'll verify. Thanks.


Use a poco type for verify ClosedServicesPreferredOverOpenGenericServices

Fixes #406

cc @Eilon \ @seesharper

:shipit:

:shipit:

Good stuff :shipit:

:shipit:

Although this fixes the ClosedServicesPreferredOverOpenGenericServices test, it does not however fix the underlying problem with incomplete graphs being injected into properties. In my opinion there is no reason to close #406 just yet.


TextEditor.scrollToBottom is deprecated.

This is now a view method. Call TextEditorElement::scrollToTop instead.
TextEditor.scrollToBottom (<embedded>:5427:18)
<unknown> (C:\Users\campb\.atom\packages\language-arma-atom\lib\open-latest-rpt-file.coffee:32:17)

I am a bit confused by this, it is used as a view method, and calling scrollToTop() is the opposite of what we want.

This has been fixed in the latest version. https://github.com/acemod/language-arma-atom/commit/a6422c59bceae77e4bd5664da3d503eab4d75699