Provide a way to override project properties without forking

Given that Rx may (and actually is) used in scenarios where multiple components may have been built and tested against different versions of Rx, and given that AppDomain/Process level isolation is not always an option (i.e. VS extensions). See #97 and #99.
Therefore, sometimes the only way to guarantee runtime consistency is to do one of two things:

ILMerge your dependencies
Rename or re-sign the assemblies

is fairly easy to do and some may prefer that way
is typically way more involved, requiring forking the repo, tweaking the places where signing happens, and maintaining all that in sync with upstream.

In order to make 2) more straightforward, I propose you follow the same approach we contributed to Mono.Cecil in https://github.com/jbevain/cecil/pull/217.
This "settings" file is basically a targets that's imported at the bottom of all Cecil projects (i.e. https://github.com/jbevain/cecil/blob/master/Mono.Cecil.csproj#L136). Most projects already have one such global import shared across all projects, which should simplify the implementation.
This common targets file then attempts to lookup another targets that provides overriden MSBuild values, by searching ancestor directories:
  <PropertyGroup>
    <CecilOverrides Condition="'$(CecilOverrides)' == ''">$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), Mono.Cecil.overrides))\Mono.Cecil.overrides</CecilOverrides>
  </PropertyGroup>
  <Import Project="$(CecilOverrides)" Condition="Exists('$(CecilOverrides)')" />

Another repo consuming Rx that wants to isolate itself from other extensions, could simply submodule the Rx repo, and provide this override targets in a folder outside the submodule (therefore never dirty-ing it).
In Xamarin's case, this is what it looks like:
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <AssemblyName>$(AssemblyName.Replace('Mono', 'Xamarin.VisualStudio'))</AssemblyName>
  </PropertyGroup>

  <ItemGroup>
    <Compile Include="$(MsBuildThisFileDirectory)Cecil.AssemblyInfo.cs" />
  </ItemGroup>

  <PropertyGroup>
    <DefineConstants>TRACE;NET_3_5;NET_4_0</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
  <PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\net_4_0_Debug\</OutputPath>
    <DefineConstants>$(DefineConstants);DEBUG</DefineConstants>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\net_4_0_Release\</OutputPath>
  </PropertyGroup>

</Project>

You could of course override signing:
	<PropertyGroup>
		<SignAssembly>true</SignAssembly>
		<AssemblyOriginatorKeyFile>mykey.snk</AssemblyOriginatorKeyFile>
	</PropertyGroup>

In our case, we're even providing a Cecil.AssemblyInfo.cs where we add InternalsVisibleTo attributes for testing purposes too, which are typically problematic also when consuming an external project.

Not sure I understand the needs here? Wouldn't #205 address this? It is no different than the main parts of CoreFX in the way it needs to handle api surface area across different capabilities and versions?

This also doesn't currently work as we use project.json. Something like this may be possible after things migrate back to MSBuild, but I'm not sure it should be necessary anyway.

It's not the same thing. I'm just sharing something that works for us in other plug-in related scenarios really well, without having to do any kind of potentially costly babysitting of APIs and version numbers. You know you'll always get the version you tested and compiled against, regardless of where you're being re-hosted/consumed, and regardless of the hosting process binding policies (which #205 doesn't fix in the VS case since someone could still provide a binding redirect policy that breaks someone else that depends on a specific version containing specific fixes, even if they are only behavioral and not API).
Feel free to disregard if not applicable ;).
I never understood the rush to move to xproj anyway. Had no idea you guys did that at all, so again, more reason to probably discard this, and just let others keep complaining ;)

@kzu thanks for the tip!
One of the main reasons to use xproj today is it's cross-compile capability. As we need to optimize for as many platforms as possible, using "single-headed" csproj's would be unwieldy.
I think this is still a useful idea though but I'm going to defer it until after the xproj->csproj transition is complete, where we can cross-compile there. Once back on csproj, I think we can have a conditionally imported props/target to enable easy overriding.

I wonder why shared projects + multiple platform-specific heads with platform-specific code didn't work for you? Not familiar with how xproj does the conditional compilation of stuff depending on target platform, or if you just have to resort to ifdefs..

At the end of the day, xproj does a "for each framework, evaluate these dependencies, defines and build an output". It's far simpler to maintain than having a 6-7 heads per project.
If you look at the source here, we are heavily feature-flagged to ensure maximum capabilities per platform. This has the effect of creating between 2-6 outputs per library to ensure things line-up appropriately. All of this is transparent to the end user as NuGet pulls in the best version for them, but it does mean that anything that adds "heads" would be hugely challenging to deal with.

Interesting. I'll look it up now closely since this might be useful
information down the road.
/cc @mhutch
On Fri, Jul 1, 2016, 4:18 PM Oren Novotny<EMAIL_ADDRESS>wrote:

At the end of the day, xproj does a "for each framework, evaluate these
dependencies, defines and build an output". It's far simpler to maintain
than having a 6-7 heads per project.
If you look at the source here, we are heavily feature-flagged to ensure
maximum capabilities per platform. This has the effect of creating between
2-6 outputs per library to ensure things line-up appropriately. All of this
is transparent to the end user as NuGet pulls in the best version for them,
but it does mean that anything that adds "heads" would be hugely
challenging to deal with.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/Reactive-Extensions/Rx.NET/issues/209#issuecomment-230038576,
or mute the thread
https://github.com/notifications/unsubscribe/AAKW6yV8AJlVnnhsxFa_4wUZ_HZ9FTw8ks5qRXYogaJpZM4JC4ai
.

Closing this as you can now do this with MSBuild in Preview3 and later. So this will be implemented once the tooling supports this project.


Write a Scala program to convert minutes to hours

Description
Write a Scala program to convert minutes to hours
1 hour = 60 minutes
Input  : 300
Output : 5

How to contribute

Save the solution in program/convertMinutesToHours.scala file
Add convertMinutesToHours.scala file in convert-minutes-to-hours folder

!assign


⚠ Processors has degraded performance

In db6ff94, Processors ($STATUS_URL) experienced degraded performance:

HTTP code: 200
Response time: 73 ms

Resolved: Processors performance has improved in 20971b7.


fix(flow-resolvers): non optional arguments in resolvers

Fixes https://github.com/dotansimha/graphql-code-generator/issues/1725.
The changes

As discussed, the resolvers arguments shouldn't be optional.
There was also no test coverage for these type definitions so I added a snapshot test which covers them as well as the existing "string comparison" tests (removed since they were made obsolete by the snapshot test).

That's awesome!!! Thank you @loicplaire .
Will merge right after ci passes.


Non latin characters not supported in usernames

Rancher versions:
rancher/server: 1.6.10
Infrastructure Stack versions:
Steps to Reproduce:
Attempt to register a user using SSO (github in this case) for a user who has non latin characters in their name.
Results:
Caused by: org.mariadb.jdbc.internal.util.dao.QueryException: Incorrect string value: '\xC5\x81ukas...' for column 'name' at row 1
Query is: insert into `account` (`name`, `kind`, `uuid`, `state`, `created`, `data`, `external_id`, `external_id_type`, `health_state`, `version`) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?), parameters ['Łukasz Smith','user','bc3b10ca-1179-4b86-9bfe-c49e94f184b5','requested','2017-10-06 11:31:12.473','{}','3295190','github_user','healthy','2']

To clarify, Ł is a pretty common character in some European countries:
https://en.wikipedia.org/wiki/Ł

Is this using internal or external DB? Can you run
USE cattle;
SELECT @@character_set_database, @@collation_database;

This is using an external DB in RDS - MySQL 5.7.17
latin1	latin1_swedish_ci
latin1 appears to be the RDS default :(

Including link to the docs on this for completeness:
http://rancher.com/docs/rancher/v1.6/en/installing-rancher/installing-server/#launching-rancher-server---single-container---external-database


Trade

Overview - Trades have three phases:

Initiation
Negotiation
Result

Initiation is when the user clicks on the green Trade button in the Listings page, which takes them to the Initiation pop-up. This pop-up is at the Trade/TR-<number>  page, and it is automatically opened.
Negotiation is when the trade offer has been initiated (placed), and users start negotiating (see design chain).
Result is when the trade is either reached or rejected.
P.S. If you need more clarifications, watch the videos I prepared:

https://drive.google.com/file/d/1dLWzqyQvxM3NaS_oi9VCtbwP_JIG4JnI/view?usp=sharing
https://drive.google.com/file/d/1xSHyRApoltJhaMgU8wVqCPKRlV-EGJ8F/view?usp=sharing

The trade is also linked to the chat (see issue #157).
Requirements:

The trade offer's status changes to deal reached (completed)/rejected only after both sides agree on the same decision
If one sides agrees, and the other disagrees, we don't have to do anything yet. It's an edge case we don't need to cover for this version.
Users can only choose visible listings from the other person
Users can also select a monetary value (cash) on both sides for the trade
The offer modal should be accessible at all times from the side menu's blue expand button, or the gray "Negotiate" button.
The three action buttons should have a tooltip, stating their action "Reject / Negotiate / Accept"
Show the appropriate "no results" message, when users search for a listing in the other user's collection

Edge case: If the user closes the modal without initiating a trade, they will still be on the trade page, and they can request (see design).

I am seeking a clarification on some behavior, because the way it's implemented on the backend and the way it's portrayed in the wireframes is confusing me:

reading the requirements and the wireframes (in particular the chat ones), I assume that one should be able to change the other user's listings. In addition, when initiating a trade offer, you would obviously need to do that as well so that the other user knows what you want.
However, on the backend, sending a PATCH request to the trade endpoint gives me a 400 error when I try to modify the other's listings, stating that I am not allowed to change the other user's listings
On top of this, the update actually succeeds despite the 400 error (this one feels like a bug)

Am I understanding / doing something wrong? If so, what would be the correct behavior / course of action in that case?

I am seeking a clarification on some behavior, because the way it's implemented on the backend and the way it's portrayed in the wireframes is confusing me:

reading the requirements and the wireframes (in particular the chat ones), I assume that one should be able to change the other user's listings. In addition, when initiating a trade offer, you would obviously need to do that as well so that the other user knows what you want.
However, on the backend, sending a PATCH request to the trade endpoint gives me a 400 error when I try to modify the other's listings, stating that I am not allowed to change the other user's listings
On top of this, the update actually succeeds despite the 400 error (this one feels like a bug)

Am I understanding / doing something wrong? If so, what would be the correct behavior / course of action in that case?

Yes, you are correct. A PATCH endpoint should allow changes of the listings on both sides. However, the listings should still be owned by the other user, you should not be able to select listings of other users. Maybe it’s a bug. @dinocom33 can you double-check?

If you can fix it, do it or raise an issue. Which non registered actions do you mean?

If you can fix it, do it or raise an issue. Which non registered actions do you mean?

there seem to be some actions called "accept", "reject", "negotiate", and "counter_offer" They are not generated in the Swagger client and making requests to those gives me 404 errors. Only when I explicitly register them (e.g. path('<int:pk>/negotiate/', TradeListingViewSet.as_view({'post': 'negotiate'})),) do the actions actually do what they are supposed to.
(based on reading the DRF docs, actions are supposed to be routable, that's why I initially asked my question)

If you can fix it, do it or raise an issue. Which non registered actions do you mean?

there seem to be some actions called "accept", "reject", "negotiate", and "counter_offer" They are not generated in the Swagger client and making requests to those gives me 404 errors. Only when I explicitly register them (e.g. path('<int:pk>/negotiate/', TradeListingViewSet.as_view({'post': 'negotiate'})),) do the actions actually do what they are supposed to.
(based on reading the DRF docs, actions are supposed to be routable, that's why I initially asked my question)

All endpoints are refactored and regarding issue  Trade Statuses are not accurate #175


can't change the mouse lil hand

I changed all the png files and still it wont change, its the hand that holds the mouse

Unfortunately, the paw holding the mouse is drawn by the code and not by the files. Perhaps you want to change its color?

@kuroni I was about to open a suggestion myself to be able to change the color in the config. I'd like to use a custom cat color but because the hand holding the mouse is White I can't do so :(

Ohh I see, I'll try that and thank you for the quick answer :]

I added the ability to edit the paw color in the latest release! To use it, add a paw subfield into the osu field like this:
{
    "osu": {
        "paw": [204, 153, 204]
    }
}

Feel free to consult the wiki or ask me for more details!

Dodałem możliwość edycji koloru łapy w najnowszej wersji! Aby z niego skorzystać, dodaj pawpodpole do osupola w następujący sposób:
{
     " osu " : {
         " paw " : [ 204 , 153 , 204 ]
    }
}

Zapraszam do zapoznania się z wiki lub zapytaj mnie o więcej szczegółów!

hi where can i add this because i'm a complete rookie and want to edit bongo cat

For example, this is my config
{
    "mode": 1,
    "resolution": {
        "letterboxing": false,
        "width": 1920,
        "height": 1080,
        "horizontalPosition": 0,
        "verticalPosition": 0
    },
    "decoration": {
        "leftHanded": false,
        "rgb": [255, 255, 255],
        "offsetX": [0, 11],
        "offsetY": [0, -65],
        "scalar": [1.0, 1.0]
    },
    "osu": {
        "mouse": true,
        "toggleSmoke": false,
        "paw": [255, 255, 255], <--
        "pawEdge": [0, 0, 0]
    }
}

You put the paw section inside the osu section like shown (but don't include the arrow like I did).

Hey! so how do we access to code to change its paw colour?

Can u make a video how to change?

i can edit its appearance? not the colors only?

Unfortunately, the paw holding the mouse is drawn by the code and not by the files. Perhaps you want to change its color?

So, provided that you made the Bongo cat thing that has the watermark "Kuvster", can you explain to me how to change the mouse paw color? here's the full layout for that (I already have some settings).
=================================================
DO NOT REMOVE ANY SETTINGS, OR CHANGE THEIR ORDER
Mouse: true
Key 1 (single capital letter, or number): W
Key 2 (single capital letter, or number): R
Letterboxing: false
osu! x resolution (width):
osu! y resolution (height):
Horizontal position (%):
Vertical position (%):
mouse.png x offset: 0
mouse.png y offset: 0
mouse.png scalar: 1
tablet.png x offset: 11
tablet.png y offset: -65
tablet.png scalar: 1
Background red: 62
Background green: 35
Background blue: 110


How to get GS1 Datamatrix identifier

Hey is there a way to get the fnc1 identifier from the decoded result? I need to check if the barcode is a real GS1 barcode or not.
Thanks!

need fnc1 asap


IK and Grasping

Hello, I encountered some issues while using ik and grading demo. When using ik, I need to use the
controller_config={
"arm_0": {
"name": "JointController",
"motor_type": "position",
}
}
}
But if this is used, the sticky property of the grafting will have problems. Even if the robot grabs the object, it cannot magnetize it, and I call robot.is_ Grassing(), the result is also false, but I particularly need to combine ik and Grass in my project. I hope to receive your guidance, thank you.

Hi, for questions please feel free to join our discord and ask there so we can avoid the long back-and-forth loop here. Please also post a minimum reproducible example. Thanks!


toContain gives unhelpful error message when value being checked is an object

🐛 Bug Report
expect(arr).toContain(val) gives an unhelpful error message when matching object values.
To Reproduce
Steps to reproduce the behavior:

Create an array containing objects: const arr = [{ a: 1 }, { b: 2}];
Try to expect(arr).toContain({ a: 1 })

Error message is displayed:
Expected array:
      [{"a": 1 }, {"b": 2}]
    To contain value:
      {"a": 1}

but mentions nothing about how identity is being used for equality checks, leaving you scratching your head since it plainly displays "the same" object literal in both places.
Expected behavior
It would ideally add a note about how it's checking object identity and not key/value equality.
Link to repl or repo (highly encouraged)
https://repl.it/repls/UsableLovingPhases
Run npx envinfo --preset jest
  System:
    OS: macOS High Sierra 10.13.6
    CPU: x64 Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz
  Binaries:
    Node: 9.0.0 - /usr/local/bin/node
    Yarn: 1.7.0 - /usr/local/bin/yarn
    npm: 6.1.0 - /usr/local/bin/npm
  npmPackages:
    @types/jest: ^21.1.8 => 21.1.10
    jest: ^21.2.1 => 21.2.1

```

Expected array:
[{"a": 1}, {"b": 2}]
To contain value by reference:
{"a": 1}

if this wording is okay I will make a PR for this.

Oh, I didn't see you're using v21. In v23 we've added this message:

However, you can see it's a bit off. @Gregjarvez feel free to add 2 extra newlines here: https://github.com/facebook/jest/blob/277c547edd13ef2b69049ec1b4e768a2333471e1/packages/expect/src/matchers.js#L316

sure !!

Oh my mistake, was working on an existing project and didn't realize we weren't up to date. Thanks. :-)

can I work on this issue, if someone is not ?

Too late! Already addressed:


Update IAM service definitions

This is an auto-generated PR with IAM service updates.

:tada: This PR is included in version 1.1.43 :tada:
The release is available on:

Visual Studio Marketplace
GitHub release

Your semantic-release bot :package::rocket:


[Bug]: url domain.com/themes not work if PanelServiceProvider use ->path('admin')

What happened?
multiple panelProvider example admin / tenant
If there are multiple panels that use ->path('something') can't use domain.com/themes correct url is domain.com/something/themes.
i solve issue modify
SetTheme.php

 MenuItem::make('Themes')
                    ->label('Themes')
                    ->icon('heroicon-o-swatch')
                    ->url('/'.$panel->getPath().'/themes'),
            ] : []

How to reproduce the bug
After installation
i have TenantPanelServiceProvider.php where i use ->path('tenant')
and i have AdminPanelServiceProvider.php where i use ->path('admin')
Package Version
lasted
PHP Version
8.2.0
Laravel Version
lasted
Which operating systems does with happen with?
No response
Notes
No response

Thanks for submitting the bug report, a fix has been deployed 57f1eb27e94b574d4933cac43187d04e8cf1c334


Cannot build and Getting play-services-basement version mismatch error

I'm getting the below error while I want to build or run the app.
The library com.google.android.gms:play-services-basement is being requested by various other libraries at [[15.0.1,15.0.1]], but resolves to 16.0.1. Disable the plugin and check your dependencies tree using ./gradlew :app:dependencies.
Environment information:
    System:
      OS: Linux 4.15 Ubuntu 16.04.4 LTS (Xenial Xerus)
      CPU: x64 Intel(R) Core(TM) i7-4510U CPU @ 2.00GHz
      Memory: 1.45 GB / 15.59 GB
      Shell: 4.3.48 - /bin/bash
    Binaries:
      Node: 10.11.0 - ~/.nvm/versions/node/v10.11.0/bin/node
      Yarn: 1.7.0 - /usr/bin/yarn
      npm: 6.4.1 - ~/.nvm/versions/node/v10.11.0/bin/npm
    SDKs:
      Android SDK:
        Build Tools: 23.0.1, 23.0.3, 24.0.1, 25.0.1, 25.0.2, 25.0.3, 26.0.3, 27.0.3, 28.0.2
        API Levels: 22, 23, 24, 26, 27
    IDEs:
      Android Studio: 3.1 AI-173.4720617
    npmPackages:
      react: 16.5.0 => 16.5.0
      react-native: 0.57.2 => 0.57.2
    npmGlobalPackages:
      react-native-cli: 2.0.1

Hey,
Even I used to get this error.
Try adding
ext {         googlePlayServicesVersion = "15.0.1"   }
It worked for me

@spyD1803 I added that line, but I'm getting the same error.

The problem came from the difference between version of play-services-auth and play-services-base. Both of them should be the same version.
implementation 'com.google.android.gms:play-services-auth:15.0.1'
implementation "com.google.android.gms:play-services-base:15.0.1"

Fixed.


Close quote

@andresnava : Thanks for your contribution to the Azure documentation! The author, @ggailey777, has been notified to review your proposed change.

#sign-off

@andresnava Thanks!


#131049215 Unresolved checks tab

What does this PR do?
A separate dashboard with a dynamic notification counter for unresolved checks.
Description of Task to be completed?
Form to change Period redirects back to My Checks page instead of remaining on Unresolved Checks page.
What are the relevant pivotal tracker stories?
#131049215
Screenshots (if appropriate)

A few style nits, but looks good to me 👍


Archive additional target/*.log files

@mbiarnes please take a look
/CC @desmax74  - this should make sure the log files are always archived as a build artifacts.

+1 @psiroky "**/target/*.log" cover our needs


If flags are used other than default then verify the local config along with the changes done in dc

verify that the flags specified in odo create command are reflected in DC
example odo create --memory 2G --cpu 2 than the DeploymentConfig should have the corresponding resource limits

the following flags should be validated:

  --cpu string          Amount of cpu to be allocated to the component. ex. 100m or 0.1 (sets min-cpu and max-cpu to this value)

 --env stringSlice     Environmental variables for the component. For example --env VariableName=Value

 --max-cpu string      Limit maximum amount of cpu to be allocated to the component. ex. 1

 --max-memory string   Limit maximum amount of memory to be allocated to the component. ex. 100Mi

 --memory string       Amount of memory to be allocated to the component. ex. 100Mi (sets min-memory and max-memory to this value)

 --min-cpu string      Limit minimum amount of cpu to be allocated to the component. ex. 100m

 --min-memory string   Limit minimum amount of memory to be allocated to the component. ex. 100Mi

-p, --port stringSlice    Ports to be used when the component is created (ex. 8080,8100/tcp,9100/udp)

/area test

PR for this issue is almost related to https://github.com/openshift/odo/pull/2457 PR. So I am just waiting for the PR to get merged.

AFAIU all the flags are already verified in https://github.com/openshift/odo/blob/master/tests/helper/helper_oc.go except --port which I have covered in #2499 PR


Missing Binary Sensors for Automation

There is no usable sensors for reasonable automations.
Can you add 2 Sensors?
Like in this config:
https://github.com/thefipster/esphome-mmwave-sensors
https://github.com/thefipster/esphome-mmwave-sensors/blob/main/packages/mr24hpc1.yaml

This looks like great advice and I'll refer to them to refine my process!

I have to create my own sensor template to use the device in automations. It would be nice if these sensors were included by default.

The latest project address of the kit will simplify all processes, please refer to the link here:
https://github.com/limengdu/mmwave-kit-external-components/tree/main


Add a full PostgresSQL syntax database 'AnalyticDB' as vector store.

Hi there！
I'm excited to open this PR to add support for using a fully Postgres syntax compatible database 'AnalyticDB' as a vector.
As AnalyticDB has been proved can be used with AutoGPT, ChatGPT-Retrieve-Plugin, and LLama-Index, I think it is also good for you.
AnalyticDB is a distributed Alibaba Cloud-Native vector database. It works better when data comes to large scale. The PR includes:

[x]  A new memory: AnalyticDBVector
[x]  A suite of integration tests verifies the AnalyticDB integration

I have read your contributing guidelines. And I have passed the tests below

[x]  make format
[x]  make lint
[x]  make coverage
[x]  make test

this looks pretty good - can you add an example notebook? that will help greatly with documentation and discoverability!

@hwchase17 OK, I'm willing to do it.

@hwchase17 Done! I have  add an example notebook and add related document


IE11 display issues

i get this extra space below my table on IE: but it does not happen on any other browsers:

<ReactTable
                  data={this.state.qnaActionHistory }
                  PaginationComponent={Pagination}
                  columns={[.......]}
                  pageSize={pgSize}
                  className="-striped -highlight"
                />

Hi @paigeflourin
I got exactly same issue in IE11.
How did you solve it?
Thanks


Systemd service file should start python with -u parameter

By default, python seems to buffer output which leads to systemd/journald not receiving the results of the prints to STDOUT in a timely manner. If the service file provided would start the script with python in unbuffered mode
ExecStart=/usr/bin/python -u /home/pi/GarageQTPi/main.py
the logging to journald would come immediately and not in larger junks sometime or never.

Want to create a pr?

I was already doing it but then I thought I should also fix the pin numbering in the example (done) and on the wiring diagram but then I somehow got lost finding the original and its license... :-)
I was tempted to just change the numbers in the picture but don't want to violate anybody's copyright. Maybe I recreate it and add it as a new file in the PR if you don't mind?


Add perPage method to the Page class

What is the feature?
Would be nice to surface the per_page attribute from the pagination meta as a method.

https://github.com/ukfast/sdk-php/pull/29


Fixed not being able to unsubscribe events

Array.prototype.filter creates a new array but it was never assigned thus events were never unsubscribed.

This is a good one, thanks for the PR!


Enabling a swing mode does not set coresponding swing angle selector to "Off"

I think, what I'd expect if automatic swinging for a given direction is active, then the fixed position setting must be displayed as off, instead of the last selected fixed position. The issue that I can imagine, is that if that is set, it might stop the automatic swinging.
Revised:

Set swing mode to both: swing mode setting.
Check swing angle setting: both must be off.

Originally posted by @parautenbach in https://github.com/mill1000/midea-ac-py/issues/109#issuecomment-2064862676

Similarly, I guess I need to test:

Set fixed positions.
Turn on automatic swinging for one or both directions.
Check the fixed setting: Does it still display the previously fixed position, or does it show as off?

@parautenbach, I think this is a good test for the OEM application. I would modify the sequence to be:

Set fixed positions.
Set automatic swinging for one or both directions.
Check fixed position settings. Does it show original setting or off?
Set automatic swinging to "Off"
Does fan return to original fixed position?

I would also test the reverse.

Set automatic swinging for one or both directions.
Set fixed positions.
Check automatic swinging. Does it show original setting or off?
Set fixed position to "Off" if possible.
Does it resume automatic swinging?

In your own SmartHome app, I set fixed positions in both directions.
The Horizontal swing turned off the horizontal fixed position.
The Vertical swing turned off the vertical fixed position.
The same is true vice versa, the fixed position turns off the corresponding swing.

Thanks for the input.
What happens when you set a fixed position with this integration, wait 15 seconds, then set horizontal/vertical swing and wait 15 seconds?

Thanks, one more question.
If you set an angle, then toggle the corresponding swing on then off, does it return to the previously programmed angle?

Interesting what's happening. If I adjust the blade angles from the app, it updates in Home Assistant and vice versa. However, the OFF state is an exception:

When set from the app, it does not show up in Home Assistant.
When set from Home Assistant, nothing happens in the app.

Interesting what's happening. If I adjust the blade angles from the app, it updates in Home Assistant and vice versa. However, the OFF state is an exception:

Oh that's very interesting info. Thanks again.

When set from the app, it does not show up in Home Assistant.

I should add that the blade angle direction cannot be set to OFF from the app (there is no button for it). It just indicates that nothing is set. The AC starts in OFF state every time and the Swing can also turn it off.

Could you grab a debug log when making the changes from the app? You might need to wait ≈20 seconds after making the change.

Hello, in the attached debug log this happens:

I set the direction to UP.
I set the direction to LEFT.
Setting the LEFT-RIGHT swing.
Setting the UP-DOWN swing.
I set the direction to UP.
I set the direction to LEFT.

I waited each time until it was visible in HA.
midea.debug_1.log

Thanks again.
Ok, so there's what I see in this log.
   64: 2024-05-04 15:11:29.367 DEBUG (MainThread) [msmart.device.AC.command] State response payload: c00158507f7f00 00<PHONE_NUMBER>0c0050000000000000000100000000c1
   74: 2024-05-04 15:11:29.480 DEBUG (MainThread) [msmart.device.AC.command] Properties response payload: b1020900000100 0a00000100

No swing, and no fan position set.
  104: 2024-05-04 15:11:44.385 DEBUG (MainThread) [msmart.device.AC.command] State response payload: c00158507f7f00 00<PHONE_NUMBER>0c0050000000000000000100000000c3
  116: 2024-05-04 15:11:44.494 DEBUG (MainThread) [msmart.device.AC.command] Properties response payload: b1020900000101 0a00000100

No swing, UP-DOWN (UD) angle set to position 1, LEFT_RIGHT (LR) no angle set.
  137: 2024-05-04 15:11:59.381 DEBUG (MainThread) [msmart.device.AC.command] State response payload: c00158507f7f00 00<PHONE_NUMBER>0c0050000000000000000100000000c5
  162: 2024-05-04 15:12:14.373 DEBUG (MainThread) [msmart.device.AC.command] Properties response payload: b1020900000101 0a00000101

No swing, UP-DOWN (UD) angle set to position 1, LEFT_RIGHT (LR) angle set to position 1.
  163: 2024-05-04 15:12:14.373 DEBUG (MainThread) [msmart.device.AC.command] State response payload: c00158507f7f00 00<PHONE_NUMBER>0c0050000000000000000100000000c7
  171: 2024-05-04 15:12:14.485 DEBUG (MainThread) [msmart.device.AC.command] Properties response payload: b1020900000101 0a00000101

Same as above.
  189: 2024-05-04 15:12:29.377 DEBUG (MainThread) [msmart.device.AC.command] State response payload: c00158507f7f00 33<PHONE_NUMBER>0c0052000000000000000100000000c9
  200: 2024-05-04 15:12:29.490 DEBUG (MainThread) [msmart.device.AC.command] Properties response payload: b1020900000101 0a00000100

LR swing on, UP-DOWN (UD) angle set to position 1, LEFT_RIGHT (LR) no angle set.
This is expected. Enabling LR swing turns off LR angle. But sounds like HA is not reflecting this change?
  221: 2024-05-04 15:12:44.372 DEBUG (MainThread) [msmart.device.AC.command] State response payload: c00158507f7f00 3f<PHONE_NUMBER>0c0052000000000000000100000000cb
  233: 2024-05-04 15:12:44.486 DEBUG (MainThread) [msmart.device.AC.command] Properties response payload: b1020900000100 0a00000100

LRswing on, UP-DOWN (UD) no angle set, LEFT_RIGHT (LR) no angle set.
Again, expected.
  254: 2024-05-04 15:12:59.367 DEBUG (MainThread) [msmart.device.AC.command] State response payload: c00158507f7f00 33<PHONE_NUMBER>0c0042000000000000000100000000cd
  266: 2024-05-04 15:12:59.481 DEBUG (MainThread) [msmart.device.AC.command] Properties response payload: b1020900000101 0a00000100

LR swing on, UP-DOWN (UD) angle set to position 1, LEFT_RIGHT (LR) no angle set.
  287: 2024-05-04 15:13:14.383 DEBUG (MainThread) [msmart.device.AC.command] State response payload: c00158507f7f00 00<PHONE_NUMBER>0c0042000000000000000100000000cf
  299: 2024-05-04 15:13:14.495 DEBUG (MainThread) [msmart.device.AC.command] Properties response payload: b1020900000101 0a00000101

No swing, UP-DOWN (UD) angle set to position 1, LEFT_RIGHT (LR) angle set to position 1.

This is expected. Enabling LR swing turns off LR angle. But sounds like HA is not reflecting this change?

Yes, the OFF state of the blade angles is not visible in the HA.

Ok. I might need you to install a debug version of the integration to try get to the bottom of this.

Sure, I'm happy to help :)

I appreciate your consistent help!
I've got a branch here with extra debug logging: https://github.com/mill1000/midea-ac-py/tree/issue/swing_angle_mode_interaction
You'll have to manually install it since HACS can't install from a specific branch.
Run with debug logs and try changing the swing modes & fan angles from HA.

Hello,
I (we) thank you for spending so much time on this ;)
I'm attaching two log files. In the _2 file, I toggled the vane positions and swing mode back and forth, while in the _4 file, I adjusted the OFF vane position that was missing from the second file.
midea_msmart.debug_bladepos_240509_2.log
midea_msmart.debug_bladepos_240509_4.log

Ok I think I found the culprit in your _2 log.
2024-05-09 19:53:55.336 DEBUG (MainThread) [custom_components.midea_ac.climate] Setting swing mode 'horizontal'.
2024-05-09 19:53:55.336 DEBUG (MainThread) [custom_components.midea_ac.coordinator] Updating device. Pre-update swing mode '3', swing angle LR '1', UD '1'.
2024-05-09 19:53:55.339 DEBUG (MainThread) [msmart.base_device] Sending command to <IP_ADDRESS>:6444: aa24ac00000000000002400358667f7f0033002000000000000000000000000000005a4c36
...
2024-05-09 19:53:55.491 DEBUG (MainThread) [msmart.device.AC.command] State response payload: c00158667f7f003300200062610c70740000000000000001000000005a
2024-05-09 19:53:55.491 DEBUG (MainThread) [custom_components.midea_ac.coordinator] Updated device. Post-update swing mode '3', swing angle LR '1', UD '1'.
2024-05-09 19:53:55.491 DEBUG (MainThread) [custom_components.midea_ac.coordinator] Refreshing device. Current swing mode '3', swing angle LR '1', UD '1'.
2024-05-09 19:53:55.491 DEBUG (MainThread) [msmart.base_device] Sending command to <IP_ADDRESS>:6444: aa21ac00000000000003418100ff03ff0002000000000000000000000000035bcc41
...
2024-05-09 19:53:55.640 DEBUG (MainThread) [msmart.device.AC.command] State response payload: c00158667f7f003300200062610c70740000000000000001000000005b
2024-05-09 19:53:55.641 DEBUG (MainThread) [msmart.base_device] Sending command to <IP_ADDRESS>:6444: aa12ac00000000000003b10209000a005c31ec
...
2024-05-09 19:53:55.753 DEBUG (MainThread) [msmart.device.AC.command] Properties response payload: b10209000001010a0000010000
2024-05-09 19:53:55.753 DEBUG (MainThread) [custom_components.midea_ac.coordinator] Device refreshed.

The final properties response b10209000001010a0000010000 is actually indicating that LR_ANGLE is 0 (Off), but the device doesn't reflect that.
It's because here, I use the walrus operator to determine if the property exists in the response...but a value of 0 (Off) causes the condition to evaluate to false and the attribute is never updated.
            if angle := res.get_property(PropertyId.SWING_LR_ANGLE):
                self._horizontal_swing_angle = cast(
                    AirConditioner.SwingAngle,
                    AirConditioner.SwingAngle.get_from_value(angle))

            if angle := res.get_property(PropertyId.SWING_UD_ANGLE):
                self._vertical_swing_angle = cast(
                    AirConditioner.SwingAngle,
                    AirConditioner.SwingAngle.get_from_value(angle))

https://github.com/mill1000/midea-msmart/blob/a4dfe528f34aeda5db6f2cd7752551e4af31fed7/msmart/device/AC/device.py#L157-L165

Got a fix here: https://github.com/mill1000/midea-msmart/pull/128
If you can update to this branch to test that'd be great.
pip install git+https://github.com/mill1000/midea-msmart.git@issue/device_property_update

Hi, I installed it like this:
➜  git clone -b issue/device_property_update https://github.com/mill1000/midea-msmart.git (the other way doesn't work under HAOS.)
➜  python3 setup.py install
➜  msmart-ng -v
msmart version: 0.0.0
And here's the debug log:
midea_msmart.debug_swing_1.log

I don't think the update took.
Make sure you're installing it within the HA container (even within HAOS), and then maybe restart HA

Hello,
I'm not sure what the problem was with the previous run, but it worked this time :)
msmart version: 2024.5.4.dev1+g94a0b0f
It works perfectly as expected.
When switching to swing mode, the blade positions nicely switch to off.

Excellent. I'll get this into a release ASAP


[in_app_purchase] Apps must use Billing Library version 3 or newer.

Starting on August 2, 2021, all new apps must use Billing Library version 3 or newer. By November 1, 2021, all updates to existing apps must use Billing Library version 3 or newer.
Flutter In-app purchase library using older than library version 3.

Hi @ibragunduz
This has been fixed in https://github.com/flutter/flutter/issues/75204 and landed in 0.5.0 release
Closing as duplicate of https://github.com/flutter/flutter/issues/75204
If you disagree, please write in the comments and I will reopen it.
Thank you


Allow usage of folders within S3

At present I can only specify a bucket name and Thanos writes to the top level, however I want it to use <bucket_name>/logging-and-monitoring/prometheus

We wanted to postpone this as it adds mostly unnecessary complexity to the code, but if it is a blocker, we will take PRs for it (:
Proper tests for this are must have.

Also we probably need that on bucket lvl not provider lvl

You say unnecessary complexity, but what about organisations that have conventions that must be followed for the storage of data? It then becomes quite necessary.

Amount of additional complexity, maintainance and tests in comparison to added value is quite large. (: Can you elaborate on conventions? Why you cannot just create another bucket using any naming convention you need?
In terms of tests I just mean being careful to not surprise existing users and have consistent handling of this across all Thanos components, nothing more.

This just comes down to the rules that govern data in the organisation that I work for. Simply put, I'm not allowed to create buckets using any name.
I'm now looking to use Thanos for cross-cluster federation but I'm still getting to grips with how exactly that works. Could I have all Thanos sidecars in every cluster write to the same bucket? If I then have a query deployment in every cluster plus a monitoring cluster with a querier reading from every other querier, would that mean a Thanos store in the monitoring cluster only?
If I can make this work with just needing one new bucket for all clusters, there's more possibility for a new bucket being permitted.
Many thanks in advance for your help.

@bwplotka, thanks.
I've made some progress on this, but don't seem able to make queries from the querier in my monitoring cluster to each of the other query components.
Could you please clarify if --store can be passed to a query component to point at another query component?

Cool, I think we are happy to take PRs for that (:

Thank you for contributing this project, I'm hoping it will solve a lot of problems for us!
One more use case for your consideration: permissions management. Ideally, I prefer to use:
<company_name>-<service_name>/<account_name>/....
So, for us, that's
mycompany-prometheus-thanos/development/....
mycompany-prometheus-thanos/production/....
Permissions for the production Prometheus cluster's IAM role will be granted to the production subdirectory, and development instances can use the other one. We have a few other account as well to isolate potentially high-risk services, one for CI, etc.
I can work around this by using extra buckets, but usually I would use prefixes.

A quick bump on this... One really nice thing about allowing bucket prefixes is access speed improvements. AWS increases S3 download performance by number of consumers, meaning if you have multiple thanos clusters connecting to the same s3 bucket, overall download speeds improve.

We would really appreciate this feature.

Having multiple sidecars uploading to the same bucket and having 1 compactor per cluster would not be recommended as the compactors would "compete" for the same data right ?

FYI There is a proposal for this -> https://github.com/thanos-io/thanos/issues/1318

This issue should not be stale, I would very much still like the ability to use S3 prefixes


Make forEachTYPE instead of overloading forEach for primitive collections

Rename the forEach(TYPEConsumer) methods to forEachTYPE(TYPEConsumer) for primitive TYPEs.
This solves an ambiguity when calling forEach with a lambda requiring casting the lambda to solve.
By happenstance it wasn't an issue for int, long, and double collections due to Fastutil's consumer being both an object and primitive consumer, solving the ambiguity. However, it was an issue for byte, short, char, and float collections.
This also means we can remove the messy "don't override this" disambiguation overrides that int, long, and double Iterables had, and cleans up all the cruft associated with it.
Note this only fixes it for type specific Iterables, not for the Spliterators. However, as Spliterators are rarely used "raw", this isn't as big of an issue. Perhaps can be a future cleanup.

@techsy730 I'm in awe by the speed and precision with which you code, but can we talk before you write hundreds of line of code? 😂  You totally convinced me there was no need for this. LOL.

So, I checked every possible case I could think of: I must conclude that the warning from javac is wrong. No matter what I did—lambdas, variables—I could not create an ambiguous call (in Eclipse—in the past, I had the two compilers diverge).
Moreover, the ambiguity reported is between two deprecated methods. So basically we won't really care.
I'd leave your code as it is—you already did the right thing.


Request-a-Team V2 - An unknown error occurred.

Description
So, every time I try to run this app I get an error from the app at the top of the screen saying: an unknown error occurred. I have no idea what causes this, but sometimes it happens and sometimes not. Very inconsistent.
I believe, it has something to do with this count rows line of code for Sensitivity Labels:
Set(
gblEnableSensitivity,
If(
Lower(
LookUp(
'Team Request Settings',
Title = "EnableSensitivityLabels"
).Value
) = "true" && CountRows(
Filter(
'IP Labels',
Enabled = true
)
) > 0,
true,
false
)
);
That entire segment is giving alerts saying that count rows is not supported.
Steps to reproduce

Go through deployment steps
Run the app
Error will appear at the top of the screen

Expected results
All drop down menus and everything should start working, but don't.
Actual Results
Nothing in the app works, aside from switching between screens. Selecting anything and everything that has a drop-down box does nothing.
Solution component
Power App
Operating system (environment)
Windows
Additional Info
Was also getting a lot of these when inspecting the page:

Bump
I have the exact same problem and I'm lost. We have tried to find the source of the problem with a colleague but... .that was useless.
Would love some feedback from people who have found a solution?

Hello @dcrockin01
May I suggest having a look at [https://github.com/OfficeDev/microsoft-teams-apps-requestateam/issues/336](Issue 336)?
One of the errors I see on your screenshot has been discussed about there. The problem is Caching. You have to go to your app, go to Information and delete all the older versions but the latest. There is also a "Live" Tag on one of the versions, I don't know how this works exactly but it may be indeed a cache-and-wait type of problem.


Add jacoco package to the default packages to be deferred

From<EMAIL_ADDRESS>on September 13, 2013 09:43:06
What steps will reproduce the problem? 1. Use PowerMock with jacoco offline instrumentation
2. In the test result, one can see errors like :
java.nio.channels.OverlappingFileLockException
at sun.nio.ch.FileChannelImpl$SharedFileLockTable.checkList(FileChannelImpl.java:1166)
at sun.nio.ch.FileChannelImpl$SharedFileLockTable.add(FileChannelImpl.java:1068)
at sun.nio.ch.FileChannelImpl.lock(FileChannelImpl.java:824)
at java.nio.channels.FileChannel.lock(FileChannel.java:860)
at org.jacoco.agent.rt.internal_9dd1198.output.FileOutput.openFile(FileOutput.java:69)
at org.jacoco.agent.rt.internal_9dd1198.output.FileOutput.writeExecutionData(FileOutput.java:53)
at org.jacoco.agent.rt.internal_9dd1198.Agent.shutdown(Agent.java:143)
at org.jacoco.agent.rt.internal_9dd1198.Agent$1.run(Agent.java:60) 3. What is the expected output? What do you see instead? What version of the product are you using? On what operating system? PowerMock 1.5 + Jacoco 0.6.3 Please provide any additional information below. The problem is that jacoco class org.jacoco.agent.rt.internal_9dd1198.output.FileOutput registers a shutdown hook in the JVM which should normally execute only once per JVM.
With PowerMock, jacoco classes are loaded several times because of the MockClassLoader and thus the shutdownhook is registered and executed several times in parallel when the JVM shuts down, leading to the above OverlappingFileLockException.
One could add @PowerMockIgnore("org.jacoco.agent.rt.*") to each test class but this is annoying.
I see that there's already a list of packages to ignore by default, in org.powermock.core.classloader.MockClassLoader.packagesToBeDeferred
Please add "org.jacoco.agent.rt.*" to this list.
Also, it would be nice to be able to add such ignores globally with a system property !
Original issue: http://code.google.com/p/powermock/issues/detail?id=458

From<EMAIL_ADDRESS>on September 21, 2013 08:51:53
Hi,
Adding ignores globally is a good idea, could you please add this as a separate issue?
I've added org.jacoco.agent.rt.* to the list now, please try it out by building PowerMock from source (skip tests and javadoc if you're not running Java 6).
Regards,
/Johan


Front Camera

Hi.
When I'm using front camera it dose not take a picture and log shows this:
 W/LegacyRequestMapper: convertRequestMetadata - control.awbRegions setting is not supported, ignoring value
 W/LegacyMetadataMapper: convertAfModeToLegacy - ignoring unsupported mode 4, defaulting to fixed
 W/LegacyRequestMapper: convertRequestMetadata - control.awbRegions setting is not supported, ignoring value
 W/LegacyMetadataMapper: convertAfModeToLegacy - ignoring unsupported mode 4, defaulting to fixed

I have this problem with Samsung Galaxy Note 4, But on Samsung Galaxy S4 everything are well;
Both have android 6 (Marshmallow).

@EMIN3M1986 hey, any hints on this issue??

In lockFocus() method, replace line
mCaptureSession.capture(mPreviewRequestBuilder.build(), mCaptureCallback, mBackgroundHandler);
with
captureStillPicture();
by
https://stackoverflow.com/questions/33127258/front-camera-in-camera2-not-capturing-image

Thanks for your answer! The problem was that front camera didn't support Auto Focus (took me some time to realize that that was the real issue) and ended up doing what you suggested.

This sample has been migrated to a new location where we can accept Pull Requests (check README for more information).
As recommended by GitHub, we are closing all issues and pull requests now that this older repo will be archived.
If you still see this issue in the updated repo, please reopen the issue/PR there. Thank you!


schema: switch Object to Descriptor

Signed-off-by: Vincent Batts<EMAIL_ADDRESS>

Bah, you beat me to it, since I had to read about json-schema... 😺
Here is my commit message for anyone who is curious about reasoning here:
    schema: change name of blobObject to descriptor

    Historically, the structure that describes a content target with a
    mediaType, size and digest has been known as a "descriptor". This is to
    differentiate it from actual blobObject when used in context. By
    differentiating the pointer from the target, discussing the role of a
    "descriptor" becomes much clearer.

    Other types, such as "manifestObject", actually inherit fields from the
    descriptor, but there doesn't seem to be a way to represent this in
    JSONSchema at this time.

LGTM

LGTM


How to disable the cropping functionality?

Release notes for version 4.1.1 promises, that the cropping functionality can be disabled, but I wasn't able to figure out how to do it, any hints? The extensionsController is private, so it doesn't look like it can be manipulated from outside and the default set of extensions is always loaded:
private lazy var extensionController: DKImageExtensionController! = {
        return DKImageExtensionController(imagePickerController: self)
    }()

I want to disable the cropping functionality because of #553

Hi, I am also looking for a way to disable the CropViewController. Is it possible? If yes, how?

Sorry but I never got any answer to my question, so I don't know.

@zhangao0086 can you please tell us if we can disable the cropping functionality?

@lawicko @bdobreav In 4.3.1(iOS9 or above), you can try this:
let pickerController = DKImagePickerController()
pickerController.extensionController.disable(extensionType: .photoEditor)

@lawicko @bdobreav In 4.3.1(iOS9 or above), you can try this:
let pickerController = DKImagePickerController()
pickerController.extensionController.disable(extensionType: .photoEditor)

@zhangao0086 extensionController is a private property, so I don't think it's possible 😞

@lawicko @bdobreav In 4.3.1(iOS9 or above), you can try this:
let pickerController = DKImagePickerController()
pickerController.extensionController.disable(extensionType: .photoEditor)

@zhangao0086 extensionController is a private property, so I don't think it's possible 😞

@lawicko The extensionController is public: https://github.com/zhangao0086/DKImagePickerController/commit/2bb1b76657a620c520428c969770829bf87e6f1e#diff-32eeb1475dfb238c2518164b2836a271


fix: remove deprecated ioutil

Replace ioutil with os call.
Upgrade linter.
Update installation instructions in Readme.md.
Use github-actions.

Relates #5


TS generics fails to inherit type once .notation is used

Bug Report

🔎 Search Terms

🕗 Version & Regression Information

This is always the case.
⏯ Playground Link

Playground link with relevant code
💻 Code

// We can quickly address your report if:
//  - The code sample is short. Nearly all TypeScript bugs can be demonstrated in 20-30 lines of code!
//  - It doesn't use external libraries. These are often issues with the type definitions rather than TypeScript bugs.
//  - The incorrectness of the behavior is readily apparent from reading the sample.
// Reports are slower to investigate if:
//  - We have to pare too much extraneous code.
//  - We have to clone a large repo and validate that the problem isn't elsewhere.
//  - The sample is confusing or doesn't clearly demonstrate what's wrong.

🙁 Actual behavior

See playground link...
We want generics to guard model properties so the models correctly define callbacks after API method signature it is used for. At the same time we want to use . notation to modify model properties - aka model(myRequest).withTransform(myTransform) This is very valuable for readability and helps to reduce complexity a lot. However, once .notation is used TS looses type information and requires to provide type explicitly which is quite annoying taking that interfaces and its methods have long names - model<MyVerySmartInterface["myVerySmartMethod"]>(mySmartRequest).withTransform(mySmartTransform)
🙂 Expected behavior
model(myRequest) and model(myRequesty).withTransorm(myTransform) work the same and inherit the type from property they are used for.

The inference setup here is too complex and we end up measuring the wrong variance. You need a variance annotation here:
type ConstructType<out T extends CallableFunction> = (
  ...args: FunctionSignature<T>
) => {};

You need a variance annotation here
out? This will not compile.


How to add gradient fill to shapes?

This is sample slide which I'm trying to export using PptxGenJS

How to add gradient fill to shapes?

Hi @sangramjagtap ,
Thanks for the question/issue.
The library does support gradients as of yet.  I've added this to the enhancement list.

Thanks for the clarification.
On Wed, Jun 21, 2017 at 8:24 AM, Brent Ely<EMAIL_ADDRESS>wrote:

Hi @sangramjagtap https://github.com/sangramjagtap ,
Thanks for the question/issue.
The library does support gradients as of yet. I've added this to the
enhancement list.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/gitbrent/PptxGenJS/issues/102#issuecomment-309948530,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ARCCHKHgUd-ng9TKjjU6ZLkW5dEaB6miks5sGIXngaJpZM4N69Ru
.

--
Thanks & Regards,
Sangram M. Jagtap
Email<EMAIL_ADDRESS><EMAIL_ADDRESS>Phone: +91<PHONE_NUMBER>
Skype: sangramjagtap7

fyi - I've implemented this. I'll open up a PR when I get a chance.
Here's an example showing the fill on a slide master as the background.
    pptx.defineSlideMaster( {
	title: 'TITLE_SLIDE',
	bkgd:   { fill: {type:'gradient', stops: [{ pos: 0, color:'C1F15E' }, { pos: 62, color:'90BA3F' }, { pos: 100, color:'7FA03E'}],
			 linearAngle: 90, linearScaled: false}},
	objects: [
	    { 'image':{x:0,y:0,w:"100%", h:"100%", path: 'bee-background.png',
		       sizing: {type: 'cover', x:0, y:0, w:"100%", h:"100%"}}},
	    { 'rect': {x:"50%", y:0, w:'41%', h:"90%", fill:befDefaults.white,
		       line:befDefaults.darkGreen, lineSize:1}},
	    { 'rect': {x:"51%", y:0, w:'39%', h:"30%", fill:befDefaults.gray,
		       line:'000000', lineSize:0}},
	    { 'line': {x:"51%", y:"88%", w:'39%',line:befDefaults.green,
		       lineSize:6}},
	    { 'image': { x:"70%", y:"60%", w:2.1, h:2.1, path:'bee-right.png' } }
	]
    });

The way it's implemented, it works on both slide masters and also slide shapes that currently support the 'fill' option, e.g. images and text.

@gitbrent  you open to a PR on this? if so, anything you're looking for in particular in a PR?

Hi @pstoll,
Absolutely, PR's are always welcome.  I'll take a look.

Hi @pstoll !
You said you implemented this and wanted to open PR. Unfortunately still no PR here 😢.
Do you want some help ? We could try to open the PR with you if you want because we need this feature too 😄
Have a great day !

Any news about that ?

Sorry, lost track of this. Let me see if I can dig this up.

Thanks, and so ? :D

Hi @pstoll,
Do you have any great news about a PR for gradient background ?

Hello @pstoll,
Any update ? This would be helpful for my app :)

The same, need to set gradient to slides

Hi All,
It appears Perry hasn't been on GitHub for awhile and the clone he made of the repo was never patched for gradient support.
As the community is interested in this, i've tagged it for triage so i can scope what needs to be coded to support this functionality. I'll circle back after 3.0 is released (soon!).

Hi,
Are there any news? Gradient is still not working :(
Thanks

I have an almost complete gradient implementation that I'll submit a PR for. It's functional and supports linear, radial, rectangular, and path gradients.
Still cleaning up some of the code before I create a PR.

@ReimaFrgos hey, any news on this ? I saw your branch https://github.com/ReimaFrgos/PptxGenJS/tree/92+103-AddGradientSupport there is nothing on it yet, do you need a hand ?

@ReimaFrgos hey, any news on this ? I saw your branch https://github.com/ReimaFrgos/PptxGenJS/tree/92+103-AddGradientSupport there is nothing on it yet, do you need a hand ?

@ReimaFrgos @hilnius I have a partial solution, I would like to help with the issue

@ReimaFrgos @hilnius I have a partial solution, I would like to help with the issue

Hello, this is my first github post so please excuse me if I break protocol.  Unless I am mistaken the gradient feature still does not seem to be implemented.  Is it still being worked on and or investigated?
Thank you.

Hi!
@gitbrent @ReimaFrgos do you guys still want to release this feature? If so I'll definitely wait on it, if not I'll work around it!
Thanks :)

I've pushed this PR if people are interested. I have only done one implementation in the demo suite and haven't modified the docs. If anyone want's to contribute to the PR for those then please go ahead. https://github.com/gitbrent/PptxGenJS/pull/1295
This could potentially be used to add gradients to slide backgrounds and object outlines as well.

@sambauers: I noticed your PR related to the gradient solution for demo purposes. Do you happen to have a more complete solution, or have you made further progress on it since then? Any updates would be greatly appreciated!

No, sorry I haven’t touched it since then. I moved in to a different library for PPTX generation.


Hotfix - Fallout VNDPNP

Changes / Comments
Fixed typo in Deception. It said PET instead or PER.
Roll20 Requests
Comments are very helpful for reviewing the code changes. Please answer the relevant questions below in your comment.

[ ] Does the pull request title have the sheet name(s)? Include each sheet name.
[ ] Is this a bug fix?
[ ] Does this add functional enhancements (new features or extending existing features) ?
[ ] Does this add or change functional aesthetics (such as layout or color scheme) ?
[ ] If changing or removing attributes, what steps have you taken, if any, to preserve player data ?
[ ] If this is a new sheet, did you follow Building Character Sheets standards ?

If you do not know English. Please leave a comment in your native language.

Character Sheet Info Roll20 Internal Use only.


Remove time_30 and time_5

After #223 is implemented, the code should be able to handle any arbitrary sample rate. And, once we output each modality into a different NetCDF file, each NetCDF file will have a single sample period. So always refer to time as time and remove any code that talks about time_5 or time_30

This is covered in
https://github.com/openclimatefix/nowcasting_dataset/pull/229


Allow user to select processor affinity

See https://github.com/smith-chem-wisc/MetaMorpheus/issues/250
The issue seems to be more closely related to processor affinity, since the problem is that MetaMorpheus makes other software unusable. The setting should be global, and not task-dependent. The default value should be N-1 where N is the number of available cores.
http://stackoverflow.com/questions/2510593/how-can-i-set-processor-affinity-in-net
In GUI this should be a menu option. In Command Line this should be read from either a config file or as a command line argument.

MaxDegreeOfParallelism is now an option in every task


Add chains to build component plus related scripts

Includes:

New gitops config to install and configure tekton chains
Bash scripts for:

Creating a key-pair for chains signing
Doing some CA cert juggling to make SSL work
Demoing chains with cosign and rekor verification

JIRA: HACBS-38
JIRA: HACBS-47

It's working for me in my local CRC cluster.

An earlier version of this PR is at https://github.com/simonbaird/infra-deployments/pull/1 .

/ok-to-test

I have a few changes coming, so I'll move this back to draft.

I wasn't able to get the gitops change working in a cluster-bot cluster, but I think maybe it's unrelated to this patch. After running hack/preview.sh the Argo CD would not sync and I could see an error like this:
ComparisonError: rpc error: code = Internal desc = Failed to checkout ee855d9155bd6d1830939577b7e4d3e9b1edce3c: `git checkout ...

I try to figure out my cluster bot problem later, but for now I think this can be reviewed again.
The PR addresses suggestions and review comments, so I'll move it out of draft. Notable changes:

Remove the oc adm policy add-scc-to-user anyuid ... command. I've done that in its own commit, see "Modify chains security..."
Tweak the traskrun or pipelinerun name handling in some bash scripts so make it more flexible
Output some more rekor data in the rekor demo

@simonbaird I also see that sync issue but only with your changes, when I do bootstrap and preview in main branch then I do not see that sync issue.

@simonbaird I also see that sync issue but only with your changes, when I do bootstrap and preview in main branch then I do not see that sync issue.

Any idea what might be causing it?

I'll try again with the cluster-bot deploy.

@simonbaird please check #109 , when I rebased your change to that MR I was able to deploy without sync issue. It's simplifying deployment via argocd since it's going directly to preview branch. But still not sure if that sync issue is random or not.

Let's move back to draft.

Thanks @Michkov, I'll try it.

Apart from creation of the signing secret, is there anything that needs to be done with manual cluster access ?

As a follow-up after merging this, we'd need to create the signing secret too in the tekton-chains namespace too, right ?

That's right. You could run hack/chains/create-signing-secret.sh to do it, but I was wondering about the idea of having it added automatically by Argo CD somehow.

Notable changes in this revision:

Pin the chains version to 0.0.8
Rebase on the latest upstream/main

FYI this is likely to be abandoned in favor of https://github.com/hacbs-contract/infra-deployments/pull/1 .
The idea is we (contract team) will be able to collaborate better if we merge things into a working branch that we can pull down and build on top of. When we think it's ready to merge back into main there'll be another PR to review.

https://github.com/hacbs-contract/infra-deployments/pull/1 is merged now to the new 'contract-devel' branch FYI.
In the future there'll me a new PR to merge that branch to main which will include a version of this change. Abandoning this PR now.

Thanks for the reviews and suggestions. Improvements based on the CA certs, using external registries like quay.io, signing secret management, improved demos, clusterbot fixes, etc should be visible as PRs over at https://github.com/hacbs-contract/infra-deployments/pulls .


Avoid redefining decompositions for non-parametric gates

What is the expected enhancement?
The unroller pass depends on decompositions that are defined per gate, and expands those gates according to those decomposition rules.
For gates such as crz, cu1, cu3, rx, ry, rz, rzz, u1, u2, u3, the decomposition depends on the parameter, and so each gate instance can have its own decomposition.
However, for all other gates, this is redundant and can start to add up. Instead, the decomposition should be defined once, for the class (not each instance).

closing as covered by #3800


Unwanted CSS

I have a bare bones theme setup and am pulling in some CSS using:
{% do assets.addCss('theme://css/style.css') %}
{% block assets deferred %}
      {{ assets.css()|raw }}
 {% endblock %}

On inspecting the page I can see that my CSS is pulled in but so is notices.css, login.css and form-styles.css
I'm not sure at this stage if I need this, so want to remove them. I found out how to do this here: https://discourse.getgrav.org/t/admin-plugin-assets-being-used-on-the-site/10043 but that is via the admin panel. Seems a bit odd that I can't do this in code, perhaps in the YAML file? Is that possible?
Thanks

those are all added by plugins.  Most of those plugins have options to disable built-in CSS.

Hey @studioraygun --
Following up on @rhukster's response, here's one way you might achieve this from the command line.
From the root of your Grav installation:
First, find the files you mentioned, do some crude awking to find the corresponding yaml configuration files for each of those plugins, and copy them to the ./user/config folder so your overrides persist across plugin updates.
find ./user/plugins/ -type f | \
grep -P '(login|form-styles|notices)\.css$' | \
awk -F/ '{print $1"/"$2"/"$3"/"$4"/"$4".yaml"}' | \
xargs cp -t ./user/config/

Then flick the default true values over to false for the built_in_css key in each of those newly copied files.
find ./user/config/ -type f | \
grep -P '(login|form|markdown-notices)\.yaml$' | \
xargs sed -E -i 's/(built_in_css: )true/\1false/g'

Alternatively, if you have yq installed, you could replace the last line with xargs -L1 yq e -i '.built_in_css = false'
Hope this helps. Cheers,
.ig


Runtime support for different camera types

The difference between test and testpro is:
LibSeek::SeekThermal seek(argc == 2 ? argv[1] : "");
and
LibSeek::SeekThermalPro seek(argc == 2 ? argv[1] : "");
It would be nice to be able to declare seek something like:
LibSeek::Seek seek("pro");
So we don't have to write different code for different models.

You have runtime support if you want using polymorphism.
Example with smart pointers:
std::shared_ptr<LibSeek::SeekCam> seek;

if (camtype == "pro")
        seek = std::make_shared<LibSeek::SeekThermalPro>();
else
        seek = std::make_shared<LibSeek::SeekThermal>();

if (!seek->open())
...

Or just on the stack:
LibSeek::SeekCam* seek;
LibSeek::SeekThermalPro seekpro;
LibSeek::SeekThermal seekclassic;

if (camtype == "pro")
        seek = &seekpro;
else
        seek = &seekclassic;

if (!seek->open())

I could add a factory function that does this behind the scenes, but personally I think that would not add any real value, especially since the lib currently only supports two camera types.

Aaaah!  Thanks so much, I spent ages trying to get both of those approaches to work.


Add test_corpus to init

coverage: 44.618% (+2.6%) from 41.973%
when pulling 7b5c28cbe6c38e2dc1f15a43830fdee1630690fe on bact:add-corpus-tests
into 0e8ee98cc057dd612ccd2b3d1c10499de72b82fe on PyThaiNLP:dev.


How can I expand only a particular subdirectory of a zipTree?

Right now, if you have a zip tree like this:
file.zip
├── a
│   └── b
└── c
    ├── d
    └── e

...it is impossible to extract just c.
If I want files d and e to be copied to another folder, I have to copy the entirety of file.zip to a temporary directory, then copy the contents of c to the destination.
Expected Behavior
zipTree should have an option, perhaps root, to specify the folder to be used as the root of the zip tree. If not that, there should be a similar function to achieve the same goal.
Example:
copy {
     from zipTree('file.zip', root: 'c')
     into 'z'
}

Current Behavior
To achieve the same effect as the proposed root option, something like this can be used:
def tempDir = File.createTempFile("gradle-unzip", "")
tempDir.mkdir()
copy {
     from zipTree('file.zip)
     into tempDir
}
copy {
     from new File(tempDir, 'c')
     into 'z'
}

This is much longer than it needs to be, and it requires the entire zip to be unpacked rather than only a small section.
Context
This bug affects me when I'm handling zips of program distributions. I often need only the binaries, or only the source, and there's no way for me to just pull files from file.zip/bin. I need to unpack the whole archive, which sometimes contains a folder with many files and the resulting extraction time can be upwards of 30 seconds.
Note: A majority of this bug was migrated from GRADLE-3025 and there is a related forum post here.

Here's how we solved this.
def subDir = 'my/sub/dir'
copy {
  from zipTree(sourceJar).matching {include "$subDir/**"}
  into targetDir
  eachFile { fcp ->
    fcp.path = fcp.path.replaceFirst("^$subDir", '')
  }
}

I have the same need, so I handle this case like this :
	task unzipWarLib(type: Copy, dependsOn: 'syncLibs') {
		from zipTree(configurations.war[0])
		include 'WEB-INF/lib/**'
		into 'lib'
		eachFile { f ->
			f.path = f.path.replaceFirst('WEB-INF/lib', '')
		}
		includeEmptyDirs false
	}

But it could be very nice to do this with one line.

This works fine. However it fails if I want to include empty directories. For those the path replace does not work, so they end up with the full path e.g. WEB-INF/lib/... Is there a reasonable way to make this work for empty directories?

This is a really awaited feature also for us. I hope it will be implemented.

Please see if #5405 will solve your use case. I think it should handle all of them.

@kenzierocks: For me, your solution looks very promising.

@kenzierocks I may be missing something, but you can filter directly in the copy.
Here's a reproducible build that does what you want (just run gradle assertContainsOnlyC):
apply plugin: 'base'

task generate {
    outputs.dir temporaryDir
    doLast {
        project.delete temporaryDir
        def a = new File(temporaryDir, "a")
        a.mkdirs()
        new File(a, "b").text = "b file"
        def c = new File(temporaryDir, "c")
        c.mkdirs()
        new File(c, "d").text = "d file"
        new File(c, "e").text = "e file"
    }
}

task zip(type: Zip) {
    from(generate)
}

task unzip(type: Sync) {
    dependsOn zip
    from (zipTree(zip.archivePath)) {
        include "c/**"
    }
    into temporaryDir
}

task assertContainsOnlyC {
    dependsOn unzip

    doLast {
        def outputDir = unzip.destinationDir
        assert outputDir.listFiles()*.name == ["c"]
        assert new File(outputDir, "c/d").exists()
        assert new File(outputDir, "c/e").exists()
    }
}

The intent here, which may be unclear from the original post but is visible in the following comments, is to also exclude the c directory from existing: your last two lines should be:
        assert new File(outputDir, "d").exists()
        assert new File(outputDir, "e").exists()

The subTree() can be written in a variety of ways to allows a certain degree of flexibility and reusability. I won't go into those details. The best way I can think of packaging the logic inside a "plugin" to use in Gradle is simply creating a library that depends on the gradleApi(). You have can have a CopySpecUtils class with a static method subTree. Then you can add the library to the classpath dependency inside the buildscript bloc. You then import static the method to be used in your build script. You could also use a plugin that adds the method as an extended property of all Copy task. However, that solution wouldn't so great when using the Kotlin DSL.

As explained by Sterling, the solution to this problem should be ad-hoc. However, the solution only works when includeEmptyDirs is set to false. In the other case, the user needs to be able to write the relative path of the empty directory as well which would be similar to solving https://github.com/gradle/gradle/issues/2940. However, the way forward on this isn't cut and dried as the FileCopyDetails seems strange for a directory, specifically methods from ContentFilterable. The behaviour of those methods would need to be handled properly in a backward manner as users may not expect directories to be passed through eachFile actions.
As a way forward, we will extract a sample to put in the user guide, add a simple coverage test including both empty and non-empty directories. The empty directory test case won't be implemented until https://github.com/gradle/gradle/issues/2940 is handled in some way.

PR https://github.com/gradle/gradle/pull/8494 was created to document how to solve this use case.


Hide Public Chat

How to hide public chat and user list?

Your question isn't clear. Which function you are using? Recording or RTMP? Because in RTMP it's already hide.

on RTMP
yes i look this script for hide
await page.waitForSelector('[id="chat-toggle-button"]');
await page.click('[id="chat-toggle-button"]');
await page.click('button[aria-label="Users and messages toggle"]');
await page.$eval('[class^=navbar]', element => element.style.display = "none");
but it's page unhide, i looking log no error
https://www.youtube.com/watch?v=ETnZ1nwAbRE <== this my last rtmp
any compatible?

OK, make sure that your interface is in English & it isn't overriding language.

yes, of course in english. if failed about overrriding language, this rmtp can't start. i'm check this function
await page.waitForSelector('[aria-label="Listen only"]');
await page.click('[aria-label="Listen only"]', timeout);
and look like running, but on next script i think not running, can you help me? may be i can get your contact.

Ok, I just did quick test from my side. It's working as expected. Just make sure that the browser language is English. If you want to support other language then you can modify code.

no, i'm only use english
can i get your contact for collaboration about this case

You can reach me<EMAIL_ADDRESS>

what nodejs Version? i'm using 12
can you help me check my environment. i can provide teamviewer


Announcements: Escape/Convert HTML

John Peter is now posting announcements in HTML (see sample). It'd better if the content can be stripped or converted to Discord-supported Markdown (only bold, italics, strikethrough, and underline are supported? so links have to be a different case from regular MD conversion)
https://support.discord.com/hc/en-us/articles/210298617-Markdown-Text-101-Chat-Formatting-Bold-Italic-Underline-

Convert the entire thing to an embed which would let you do links and markdown
https://stackoverflow.com/questions/64527464/clickable-link-inside-message-discord-py

Oh awesome! Yeah that looks ideal too

Discord Embed also has 48 chars higher character limit LOL

This has been finally fixed in #36


add generic Adafruit_Floppy example

re-opening of https://github.com/keirf/greaseweazle/pull/140 without the debugging stuff! (github autoclosed the last one when switching out branches)
requested changes will be made in this PR

Thanks for these patches! I will have a number of comments, and also I need to formulate a position on third party firmwares, a situation which simply hasn't arisen in the past!
I suppose the first question is: How do you propose to package and sell these (kits, assembled, DIY project for the adafruit blog, ...). Will it be a "Greaseweazle", or a different name (I'm ambivalent on this by the way, in some senses it is a Greaseweazle, in others it's not). I am happy to discuss any of that here, in PR or issues, or by email. Especially if it carries the Greaseweazle name, I'm concerned about quality, particularly accuracy of flux handling in the firmware. Eg. 20MHz precision is okay, but gathering flux in a software loop is potentially inaccurate, for example dropping timer ticks. RP2040 for sure must be able to do better with its PIO, right? (Right? Actually I googled for examples of this rather obvious timer-capture type behaviour and only found aggressive Pi-fanboy responses. So perhaps it can be done, or perhaps not, or perhaps yes but it's very hard).
Regarding these specific tools patches, some initial feedback:
The debugging changes belong in a separate PR, or at least in a completely separate patch. I don't know if I want them as is and they get in the way of the other functional changes.
Changes to score_port(): A brand new firmware should be able to advertise solely on manufacturer/product/serial strings. The VID/PID stuff is for supporting really old Greaseweazle bootloaders. I'd rather not trigger on everything in the Pi and Adafruit universes.
Actually at the end of the day, a slight tweak to score_port() and to the product name list in info.py is probably what this all boils down to. Perhaps also rejecting (or differently handling) these devices in update.py also. So this PR ought to be pretty tiny!

The conclusion is: Yes, in principle. It mostly depends on acceptance of a new brand or Greaseweazle submodel into the project, which is more a mix of non-technical and firmware-technical questions than any problem with the required trivial tools patches.

Here's an example that would be readily acceptable to me (specific names and strings here are just examples!):
"Adafruit Floppy Interface [....] supported by Greaseweazle tools."
Device USB strings:
Manufacturer: "Adafruit"
Product: "Floppy Interface"
Serial: Up to you, could be existing GWxxxxxx format, or your own, or none at all. But a serial based off an MCU serial is a nice to have.
This avoids any confusion with Greaseweazle devices of my own design with firmware under my control.

OK here are some answers!

we would not call any hardware or project "GreaseWeazle" - that's your hardware / project.  the hardware we do, will be called something like "Adafruit Floppy Feather" or "Adafruit Floppy Friend" or something similar (let me know any feedback on that as needed too). we would use greaseweazle as one of the softwares to use to transfer data from the actual diskettes. the hardware will likely support both 34pin IDC, 26 pin FPC, and 20p disk ][ hardware, ideally the PCB will be 💾 shaped ;)
regarding accuracy, yeah we think we can get 20~30MHz timing from both SAMD51 and RP2040 hardware just bitbanging the GPIO and incrementing a counter. counts are about 25, 60, and 85 so there's a little leeway while allowing for longer pulses. eventually we may add capture peripheral support and/or PIO. it ought to be possible, we just haven't sat down to try it yet! we're happy to tell folks that the hardware is unofficial and that folks should try official hardware if they're having difficulties reading a particular diskette. if anybody opens an issue asking for help/support with Adafruit_Floppy built hardware, you can ask them to re-open it in the Adafruit_Floppy repo and i'll take care of it the best i can.
we've removed the debugging stuffs
im going to look into the USB strings detection method. since the USB code is generated from Arduino, we cant change serial number (its going to be chips internal unique ID), manufacturer, VID, or PID. but i do see a function to set the descriptor string, hopefully its accessible, and will update this PR when thats tested!

@keirf ok theres no guaranteed way in arduino to change the USB descriptor strings and make sure pyserial sees them so going to VID/PID lock it for now! will revisit if we come up with something :) this can be reviewed again

Sounds fine to me. Will the hardware support more protocols than Greaseweazle then? (eg multiple firmwares)
The main issues with the software counter as-is are: unknown exact tick frequency (except by empirical inspection), and by counting from zero each time you potentially drop "ticks" while you're outside the tight poll loop. It would be a big improvement even if you could rely on a system timer register, ticking at a known rate, and read that on exit of the tight poll loop, and record the delta. Something like: delta = current - prev; prev = current;. No dropped ticks. Known frequency. Still not as good as a timer peripheral triggering on the input pin, but as good as it can get for GPIO.
Cool thanks
VID/PID is sufficient if it's for this hardware project specifically. So 239a:8002 is I suppose good as that's Adafruit VID and you will have chosen a fresh PID (and you must have some way of specifying it as it's not an MCU manufacturer or library default?) Whereas 2e8a:000a is generic Pi Pico. Can you not modify the Pico's advertised VID/PID?

Regarding serial, it doesn't really matter that much: I use it to find the same Greaseweazle when I reset the device into (or out of) firmware update mode. But you probably won't use my update mechanism, so there will be no mode switching, and keying off serial is not necessary.

more replies :)

yes! one nice thing about the bootloader is you can 'double click' to launch a bootloader disk drive, so folks can drag on different firmware. for example, one could turn it into a MIDI device so you can 'play sounds' on disk drives
its a good idea, we'll almost certainly get there, as every capture peripheral is different. you can get away with a lot when a chip runs at 200MHz and has 256K of SRAM :)
correct - you cannot change the VID/PID of arduino-programmed boards, it is fixed in the IDE, so these are arduino-defined PIDs. there is a way to get the USB descriptor strings in more detail, so that we could specify only these boards, programmed with this arduino sketch - but not in a cross platform way via pyserial! its' just not exposed to python - in windows for example, pyserial reports the manufacturer as Microsoft because the driver for windows 10 is the generic CDC one published by microsoft. we did find a way to do this cross platform and made it into a library https://github.com/adafruit/Adafruit_Board_Toolkit but it would add a dependency. if you're ok with the dependency i can add that so its not just vid/pid but i dug thru everything in the port structure and nothing was identifyable.

Ah yes I forgot Microsoft hides the real strings for COM devices. Greaseweazle is relying on VID:PID for Windows. But I'm not going to put any (more) non-specific VID:PID pairs into the tools. At the end of the day, users can still use the tools by explicitly naming the COM port (--device COM3 or whatever). Indeed, that given, the tools probably work as is without any patching at all, albeit you won't get a nice informative name out of gw info. Regarding those names: your original vanilla/default name was fine, in fact better than the new one.

oh i didnt realize that --device was available, its not in the help text, want me to add it there?

It's actually an argument to every gw subcommand and it is in their respective help texts (eg gw read -h). Possibly it should be pulled out into the wrapper script but it would mean more fighting with the argument parser. Also I may add subcommands in future which don't use a device.
The subcommand help text is not perfect. gw read ought to at least mention existence of -h I suppose!

Adafruit-board-library looks interesting. But is there a clean list_ports interface to it which doesn't filter on CircuitPython names?

i think the thing is i saw 'device name' and didnt equate that with 'COM / Serial port' i could also add a short amount of text. or just document it (--device didnt appear in any documentation we saw either lol). so up to you if you want me to keep the VID/PID stuff or remove it.
we could add it, it was designed to solve this problem for circuitpython boards, but its under active development.

I won't take generic Arduino VID:PID pairs. The only other avenue there would be adafruit-board-library therefore I think.
Yes, "COM/serial port" is much better. I can fix that. Greaseweazle documentation is really bad I'm afraid, not least because it's missing a comprehensive command reference. That and some use-case walkthroughs are badly needed.

In terms of your patches, do you just want me to patch gw info for your model=8, submodel=0 for now? Or are device names still TBD?

ok done! ill def document some use cases as im imaging some disks
is there a way to grab fluxes in like SCP format while also verifying format like MFM? e.g. grab flux, check the format is what you expect (18/18 MFM sectors) and then save in SCP? we couldnt figure out how to do it. if not, would you take a PR to do that?
(store is i am able to read a disk MFM into img file just fine, but when i grab the SCP, hxc says some sectors are corrupt, not sure if its hxc or bad reads or what...so having sector checks could help)

yes please keep this patch for the generic 8 0 naming, i can get more specific later!

Yes you can now gw read --format=ibm.1440 a.img. This is as of the latest tools release, so very new!

ok awesome, thanks, i will try it! :) i think this PR is minimal and complete now

Ok manually applied the 8 0 naming. This PR is done. Anything else: new issue/pr.

Oh one thing to say on the verifying as dumping to raw: Currently the track gets decoded, verified, and reconstructed. So the dump is actually a perfect reconstruction of the track. Possibly that is not what is wanted, and a raw dump would be preferred.... At least I should probably give the option to tee a raw dump as well as the processed dump?

For example: gw read --format=ibm.1440 a.scp
a.scp will contain the dumped logical sector contents reframed into perfect tracks, as if gw were writing a disk from an IMG file. Currently no way for a.scp to contain the actual dumped imperfect raw flux, if --format is specified.

hiya yah the second thing is what we mean: running gw read --format=ibm.1440 a.scp would mean the raw flux timing is saved, unprocessed, as SCP. and, during capture, we try to verify/decode the format so that we can retry a few times or warn folks that the data is not completely valid. maybe a new arg calld like --check-format or --verify-format
i can open a new issue and/or just do this as a PR -  just let me know ! :)

In kryoflux command line, you would do something like DTC.exe -f"c:\game\track" -i0 -i5
This tells KF to dump raw tracks (-i0), but verify as amigados(-i5).  I could add an additional -f for the adf file.
It will all start to get messy if you have a tri formatted disk Amiga / ST / PC.  I'm not sure if there is a possibility of reading flux in, auto verifying against a set of known disk layouts on each track.... Messy?
As the files are each track and side... Knowing you have a bad dump track and or side, is a simple delete said file, clean disk redump specific track and side.
I can see a case for a repair for scp type files, where tracks / sides are deleted and new rereads are merged into the scp file.

This is now supported via new --raw option to gw read. This will respect the --format for verification purposes, but all raw flux reads for the track (across retries) will be concatenated into the raw output file. Of course the output file must be a raw type (SCP, HFE, Kryoflux).

incredible! ill try it out shortly.


docs: add logos of all supported languages to home page

We should add the logos of all supported languages to our front page (and readme?)
Proposed by @arun-gupta

I'll get the logos and drop them into the docs/src/images folder. Then we can figure out where to place them.

Done. See PR #919


mitigation for immediate-failure injection attacks

Implements mitigation for the simplest class of injection attacks: attacks which cause an immediate failure, and that can be performed by injecting a single packet without keeping state.
Mitigation strategy is to simply ignore malformed packets, e.g, those that have no payload, bad frames or ACKs for unsent packets. For packets that should cause failure if received from a legitimate peer, such as version negotiation with no supported versions or CONNECTION_CLOSE frame, the connection closes if no packets are received after a timeout.
Mitigation is currently turned off by default, but can be turned on by assigning a positive value to the AttackTimeout field of a Config.

Codecov Report

Merging #2062 into master will increase coverage by 0.11%.
The diff coverage is 95.77%.

@@            Coverage Diff             @@
##           master    #2062      +/-   ##
==========================================
+ Coverage   85.53%   85.63%   +0.11%
==========================================
  Files          99       99
  Lines        7206     7273      +67
==========================================
+ Hits         6163     6228      +65
- Misses        762      764       +2
  Partials      281      281

Impacted Files
Coverage Δ

session.go
74.97% <100%> (+1.76%)
:arrow_up:

server.go
83.14% <66.67%> (-0.3%)
:arrow_down:

client.go
81.61% <93.75%> (+0.27%)
:arrow_up:

Continue to review full report at Codecov.

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

Hi Ben, Lucas, and Marten,
Thank you for your comments! I believe I have addressed all of them.
Most importantly, I overhauled the timeout logic, so that it better integrates with the runLoop structure, though feedback on it would be great as I'm not 100% confident that it fully integrates properly.
Though the default attack timeout is set to 0, the full suite of tests passes when the default is non-zero.
I also ran fuzz testing (I haven't committed the infrastructure) that sets up the MITM attack like the tests in integrationtests/self and injects correctly encrypted Initial packets with fuzzed payloads, and no crashes were found.
Please take a look when you get the chance - I appreciate your feedback!
-Tatiana

LGTM, but I'd like @marten-seemann to take another look before merging.


Fuchsia MessageLoop needs to re-arm a timer instead of queue a new task on WakeUp()

Right now whenever the Fuchsia MessageLoopImpl has WakeUp() called, we post a new delayed task. This can result in many unnecessary tasks being posted which degarde performance.
The other platforms re-arm a timer on WakeUp for the task queue to be flushed. The original attempt at fixing this was unsuccessful because async::Task::Cancel() is not threadsafe.
See https://github.com/flutter/engine/pull/16568 for the revert.

@arbreng Is this still an issue with the new embedder?

@kf6gpe yes, this is still an issue with the new embedder (and blocks us from moving to the C API completely)


Advanced workflow for complete e2e test

What this PR does / why we need it:
This workflow is needed when we want to run full e2e tests for the PR before merging.
Additional information
We have to add label pr/run-all-e2e-test to run all the e2e tests on the PR.
Special notes for your reviewer
I tried many different implementations-

Using flag /test-full-e2e to run e2e test but it failed as the event was triggered but was not updating in checks in the PR.
Using flag /test-full-e2e to create a workflow to add label to PR by Github bot and then running the e2e tests but it failed becoz a GitHub workflow cannot trigger another workflow.

pr/run-all-e2e-test

@khannakshat7 Can we add this info to CONTRIBUTING.md ?

Hi @khannakshat7, thanks for the changes. If you are still interested, then can you please convert this to PR?

Hi @shivi28, I have converted this to PR. Thanks


Group on first letter of file.name with index on top?

Thanks for creating this plugin. I use it to list music video's I frequently play.
A good addition would be to group the list based on the first letter of the name (or part (year, month, day) of ctime or mtime for example. And that links at the top are shown with the grouping value.
For name that would be something like 0...9...A...Z. So you can make jumps to the part you want. As the sorting works this might be feasible too?

Grouping will be coming as part of the revamped query syntax ("pipeline queries"), which should include this use case. For the index at the top, is this to make traversing the big list of videos easier by clicking on the letter you want?

Grouping will be coming as part of the revamped query syntax ("pipeline queries"), which should include this use case. For the index at the top, is this to make traversing the big list of videos easier by clicking on the letter you want?

Yes, my use-case was indeed to be able to navigate a big list of videos by clicking on the letters.

Generating an index is possible in DataviewJS and I don't see this coming to the Dataview query language any time soon; closing this for now.