How do we plan to support promo-rules and special prices

I believe we can get special_price from M2API - and it's the result of catalog promotion rules applied; but what to do with cart rules? It seems we need to send out each cart to Magento and calculate the prices there which does make no sense as we're trying to be platform agnostic :D

https://github.com/DivanteLtd/vue-storefront/wiki/UX-User-Stories-for-offline - it's the place to collect all this kind of information

I'm not familiar with M2 API and how cart rules works but I assume there are no endpoints to get ones (and I couldn't find it here http://devdocs.magento.com/guides/v2.0/rest/list.html, only some 3rd party solutions like https://github.com/bangerkuwranger/Magento-2-Coupon-Code-API).
I don't know how many types of cart rules are over there in M2 but maybe we need some restrictions for this types or add cart rules via  vue-storefront admin panel (like static pages) which seems like the easiest solution but adds another layer of config ;/

Of course we can synchronize coupon codes - and yes it's the simplest and quite powerfull solution

Then we can create a proxy web method - cart and user data given at the input and calculated cart on the other end. Doing so we can calculate the prices online regarding all the promo rules you can have, no matter which backend is in use. Of course will work only while online which I think is not such big deal


docs: 📚 Autocompletion in HTML

Pull Request
📖 Description
This PR adds information about how to use VSCode autocompletion for projects that are using our components.
🎫 Issues
Closes #44.
👩💻 Reviewer Notes
Just have a look at the new README.md for components
📑 Test Plan

Create a new, empty project (e.g. via npm init).
Install our components package npm install --save @synergy-design-system/components@main).
Proceed like described in the new README.md.
Create a new file index.html
You should now get autocomplete when typing <syn for syn-button and syn-input

✅ Checklist

[x] I have tested my changes manually.
[ ] I have added automatic tests for my changes (unit- and visual regression tests).
[x] I have updated the project documentation to reflect my changes (e.g. CHANGELOG, Storybook, ...).
[x] I have made sure to follow the projects coding and contribution guides.
[x] I have made sure that the bundle size has changed appropriately.
[x] I have validated that there are no accessibility errors.
[ ] I have used design tokens instead of fix css values

I would expect that to see that in Storybook, not in the README.

I would expect that to see that in Storybook, not in the README. From my perspective Storybook is the single source of truth how to work with our components. Of course some basic installation might make sense, but I would more link directly to Storybook.

Documentation is also included in Storybook, as seen in https://sickdesignsystem.github.io/synergy/?path=/docs/packages-components--docs. This will be further extended when we split up the documentation of the packages (e.g. Components/Install, Components/Dev, Components/Testing)

Got it. Can we change the order that the packages are before components?
https://storybook.js.org/docs/react/writing-stories/naming-components-and-hierarchy#sorting-stories
Or would you do that in another ticket?

Got it. Can we change the order that the packages are before components?
https://storybook.js.org/docs/react/writing-stories/naming-components-and-hierarchy#sorting-stories
Or would you do that in another ticket?

I would opt to create the whole documentation tickets that we need for the MVP and proceed from there, honestly. I also think we will have much more documentation in Storybook in the future (e.g. adding an Icon overview like we had in the old version, adding color swatches and the like), which would give us some more hirarchy.

See https://github.com/SickDesignSystem/synergy/issues/140 for a follow up ticket on this.


Get nil response when trying to set Lua DynamicMetaData

Title:
Lua filter failing to set DynamicMetaData
Description:
I am trying to setup a redirect if jwt auth fails with Lua functions, and I need the original URI to pass as a callback after authentication. Here the is Lua filter config:
 - name: envoy.filters.http.lua
   typed_config:
   "@type": type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua
      default_source_code:
        inline_string: |
          function envoy_on_request(request_handle)
            local headers = request_handle:headers()
            request_handle:streamInfo():dynamicMetadata():set("envoy.filters.http.lua", "request.info", {
              uri = headers:get("referer"),
            })
          end

          function envoy_on_response(response_handle)
            -- Get the response status code
            local code = response_handle:headers():get(":status")

            -- Check if the status code is 401
            if code == "401" then
              -- Get the original request URI
              local meta = response_handle:streamInfo():dynamicMetadata():get("envoy.filters.http.lua")["request.info"]

              -- Set the response status code to 307 (Temporary Redirect)
              response_handle:headers():replace(":status", "307")

              -- Set the location header to the login page with the original URI as a callback
              response_handle:headers():add("location", "https://api/Auth/1.0/SSO?callback="..meta.uri)

              -- End the response
              response_handle:headers():add("x-envoy-internal", "true")
              response_handle:headers():add(":path", "/")
              response_handle:headers():add(":method", "GET")
            end
          end

And here is the envoy error:
[2023-01-27 22:32:08.769][14][debug][http] [source/common/http/conn_manager_impl.cc:867] [C1][S5800819419011222572] request headers complete (end_stream=true):
':authority', 'registry.us'
':path', '/favicon.ico'
':method', 'GET'
'connection', 'keep-alive'
'sec-ch-ua', '" Not A;Brand";v="99", "Chromium";v="102", "Microsoft Edge";v="102"'
'sec-ch-ua-mobile', '?0'
'user-agent', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36 Edg/102.0.1245.30'
'sec-ch-ua-platform', '"Linux"'
'accept', 'image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8'
'sec-fetch-site', 'same-origin'
'sec-fetch-mode', 'no-cors'
'sec-fetch-dest', 'image'
'referer', 'https://registry.us/'
'accept-encoding', 'gzip, deflate, br'
'accept-language', 'en-US,en;q=0.9'

[2023-01-27 22:32:08.769][14][debug][http] [source/common/http/filter_manager.cc:841] [C1][S5800819419011222572] request end stream
[2023-01-27 22:32:08.769][14][debug][jwt] [source/extensions/filters/http/jwt_authn/filter.cc:158] Called Filter : setDecoderFilterCallbacks
[2023-01-27 22:32:08.769][14][debug][jwt] [source/extensions/filters/http/jwt_authn/filter.cc:53] Called Filter : decodeHeaders
[2023-01-27 22:32:08.769][14][debug][jwt] [source/extensions/filters/http/jwt_authn/matcher.cc:70] Prefix requirement '/' matched.
[2023-01-27 22:32:08.769][14][debug][jwt] [source/extensions/filters/http/jwt_authn/extractor.cc:249] extract authorizationBearer
[2023-01-27 22:32:08.769][14][debug][jwt] [source/extensions/filters/http/jwt_authn/authenticator.cc:133] auth_api: JWT authentication starts (allow_failed=false), tokens size=0
[2023-01-27 22:32:08.769][14][debug][jwt] [source/extensions/filters/http/jwt_authn/authenticator.cc:315] auth_api: JWT token verification completed with: Jwt is missing
[2023-01-27 22:32:08.769][14][debug][jwt] [source/extensions/filters/http/jwt_authn/filter.cc:110] Jwt authentication completed with: Jwt is missing
[2023-01-27 22:32:08.769][14][debug][http] [source/common/http/filter_manager.cc:953] [C1][S5800819419011222572] Sending local reply with details jwt_authn_access_denied{Jwt_is_missing}
[2023-01-27 22:32:08.769][14][trace][misc] [source/common/event/scaled_range_timer_manager_impl.cc:60] enableTimer called on 0x4412ff37b280 for 3600000ms, min is 3600000ms
[2023-01-27 22:32:08.769][14][trace][lua] [./source/extensions/filters/common/lua/lua.h:149] creating N5Envoy10Extensions11HttpFilters3Lua19StreamHandleWrapperE at 0x7f3bb77c5900
[2023-01-27 22:32:08.769][14][trace][lua] [./source/extensions/filters/common/lua/lua.h:149] creating N5Envoy10Extensions11HttpFilters3Lua16HeaderMapWrapperE at 0x7f3bb77c5ab0
[2023-01-27 22:32:08.769][14][trace][lua] [./source/extensions/filters/common/lua/lua.h:149] creating N5Envoy10Extensions11HttpFilters3Lua17StreamInfoWrapperE at 0x7f3bb77c5b68
[2023-01-27 22:32:08.769][14][trace][lua] [./source/extensions/filters/common/lua/lua.h:149] creating N5Envoy10Extensions11HttpFilters3Lua25DynamicMetadataMapWrapperE at 0x7f3bb77c5bf0
[2023-01-27 22:32:08.769][14][error][lua] [source/extensions/filters/http/lua/lua_filter.cc:801] script log: [string "function envoy_on_request(request_handle)..."]:15: attempt to index a nil value
[2023-01-27 22:32:08.769][14][trace][lua] [./source/extensions/filters/common/lua/lua.h:210] marking dead N5Envoy10Extensions11HttpFilters3Lua19StreamHandleWrapperE at 0x7f3bb77c5900
[2023-01-27 22:32:08.769][14][trace][lua] [./source/extensions/filters/common/lua/lua.h:210] marking dead N5Envoy10Extensions11HttpFilters3Lua16HeaderMapWrapperE at 0x7f3bb77c5ab0
[2023-01-27 22:32:08.769][14][trace][lua] [./source/extensions/filters/common/lua/lua.h:210] marking dead N5Envoy10Extensions11HttpFilters3Lua17StreamInfoWrapperE at 0x7f3bb77c5b68
[2023-01-27 22:32:08.769][14][trace][lua] [./source/extensions/filters/common/lua/lua.h:210] marking dead N5Envoy10Extensions11HttpFilters3Lua25DynamicMetadataMapWrapperE at 0x7f3bb77c5bf0

script log: [string "function envoy_on_request(request_handle)..."]:15: attempt to index a nil value

Using Envoy docker container envoyproxy/envoy:v1.24-latest

Can you try to simplify the script down to the minimum that reproduces the error, to narrow down exactly which table is nil? It's not clear to me from the error which value is nil.


onCurrentPageChanged with ID and index

I would love have a onPageChanged - Callback.
I would expect it to look something like this:
onCurrentPageChanged: (newPageId, index) {
// ... do some stuff here
}

This came up when I wanted to build in tracking for the bottomsheet. I had this method before:
  static void _handleTracking({
    required BuildContext context,
    required List<UIBottomSheetPageModel> pages,
    required int currentIndex,
    required ValueNotifier<int> pageIndexNotifier,
  }) {
    // Since the views inside the bottom sheet are not actual routes,
    // we need to track the navigation manually.

    final firstPage = pages[0];

    // Track initial page
    context.appDelegate.trackNavigation(
      navigationType: UINavigationType.push,
      routeName: firstPage.trackingName,
      trackWithSegment: true,
    );

    // Track navigation inside the modal sheet
    pageIndexNotifier.addListener(() {
      final newIndex = pageIndexNotifier.value;
      final newPage = pages[newIndex];

      context.appDelegate.trackNavigation(
        navigationType: newIndex > currentIndex
            ? UINavigationType.push
            : UINavigationType.pop,
        routeName: newPage.trackingName,
        trackWithSegment: true,
      );
      currentIndex = newIndex;
    });
  }

But this will obviously not work when dealing with dynamic routes or even when pushing or popping. It will only work if all pages are constant.
I guess I could get hacky here and still manage to make it work, but everything would be solved, by a simply onCurrentPageChanged - callback (getting the id of the new page and index would be crucial here).

Brilliant idea. Would you consider opening a PR?

I wish I could, but I don't quite understand where exactly I have to call it ..  I will give it another try later this week.

@ulusoyca  I looked into it but wasn't able to get it properly done. When looking into it, I think instead of just passing the id, passing the whole page would be even better for more flexibility?

@MbIXjkee is currently managing the work that will add internal navigation system to the modal. Adding a navigation observer will solve this. Expected to be released in the next release.

"interntal navigation observer" sounds perfect! @MbIXjkee 🫶

Correction: It is a long work and expected in 0.9.x https://github.com/woltapp/wolt_modal_sheet/pull/271


Replace Mendix App with Mendix Developer App

We plan to eventually replace the Mendix App with a new app for collaboration. Since this new app will no longer contain any functionality to test hybrid apps (and this features seems broken in the existing app), we want to point Makers to our Mendix Developer App instead. This update changes the documentation accordingly.

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.

Thanks very much @jdiehl . I think the Mendix Developer App might have been under-documented in the past. It looks like this PR fills in some of those gaps.
I'll look through and see if further changes -- such as screenshot updates -- are needed.
One question; I see the Mendix Developer App does use PhoneGap to test hybrid apps. Does this functionality still work?

I have tested the App on Android and iOS with a Hybrid Mobile app built in Mendix 8 and both worked. On the other hand, I could not get the Mendix App to work at all (it always crashes when I scan a QR code). Therefore, I believe it is best to point our customers to the other app.

@ConnorLand I have rebased this pull request on the new release


error: Received invalid pass data

I am doing integration Add to Wallet feature in my React native App. I have installed the package and while testing on device, getting an error
error: Received invalid pass data
Can I get some help on this? Is there any proper documentation someone share if i am missing something.
Thanks!

Is it a pass you generated yourself? Can you try and find an example pass online and scan that?

hello,
I generated the pass and I was able to make it work.
However, I recently updated my XCode to 11.3.1 and now it seems it doesn't support latest one.
Can you please let me know?
Thanks,
Pratishtha


[hdom] state update doesn't trigger rerender (router-basics)

hi, i've been building a small webapp using the "router-basics" example app as a template. i've replaced many of the events and converted to using enum instead of const to represent events and effects, but otherwise i've stuck to the original app structure.
the event that's called to load the initial app state doesn't result in a re-render even though the state atom itself gets updated. routing and the status bar from the template still update fine, so i'm not sure why my custom events don't work.
i'm triggering the initial load event in the homepage component function body:
/**
 * homepage
 *
 * @param ctx injected context object
 */
export function home(ctx: AppContext) {
    let id = ctx.views.users.deref()![1].id;
    ctx.bus.dispatch(
        ctx.views.users.deref()!.length
            ? [ev.SET_STATUS, [StatusType.SUCCESS, "initial state loaded from cache", true]]
            : [ev.LOAD_INITIAL_STATE, id]);           // <--- dispatching event here

    // -- dereferencing dynamic views here
    let users = ctx.views.users.deref();
    let { lists, activity, tasks } = ctx.views.currentUser.deref();

    return [pageFrame,
      ["main",
          [tile, 'Lists',
            lists.map((m) =>                                   // <-- using dynamic state here
              [list, m.name],
            )],
          [tile, 'Activity',
            activity.map((n) =>                               // <-- using dynamic state here
              [activityItem, n.title, n.kind],
         ....

the data is being loaded asynchronously so i'm not sure if that's the issue. the pre/post-load event handlers looks something like this:
    // INITIAL PAGE LOAD
    // loads current user data for summary on
    [ev.LOAD_INITIAL_STATE]: (_, [__, id]) => ({
        [FX_DISPATCH_ASYNC]: [
          <Event>[
            ev.SET_STATUS,
            [StatusType.INFO, `loading page data...`],
          ],
          <Event>[
            fx.JSON,
            `assets/user-${id}.json`,
            ev.RECEIVE_INITIAL_STATE,
            ev.INITIAL_LOAD_ERROR,
          ],
        ]
    }),
    [ev.RECEIVE_INITIAL_STATE]: (_, [__, json]) => {
        let {messages, ...currentUser} = json;
        return {
            [FX_DISPATCH_NOW]: [
                <Event>[
                  EV_SET_VALUE,
                  ["currentUser", currentUser]
                ],
                <Event>[
                  EV_SET_VALUE,
                  [["messages"], messages]
                ],
                <Event>[
                    ev.SET_STATUS,
                    [StatusType.SUCCESS, "Initial state successfully loaded", true],
                ],
            ],
        }
    },

i also tried to create a Stream from the state Atom, and subscribing updateDOM to that but i can't quite figure out how to get that to work.
any tips are greatly appreciated!!

this issue might be similar to #244, but i don't have too much context on that one

Hi @Korede-TA. When I add your code to the example the LOAD_USER_LIST event has yet to be dispatched. If you're not doing that elsewhere, updating line one of the home function to let id = ctx.views.users.deref()![1]?.id ?? 1; would be a quick way to (maybe) see it working.
I see you have an INITIAL_LOAD_ERROR event. Do you also have this defined in the config to know if you end up in an error state after initial load?
        [ev.INITIAL_LOAD_ERROR]: (_, [__, ___]) => ({
            [FX_DISPATCH_NOW]: [
                <Event>[
                    ev.SET_STATUS,
                    [StatusType.ERROR, `error loading initial data...`],
                ],
            ],
        }),

hey @alexlurvey, thanks for taking a look at this.
i don't think that's the issue. i have some hard-coded initial state so i'm sure id is defined and the LOAD_INITIAL_STATE event work. see the dev tools log:

if i log the ctx object after the event has run, i see all the data i'm expecting. just that the DOM isn't being updated to reflect this. the set-status event from the example works fine and the status bar get's re-rendered, but the events i've written don't seem to trigger a re-render

Discussion from discord chat:


feat(orders): add support for deletion of orders

[x] commit messages are commitizen-friendly
[ ] code is unit tested
[ ] code is integration tested
[ ] public code is documented
[ ] code is reviewed by at least one person
[x] code satisfies linter rules

cc/ @emmenko

@emmenko do I need to add any tests or documentation? Or is it all implicitly tested/documented?

It should be ok. Just make sure to update the documentation when it's released.
grunt doc:publish

Will do. tnx!


optimize: update contributing doc

[ ] I have registered the PR changes.

Ⅰ. Describe what this PR did
update contributing doc
Ⅱ. Does this pull request fix one issue?

Ⅲ. Why don't you add test cases (unit test/integration test)?
Ⅳ. Describe how to verify it
Ⅴ. Special notes for reviews

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

Comparison is base (97b9ad9) 48.99% compared to head (3106035) 49.04%.
 Consider uploading reports for the commit 92e1e1d to get more accurate results

Additional details and impacted files

@@             Coverage Diff              @@
##                2.x    #6181      +/-   ##
============================================
+ Coverage     48.99%   49.04%   +0.05%
- Complexity     4782     4791       +9
============================================
  Files           915      915
  Lines         31865    31865
  Branches       3847     3847
============================================
+ Hits          15611    15628      +17
+ Misses        14692    14676      -16
+ Partials       1562     1561       -1

see 5 files with indirect coverage changes


optimize: change the version to 1.6.2-SNAPSHOT

[ ] I have registered the PR changes.

Ⅰ. Describe what this PR did
Ⅱ. Does this pull request fix one issue?

Ⅲ. Why don't you add test cases (unit test/integration test)?
Ⅳ. Describe how to verify it
Ⅴ. Special notes for reviews

Codecov Report

Merging #5187 (21a8efd) into develop (c866966) will decrease coverage by 0.01%.
The diff coverage is n/a.

@@              Coverage Diff              @@
##             develop    #5187      +/-   ##
=============================================
- Coverage      48.47%   48.45%   -0.02%
+ Complexity      4137     4136       -1
=============================================
  Files            743      743
  Lines          26517    26517
  Branches        3294     3294
=============================================
- Hits           12853    12848       -5
- Misses         12263    12270       +7
+ Partials        1401     1399       -2

Impacted Files
Coverage Δ

.../src/main/java/io/seata/core/protocol/Version.java
7.50% <ø> (ø)

...rage/redis/store/RedisTransactionStoreManager.java
72.06% <0.00%> (-2.09%)
:arrow_down:

.../java/io/seata/spring/util/TCCBeanParserUtils.java
30.64% <0.00%> (-1.62%)
:arrow_down:

...erver/storage/file/session/FileSessionManager.java
48.40% <0.00%> (+0.63%)
:arrow_up:

...n/src/main/java/io/seata/common/util/IdWorker.java
83.33% <0.00%> (+6.25%)
:arrow_up:

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


Add IGListSectionDelegate

Came across this answer today https://stackoverflow.com/a/39015025/2977647. I recalled the discussion we had on #168. I know no one wants to touch #168 again 😂, but I think this might be the better way to enforce compile-time safety.

Well, the answer is for swift, so I'm not sure if it applies to obj-c as well.

@zhubofei can you catch me up on what this would provide?
Sent with GitHawk

@rnystrom This can enforce abstract methods to be implemented. But at the cost of code redundancy. Well, I think I'm gonna close this. delegate = self looks silly.


LUT gridpoint spacing

Added another gridpoint to include both low and high end "cap" values.
Prevents degenerate size 1 grids when the observed range of H2O values is less than the desired H2O grid spacing.

Another good catch - definitely the intention given the ceil, but forgot the +1.  Thanks!


endDate is always resetting, when selecting startDate in custom date range.

I am using custom date range option. The scenario is below:

I am selecting the startDate and endDate from custom date range and applying the changes, it's working fine(for the very first time).
When i am repeating the same step from second time on wards i found that whenever, i am selecting the startDate, it's resetting the endDate always, even though i have endDate value.

My question :
Is there a way, so that, if i will select the startDate the endDate should not be reset automatically, or if there is a value for endDate it should not reset itSelf?

Kindly test with the latest version

selecting a range always starts with start date then end date. You can't select the range backwards


Part load exergy plot implementation

Implemented Exergy plot for part load condition. And fixed some errors in the offdesing simulation of models HP_PC_2IHX, HP_Flash and HP_IC

The other changes look great. Thank you for finding and fixing the bugs in some of the model classes and your contributions in general.
I think the tedious implementation of the same code throughout all model classes points to the fact that a general version of the offdesign_simulation method should be added to the HeatPumpBase class, with each concrete model only implementing the specific differences. This came up before, but we never followed through. I will create another issue for that and tackle it in next week.


torchtyping => jaxtyping

Draft at migrating from torchtyping to jaxtyping. This will fix static type checking.
Some notes:

This will require bumping the minimum Python version to 3.8.
I'm currently using jaxtyping.Shaped[] everywhere, but we should ideally be using jaxtyping.Float[], jaxtyping.Int[], etc.

cc @tancik

Conversion script we used, for posterity: https://gist.github.com/brentyi/21d08fe4e90e0397b9484893cf1b9822

🎊 🎊 🎊 🎊 🎊
cc @patrick-kidger thanks for adding torch support to your library :)

Thank you for the tag! This is really great to see. :)


No longer automatically downloads the files to the Save To location

Catch 2.3 (793) not working it no longer automatically downloads the files to the Save To location. I t puts in the download filename with a webloc extension on both my iMac and MacBook
Make sure to do the following before submitting your issue - thanks!

[x] Make sure you're running the latest release. You can find your version number at the bottom of the Help menu in Catch.
[x] Check the FAQ, your question might be answered there.
[x] Check for an open issue, and please comment on that issue instead of creating a duplicate.

If the feed contains magnet links (which is the default) and you choose not to "open automatically", that's the intended behavior.
What is your workflow? Do you have a good reason to require .torrent files specifically, even tho it's not recommended? Then you could switch to a feed with .torrent files instead of magnets (which would be the "mirror URLs (legacy)" option if you're using ShowRSS). If not, I'd recommend turning on "open automatically".
Please reply if these suggestions don't work for you, closing in the meanwhile.
P.S. Sorry, I didn't get notifications for this issue :/


Ultrasonic Analyzer App

Dear idexus,
Please forgive me for being bold contacting you this way but I don't know another way to do it for free (through LinkedIn?).
I am considering to purchase your Ultrasonic Analyzer iOS app.
Can you confirm that the internal microphone in my iPhone 15 is good enough (roll-off ok?) to capture up to 50kHz ultrasounds?
With kind regards,
Sébastien

Hello,
For the analysis of sounds with frequencies up to 50kHz, you need to use an external microphone.

Thank you Pawel! Would you recommend a one in particular ?


SamFormer model

Add samformer model https://arxiv.org/abs/2402.10198
cc @romilbert

@romilbert this implementation differs, I believe, from yours in that I am using the mu and sigma from the instance normalization as inputs to the model as well. This serves the purpose of RevIN + non-stationary transformer and was first done in the DeepAR paper, which as far as I remember the RevIN or the SAMFromer paper does not mention....
Apart from that the output head is an independent distribution head instead of a point forecasting head...

Hi @kashif, thanks for your interest in SAMformer. I appreciate your feedback. Incorporating mu and sigma from RevIN as additional inputs to the model is an interesting idea (similar to the DeepAR paper as you said, which we did reference in SAMformer paper). However, I have tried incorporating them into the transformer in different ways, and it did not improve our current results.

@romilbert that is because, I think, you are using globally standardized data while here the data continues to be in the original magnitude, and thus in your setup the use of the summary statistics do not help as they are more or less 0 and 1...


WIP: Persistence

Hi Andreas,
hier mal ein draft PR. Es fehlen vor allem noch Kommentare und ein bisschen review.
Aber es sollte nun mit einem JS wie diesem im Browser funktionieren, wenn man mit einem modifizierten "compileWasm.ps1" baut und die DBs als Uint8Array bereitstellt.
`importScripts('/assets/sql-wasm.js','/assets/wasm_exec.js');
initSqlJs({locateFile: file => /assets/${file}}).then((SQL) => {
global._go_sqlite = SQL;
const go = new Go();
WebAssembly.instantiateStreaming(fetch("/assets/libhelper.wasm"), go.importObject).then((result) => {
go.run(result.instance);
});
});
var merged = mergeJs(masterData, slaveData, "merged.jwlibrary");
`
LG Rouven

Thanks for the PR! :)
I have a few thoughts about the approach of having multiple FS implementations:
I‘m thinking about if it would make more sense to completely remove all the file-handling within Database.go and let it just handle the actual DB part: So, for example, the import/export function would look something like this:
func (db *Database) ImportJWLBackup(sql *sql.DB) error
func (db *Database) ExportJWLBackup(sql *sql.DB) error

Another „Persistence“ package (or some other name) would handle things like unzipping, opening the SQLite DB etc. In this package we could have different FS implementations: So the normal one and the in-memory. The import/export process would then be handled by the persistance-package which actually uses the Database.go to run import/export. This would also make it easier to extend go-jwlm with another FS in the future. And it feels way clearer as one package only does one thing. If I find the time I might open a proof-of-concept PR to illustrate it a bit using the current FS implementation.
Another question I had: Is there a specific reason why you implemented the in-memory FS on your own instead of using something like https://github.com/blang/vfs? I don‘t necessarily have a preference for either, I was just wondering 😊
Either way: Nice work! I think it is good to think about this, so go-jwlm can be used with WASM in the future. This is definitely a good start. Thank you again! 😊

Agree it might be the cleanest to place the logic out of Database.go. Did not want to do too many changes to your code that's pretty much how I came up with this persistence (also not sure of an appropriate name).
Regarding vfs: Short answer, I did not find VFS when searching for this and I did not think it would become this much logic at the end.
In my first tests I was fiddling around with BrowserFS according to this guide to get it running without any changes to your code: https://github.com/wcchoi/go-wasm-pdfcpu/blob/master/article.md
However, I did not like patching the wasm_exec.js which is provided by Go.
I found this fs lib: https://github.com/spf13/afero however this looked too big to me and I was not sure if this will compile to wasm and if it allows to run completely in memory or requires any other libs which are not available in wasm. And I did the most common mistake: I thought it will be simple..."just a map...". Working on the details it ended up to be some mocked FS logic...
VFS looks really good, no objections to use it!
Personally I will spend some time in performance investigation now since there is some working PoC...it is a lot slower in the browser than the native version and on the phone it becomes even worse (even got a memory allocation panic on the phone). I think this will be my long-term project to replace the sql-statement-logic with the go-jwlm backend, once wasm performance is acceptable.
Also would love to compile mattn/go-sqlite3 or anything else to wasm, However, as of today cgo does not support wasm. Therefore, right now we are copying the data 5 times back and forth: go-jwlm <->js <-> sql.js


Increase size if needed

After discussing with Bin Fan (original author of the paper): he suggested the following.
To expand a cuckoo hash table in a relatively cheap way, with the assumption that doubling the table size each time is fine:
(1) Copy the old hashtable twice into a new hashtable of 2x size, so the first half and the second half of the new bigger hashtable will be identical to the old one respectively. Now each item appears twice in the new hashtable---one in the top half and one in the bottom half.
(2) For each item in the old table, check the legitimate location of this item in the new table: if it should stay in the first half, delete the copy in the second half and vice versa.
After all items in the old table are checked, the new table contains the all items in 2x buckets, without performing expensive cuckoo insertion process.

Based on https://github.com/seiflotfy/rust-cuckoofilter/issues/6 we could also go with the following implementation suggested by Bin Fan:
Assume each entry in the cuckoo hash table stores a a single bit in addition to the fingerprint. When this bit ==0, it indicates the bucket index of this entry is i1, otherwise the index is i2. Everything works like what we proposed in the cuckoo hash paper---except we spend one more bit and update this bit correspondingly when we perform cuckoo operation (i.e., when kicking a fingerprint from its i1 bucket to i2 bucket, set the bit to 1, and vise versa).
Now to resize the table, we simply create a new table with more buckets. For example, originally, the table has N buckets, now it has M (>N) buckets. For each fingerprint in original table, if it is in the i1 bucket (i.e., the indicator bit is 0), then we still put this fingerprint in the i1 bucket in the new table. However, if the it is in the i2 bucket in original table (i.e., indicator bit == 1), then we first calculate its i1 bucket index by i1 = i2 ^ hash(fingerprint) % N as in the paper, then calculate the new i2 bucket index in the new table by (i1 ^ hash(fingerprint)) % M, and move this fingerprint to the i2 bucket in the new table.
The doubling table size is purely a performance optimization so you may want still serve queries when you are performing resizing---but it is not essential.

Interesting, I see why you want this annotation of i1 or i2 now.
Another options might be to dynamically increase the bucket width b?  You'd still need a copy though since otherwise you double your cache misses.  I think Bin Fan's suggestion is better though because :  If you're filter were optimal, then f might drop below cieling(log2(2b)-log2(epsilon)).  In other words, your false positive rate increases as you fill up the larger filter.  You've taken f=8 which afaik exceeds optimal by more than 1 bit.  I think that same extra bit of fingerprint you wanted to spend on i1 vs i2 will save you here, assuming you're only doubling b once.  I think Bin Fan's suggestion is better though because after the new table has filled up for a while you can double is a second time.  It's probably not immediately perfect because you'd expect a bias towards i2 entries living in the second half of the new table, and a bias against in the first half, but nothing catastrophic.

Appears Bin Fan's tweak does not work as described here.  We have i1 = hash(x) % N initially.  As i1 values do not change, this formula remains true after switching to M, meaning i1 runs only across the first N elements, so pressure remains on this initial segment of the table, probably hurting performance and creating an artificially full effect.  Also, you have i2 = (i1 ^ hash(fingerprint)) % M, so i1 = (i2 ^ hash(fingerprint)) % M requires that M be a power of 2.
Another alternative might be moving all to i1' = hash(fingerprint ++ sort(i1,i2)), which avoids #6.  You now insert all values into this new table using i1' and i2' = i1' ^ hash(fingerprint) by first computing i1 = hash(x) and i2 = i1 ^ hash(fingerprint).  It's one hash operation more expensive than Bin Fan's suggestion, but does not need the i1 vs i2 bit, and does not unbalance the table.
In any case, any i1' and i2' computation must pass through a computations of the original filter's i1 and i2.  There is simply no way to extract more entropy from original inserted value x though since x no longer exists.
To me, this says one should carefully weight the simpler "expand b" approach, which does not complicate the computations of i1 and i2, nor unbalance the table.  In fact, you should return to maximum insertion speed, which both Bin Fan's scheme and my symmetric variant both fail.
Yet, another scheme is simply adding a second filter while freezing the current filter for inserts, allowing only for lookups.  This increases your cache misses, but presumably you've tweaked the underlying filter so that this only needs to happen a few times.

Appears all these schemes should impact the false positive rate similarly.  It's simply that, if a false positive would happen in the original filter, then it must happen in the enlarged filter too.  You cannot draw more entropy from x after insertion.
Just expanding the bucket width b pays almost no computational cost provided buckets stay cache aligned, meaning you double b every time you increase it.  All these remaining schemes pay some extra hash cost, probably not much but something.
It follows that doubling b should be more efficient than the extra hash schemes if you always wish to double your filter size.  If you do not wish to double then you might run into situations where some buckets straddle cache lines, so my symmetric version of Bin Fan's scheme should be more efficien, i.e. i1' = hash(fingerprint ++ sort(i1,i2)) % M.


Fix authentication with kerberized HDFS

This is to cherry pick the fix to branch-1.8
Alluxio master currently initiates login for UFS by calling
connectFromMaster when a UFS is mounted through commandline. However,
this is not called when root ufs is mounted or when nested ufs is
remounted on restart, therefore user has to rely on kinit to enable
Alluxio to talk to Kerberized HDFS.
This change ensures before connecting to a UFS, it always logs in the
user with the credentials from Alluxio properties, which frees up user
from having to use kinit and activates HDFS client relogin mechanism, so
user does not have to periodically kinit to refresh the Kerberos ticket.
pr-link: Alluxio/alluxio#8696
change-id: cid-14a889ec58bfd6e4cab8c35fc2e637ea68bbf252

@gpang PTAL.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/2812/
Test PASSed.

alluxio-bot, merge this please


Rating, ToggleGroup: Improve accessibility

Description

MudRating

Add role="radiogroup"
Format razor

MudRatingItem

Add role="radio"

MudToggleGroup

Add role="group"
Format razor
still needs proper keyboard support (Waiting for #9003)

MudToggleItem

Add role="checkbox"

How Has This Been Tested?

visually
Type of Changes

[ ] Bug fix (non-breaking change which fixes an issue)
[X] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] Documentation (fix or improvement to the website or code docs)

Checklist

[X] The PR is submitted to the correct branch (dev).
[X] My code follows the code style of this project.
[ ] I've added relevant tests.

cc @igotinfected 1 of 3

What do you think now @igotinfected? Should be a good compromise i think

LGTM!

Maybe the ToggleItem needs a localizable label like MudRatingItem?

Users can add aria-label to MudToggleItem directly, should be fine?

Also getting ARIA attributes must conform to valid values: Invalid ARIA attribute value: aria-checked="" on the ToggleItem. Any idea why?

Pretty sure I ran into the same problem in one of my accessibility PRs...  This implies that they cannot be an empty string, or be used like disabled, or readonly, or checked, which are implicitly == true when no value is provided.
I think Blazor outputs attribute="" when the passed a boolean true, hence the need to pass it a string like the snippet you posted: aria-checked="@(BoolValue.ToString().ToLower())" checked="@BoolValue"

@henon Ready to review

Thanks


Merge datetools features into shuffletools

Merging datetools app features from https://gitlab.com/synack3/shuffle_dev/-/tree/master/apps/date-tools/1.0.1 into shuffle-tools

Worked on it together for a bit to test it out some time back. Works really well for formatting and such - great work!


eigen_zhou/train_files.txt

Hello.
In the autho's paper, it's stated as 26K images, but in reality, there are about 71K data names written in egien_zhou/train_files.txt.
For reproduction purposes, what is the number of data samples used in the kitti_egien split?
Thank you.

hi, @PoKoHA , thank you for your interest in our model.
I followed the same settings as the SQLdepth paper. For the KITTI Eigen split, approximately 70k images were used during the unsupervised pretraining phase, where depth maps were not employed. However, for training the model with depth maps, only around 22k images were used.
For more details, you can refer to the exact file used for training: KITTI Eigen training files or refer to discussion of this question earlier https://github.com/hisfog/SfMNeXt-Impl/issues/26.


Null pointer exception when editing an existing template and trying to save it as a new template

A null pointer exception appears when editing an existing template and trying to save it as a new template.
Also, the "Save" button in the HTML template does not get enabled.

Caused by: java.lang.NullPointerException
at controllers.PlainTextEditorController.saveNewFile(PlainTextEditorController.java:28)
at controllers.TextEditorController.saveAs(TextEditorController.java:111)

folderTreeItem initialization was missing.
Added missing initialization of the folderTreeItem


[T4A6][T11-B1] Tan Zhi Jie

@zhijietan94 Some comments added. Please close the PR after reading comments.


Charging Problem

Issue Type: Bug
Starting the Visual Studio Code, invite me for a join a Live Share and because the Visual don't charge quickly, crash the opening of the session life. :)
Extension version: 1.0.1122
VS Code version: Code 1.39.2 (6ab598523be7a800d7f3eb4d92d7ab9a66069390, 2019-10-15T15:35:18.241Z)
OS version: Windows_NT x64 10.0.18362

System Info

Item
Value

CPUs
Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz (8 x 1800)

GPU Status
2d_canvas: enabledflash_3d: enabledflash_stage3d: enabledflash_stage3d_baseline: enabledgpu_compositing: enabledmultiple_raster_threads: enabled_onnative_gpu_memory_buffers: disabled_softwareoop_rasterization: disabled_offprotected_video_decode: enabledrasterization: enabledskia_deferred_display_list: disabled_offskia_renderer: disabled_offsurface_synchronization: enabled_onvideo_decode: enabledviz_display_compositor: disabled_offwebgl: enabledwebgl2: enabled

Load (avg)
undefined

Memory (System)
7.43GB (2.41GB free)

Process Argv

Screen Reader
no

VM
0%

Thanks for reporting this, @MarshaGomez. Let me make sure I understand the scenario you're facing. You are trying to join someone else's Live Share session and then VS Code crashes? Were you able to sign in? It would help us investigate if you attached your logs to this issue. You can access them via the Live Share: Export Logs command from the command palette (ctrl + shift + p) and attach them to this issue.

Closing this due to inactivity. Please reopen it if you’re still encountering the issue. Thanks!


[Youtube] Support 256kbps aac audio in youtube music for premium

… required)
Please follow the guide below

You will be asked some questions, please read them carefully and answer honestly
Put an x into all the boxes [ ] relevant to your pull request (like that [x])
Use Preview tab to see how your pull request will actually look like

Before submitting a pull request make sure you have:

[x] Searched the bugtracker for similar pull requests
[ ] Read adding new extractor tutorial - I'm not adding new extractor
[x] Read youtube-dl coding conventions and adjusted the code to meet them
[x] Covered the code with tests (note that PRs without tests will be REJECTED)
[x] Checked the code with flake8

In order to be accepted and merged into youtube-dl each piece of code must be in public domain or released under Unlicense. Check one of the following options:

[x] I am the original author of this code and I am willing to release it under Unlicense
[ ] I am not the original author of this code but it is in public domain or released under Unlicense (provide reliable evidence)

What is the purpose of your pull request?

[ ] Bug fix
[x] Improvement
[ ] New extractor
[ ] New feature

Description of your pull request and other information
Explanation of your pull request in arbitrary form goes here. Please make sure the description explains the purpose and effect of your pull request and is worded well enough to be understood. Provide as much context and examples as possible.
The updated version of pr #26160. Because the branch is DMCA taken down, I upload new pull request because I can't edit code for now.
Fixed playlist isn't working at previous version & merged to recently version.

If you have youtube premium, you can provide cookie.txt and you can download 256kbps aac(id 141) in supported music content like FNF-Dad Battle.
Still it requires premium account, I hope someone will make this with better code styles(not hooking variable and appending https://music.youtube.com/ at all).

Thanks for this @craftingmod!
Unfortunately the output tags still do not seem to work: f.e. %(artist)s and %(album)s will result in NA

Thanks for this @craftingmod!
Unfortunately the output tags still do not seem to work: f.e. %(artist)s and %(album)s will result in NA

Youtube music's album works with almost same system of normal youtube video(Author = Creator, Album = description regex)
I could try parse them but It may be inacculate :(

Added fallback youtube mode for non-premium user.
with... lint failed?


Dots not in the code

Hi!
I spotted formatting issues in the codelab!
On this page (maybe other pages too), you can notice multiple places where it's written this:
call .nameOfTheAwesomeMethod()
instead of this:
call .nameOfTheAwesomeMethod()
The dot is misplaced, and may mislead readers, thinking it's the end of the sentence, while it's a method call dot.

Fixed! https://codelabs.developers.google.com/codelabs/android-agera/index.html?index=..%2F..%2Findex#7


take advantage of FIPA compliant agents and C-mobile?

Sorry if come barging in. But having experienced the robustness and quality of FIPA-Jade I feel I have to point out this project could take advantage of standardized agent technology using Jade and perhaps also C-mobile. Jade has a very active community, mostly scientific environments, has some very large implementations in which it has proven its stability, speed and relevance. For example failover for all components that form the platform (main-container, container, agent), dealing with network outage, remotely synchronizing state, ready to use conversation protocols as statemachines, security, speed, tunneling through proxies and firewalls, ontologies, management GUI, debugging and testing have all been implemented. If you are interested in this I can give demos, presentations and I can also connect to the main developers in italy.
Hope to here from you, good luck with this very interesting project!
Eduard

Dear Eduard,
Thanks again for pointing this out to us; I haven't looked into it yet but I will. I will try to read up on it next week and come back to you.
Kind regards,
Alexander

Hi Eduard,
Ik looked into it! Very interesting indeed; from what I can tell it is a very generic Agent framework with a lot more communication possibilities such as query, inform etc. Conceptually it is very similar with platform, container etc.  However, the Agents in the PowerMatcher only need to inform each other so I don't see any added value there.
A lot of work has been done on implementing for instance security and the other features you've mentioned...some of these are items are next on our agenda. I would be happy if you talked us through some of the aspects with demos. Perhaps we can learn from them or even borrow code (if that's allowed?) I would like to investigate the possibilities of a cooperation although I dont suspect that we would switch to a new core. My email is<EMAIL_ADDRESS>Kind regards,
Alexander

Jade is LGPL licensed, I don't know the exact details of what you can and
cannot do with the software.
Let's see if we can come together for demo's and more some time, see also
github.com/eduarddrenth/agent-technology
And yes perhaps we can organize a form of collaboration
On Fri, Mar 6, 2015 at 8:36 AM, Alexander Krstulovic <
<EMAIL_ADDRESS>wrote:

Hi Eduard,
Ik looked into it! Very interesting indeed; from what I can tell it is a
very generic Agent framework with a lot more communication possibilities
such as query, inform etc. Conceptually it is very similar with platform,
container etc. However, the Agents in the PowerMatcher only need to inform
each other so I don't see any added value there.
A lot of work has been done on implementing for instance security and the
other features you've mentioned...some of these are items are next on our
agenda. I would be happy if you talked us through some of the aspects with
demos. Perhaps we can learn from them or even borrow code (if that's
allowed?) I would like to investigate the possibilities of a cooperation
although I dont suspect that we would switch to a new core. My email is
<EMAIL_ADDRESS>Kind regards,
Alexander
—
Reply to this email directly or view it on GitHub
https://github.com/flexiblepower/powermatcher/issues/177#issuecomment-77518562
.

Hi Eduard,
Could you send me an email>? I dont have your details. Its<EMAIL_ADDRESS>Tx, Alex


Athena connector should have its own database user

The Athena connector currently uses the credentials from DatabaseUserSecretCanvas It should have its own user with read-only privileges. The database setup script will need to conditionally handle this.

Resolved by 8d72a09


Update App.vue

Changed some formatting and wording

For now, I am closing this PR. Because the changes were already made in the main branch.
You can create fetch/rebase and create another PR if this you want to suggest new changes.
Consider running "npm run format" before commits.


Granular management policy - promote to BETA

Description of your changes
:warning: This PR should be merged after Crossplane 1.14 is out, to avoid Providers depending on a upjet version in which GMP is already BETA.
Bumps crossplane-runtime to a version in which GMP is beta. Just bumping crossplane-runtime gave me this issue so I needed to bump a few more things.

I have:

[x] Read and followed Crossplane's contribution process.
[x] Run make reviewable to ensure this PR is ready for review.
~[] Added backport release-x.y labels to auto-backport this PR if necessary.~

How has this code been tested
Tested with provider-aws, creating a DynamoDB Table with using initProvider and managementPolicies.

Awesome, thank you @lsviben 🙌

This PR should be merged after Crossplane 1.14 is out, to avoid Providers depending on a upjet version in which GMP is already BETA.

May be we should keep this as Draft until then 🤔

Yeah I misclicked and made it into a PR. Cant find the button to make it back into a draft :D . Let me google that :mag:

Superseded by https://github.com/crossplane/upjet/pull/284

Can we Close this PR ?

Can we Close this PR ?

yes.


statusline bleeding

as you can see the status line of the selected window is bleeding over the vertical split.
the thing is i actually want to have that happen on all the status lines.

Airline does display a statusline within a window. It does not and cannot decide how the intersection between the vertical window border line and the statusline will look like. You might be able to configure this using some predefined highlighting groups.

@chrisbra it definitely can and it does on the left most intersection in the picture

I am not saying this is not possible. I am saying airline does not handle it. As far as I know, there is no possibility to configure the statusline option and say how the border between windows will look like. You might however configure some highlighting groups. But I don't know which ones to check.

then it is a bug because the statusline is already bleeding just inconsistently.


database column named 'Group' causes problems

I have not had time to really check this out yet, but I wanted to just post a quick issue in case this is not a known problem. I added a column to a table named group and this caused errors when using IRepository Fetch to get items from the table. This could be a rule that some keywords cannot be used as column names, I remember access having this same restriction. If it is a restriction then I would like to get a list of the restricted names for documentation.

this one bit me a s well. I didn't investigate further, but I assume SQL keywords (like group) are reserved keywords. Perhaps this can be solved by having the schema builder surround the reserved words with square brackets, or some solution along those lines. If, of course, this is the issue.

I think you bumped into this: http://english.orchardproject.hu/blog/a-harsh-reminder-that-you-can-t-forget-what-s-below-the-abstraction
The issue with using SQL keywords as column names arises not when tables are created but rather when queried. So if we want to do something with this then querying should be changed. I guess something is already in NHibernate to solve this for us: http://stackoverflow.com/a/8733843/220230 and http://stackoverflow.com/a/15341167/220230

That's a bug in NHibernate, it is the only component to deal with IRepository. You can also try with the Version column which is even more scary, as it will incremement the value automatically at each update.

@sebastienros why is this a bug in NHibernate? It seems to me that rather there is a feature in NHibernate to prevent this that we don't use.

By the way the question is explained, it seemed obvious to me that the query is done in a pure IRepository.Fetch, which is handled in its whole by NHibernate, it's not something we write, or if it's not NHibernate then the db, which I doubt. Feel free to create a sample test to validate it.


add support for CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX

What problem does this PR solve?
Fix CREATE FULLTEXT INDEX syntax
Issue: pingcap/parser#430
Fix CREATE SPATIAL INDEX syntax
Issue: pingcap/parser#431
Fix ALGORITHM syntax
Issue: pingcap/parser#429
TiDB PR: handle IndexKeyType
https://github.com/pingcap/tidb/pull/11719
MySQL Syntax:
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name
...

Bad SQL Case:
CREATE SPATIAL INDEX idx ON t (a)
CREATE SPATIAL INDEX IF NOT EXISTS idx ON t (a)

CREATE FULLTEXT INDEX idx ON t (a)
CREATE FULLTEXT INDEX IF NOT EXISTS idx ON t (a)

Check List
Tests

Unit test

PS:

A rule for ALGORITHM is required for bad SQL cases in #430 and #431, so I haven't used them in test cases.
A KeyType is used to specify UNIQUE, SPATIAL and FULLTEXT.

I will fix ci, don't worry about it

LGTM

@kennytm PTAL

LGTM

@leoppro maybe better not merge parser until TiDB can be merged, now TiDB master could not work with master TiDB now :rofl:

So PTAL pingcap/tidb#11719? 🙃

@leoppro maybe better not merge parser until TiDB can be merged, now TiDB master could not work with master Parser now 🤣

if I don't merge parser first, how can I run tests in TiDB?


fix: non-batched messages cause sql query to fail

Motivation
Because of error as describe in:
https://github.com/apache/pulsar/issues/3679
If messages published by a producer that does not have batching enabled with cause Pulsar SQL queries to fail because of IllegalReferenceCountException.
Modifications
Call retain for non-batched message payloads to increment the reference count just as wha is done for batched messages

run java8 tests

rerun java8 tests

Merged in 2.3.1 at
745f7d0


Add note in README about how to workaround installation with existing .zshrc

This is a long-standing issue, first brought up in #231.
As many people have reported, the current installation instructions silently fail if the user has an existing .zshrc.
This PR simple makes the situation clearer in the README.

It won't override; it will fail.

Please don't close this issue! At least 7 people have reported this problem over the last few years!
https://github.com/sorin-ionescu/prezto/issues/231#issuecomment-60486788
https://github.com/sorin-ionescu/prezto/issues/231#issuecomment-63223743
https://github.com/sorin-ionescu/prezto/issues/231#issuecomment-68977017
https://github.com/sorin-ionescu/prezto/issues/231#issuecomment-101512266
https://github.com/sorin-ionescu/prezto/issues/231#issuecomment-74974680
https://github.com/sorin-ionescu/prezto/issues/868
https://github.com/sorin-ionescu/prezto/issues/231#issuecomment-108928137
ln is vocal about overwriting .zshrc, it does not explain that you need to manually source zprezto/init.sh.
I have been trying to explain this to you for 2.5 years! Please try and listen.

I've added a little info the the readme about conflicting runcoms. I tried to clarify a few things but if you can see ways to improve it, please feel free to open a PR!
Thanks for the idea!


Add UART5 to stm32f1 dts.fixup, Align all stm32 dts.fixup

Add UART5 to stm32f1 dts.fixup
I find in a lot of dts.fixup file is not alignment, an use tab , I'm raplace with space,
I hope developer can unify use the space not tab.

Codecov Report

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

@@           Coverage Diff           @@
##           master   #10416   +/-   ##
=======================================
  Coverage   53.14%   53.14%
=======================================
  Files         210      210
  Lines       25745    25745
  Branches     5673     5673
=======================================
  Hits        13681    13681
  Misses       9754     9754
  Partials     2310     2310

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 11e98fa...3acbf18. Read the comment docs.

@galak thanks i will fix that

@qqqq1433255094, any update?

@thelittlehan , do you plan to continue this PR? Or should we close it?

@thelittlehan , UART5 is now in stm32f1 fixups, I'm closing this PR.


Conversion to TypeScript and continued maintenance

This isn't as much of an issue as much as a heads up. I have converted your c# modules to TypeScript and added a React component as an effort to make it easier to consume. Is this project in continued maintenance? If so, I can try to merge it in with the current project. Currently, it is a WIP and has some bugs due to the conversion i.e. overlapping nodes at times. Maybe once it's ready, we can think about it merging. Thoughts?
https://mathew-kurian.github.io/awesome-react-org-chart/
Great library and I hope it has continued maintenance!

In addition, do you have idea why the aforementioned bug might be happening?

@mathew-kurian sorry for late response - looks like I missed the notification. The example page looks awesome, much better than my own sample page. As of the maintenance: as soon as anyone wants to use it, I'll help out. For me personally, this was a nice Christmas-time exercise a few years ago. If you report any bugs, I will either fix them myself or help you do so.

And yes, please go ahead create pull requests or feature requests. I will look at your site closer as well.


How to use terminus as shell in vscode or pycharm terminal ？

Version: 1.0.139
Platform: win10
Plugins: none
For cmder, I use "cmd.exe / k" D:\ Program Files\ cmder\ vendor\ init.bat " to replace the terminal style of pycharm with the style of cmder.
How to do it for terminus ?

Terminus is not a shell. If you're referring to the default shell that Terminus uses on Windows, that's https://chrisant996.github.io/clink/


resizable-input index

Hi.
If you add an item to values from MultiSelect's dropdown, MultiSelect's "resizable-input" is the latest in "react-selectize-search-field-and-selected-values" node. It's ok.
But if you add an item outside dropdown, then "resizable-input" ceases to be the last.
Please see: http://codepen.io/lozinsky/pen/aBXyjw
I need this to work without hack. Is it possible to fix? Thx.

You can fix it by using the anchor prop:
        <reactSelectize.MultiSelect
          placeholder="Select a color"
          onValuesChange={this.handleValuesChange}
          anchor={values[values.length - 1]} // <--- add this line to your pen
          values={values}


Every form generates a "Update CKAN API IRI" error in console on access

Yes, to remind us that we need to set the CKAN IRI here. If the IRI is valid we can remove the error message.

It is valid


Check to make sure that errors propagate via web sockets

@corymsmith said they do but I need to do more extensive testing to make sure that the appropriate error codes, message, and validation errors come back through websockets. They haven't been tested thoroughly.

Verified that they do.


export-analyzer

Question

The export-analyzer tool checks if the keys are in the future (14 days) - lines 88, 89 and 108 - https://github.com/google/exposure-notifications-server/blob/main/tools/export-analyzer/main.go.
Is this the expected behavior? Or it should check if the keys are in 14 days past?
Shouldn't it also use the file date to calculate the floor and ceiling?

looks like a negative sign got removed
The file date / name doesn't have prescribed semantic value, so that is why the max key age is a flag.
/kind bug
/assign

Will You add the negative sign?
What if I want to check a 2 days old file? floor and ceiling are calculated from 'now'.

Would an optional flag for "now adjustment" help?

I think it is needed. Thanks.


Mark classes in typescript as private for docs

Even though the classes aren't exported from index.ts they still show up in docs because it just scans all files. So we need to mark non-exported classes as private explicitly.

@Pilchie for 3.1 approval!

@aspnet-hello triage https://dev.azure.com/dnceng/public/_build/results?buildId=397020&view=logs

This comment was made automatically. If there is a problem contact<EMAIL_ADDRESS>I've triaged the above build. I've created/commented on the following issue(s)
https://github.com/aspnet/AspNetCore-Internal/issues/2715
https://github.com/aspnet/AspNetCore-Internal/issues/3241


Created Institute Contract

Issue:#1
Added Institute Contract with two functions registerInstitute and isRedisteredInstitute (to check already registerd or not)

@archief2910 please review and merge the pr


csharp support

I want to implement support for csharp in this generator. I would like to ask some questions before I begin.
Are there any other initiatives/plans on this? My very limited search didn't provide any results.
Looking into the code and taken the java implementation as reference, I would say that a high level flow of the generator is:

implement  the rules the project in csharp  under csharp folder
protoc --csharp_out=. --validate_out="lang=csharp:." service.proto
render templates under templates/csharp for messages using code from step 1

Does step 1 require protoc --csharp_out=./csharp -I validate/ validate/validate.proto?
Cheers.

Yeah, that would be great! Just to calibrate expectations, are you signing up to maintain C# support as well? That would mostly involve consulting when there's some idiomatic language thing that works differently in C# than in the other languages, and helping getting the build/test working initially.

implement the rules the project in csharp under csharp folder

Java is a special beast because of the requirements for its directory structure (and the Python version is totally different from other languages and generates code on the fly). If you can avoid having a language-specific directory that's great, otherwise not a big deal.
Ideally almost everything C#-specific goes under templates/csharp with a similar template structure to the existing code.

Last year I was looking into adding support for C# (#361), but I didn't find the time to resolve some open topics. Maybe you can use this a starting point.

any updates on this?

In my case...
.PHONY: create create: 	mkdir -p gen/csharp 	protoc -I=. --csharp_out=./gen/csharp proto/validate/validate.proto 	protoc -I=. -I ${GOPATH}/pkg/mod -I<EMAIL_ADDRESS>--csharp_out=gen/csharp/ proto/v1/*/*.proto

Why was it closed? Is C# added or it is decided that there will be no support for C#

Thank you for reaching out and expressing your interest in having C# support for protoc-gen-validate.
While we won't be adding C# support to protoc-gen-validate, I'd like to point out that there's an open issue regarding C# support in the protovalidate project. You can find it here. This issue captures a similar request, and I encourage you to keep an eye on its progress.
As we're actively developing protovalidate to offer a more comprehensive experience, your input is valued. I'll be closing this issue. If you have more suggestions or questions in the future, feel free to get in touch. Thank you for your engagement!


Support for WireGuard only peers

Why
Tailscale just announced their support for integrated Mullvad exit nodes. Being able to configure a similar setup via Headscale and an independent Mullvad account (or other wireguard VPN provider) would be useful for those of us without a Tailscale account.
Description
I haven't looked deeply into the details, but it's my understanding that this is implemented via a "WireGuard only peer" feature, and then support in the Tailscale coordination server to synchronize these peers with Mullvad. I assume it would be possible for Headscale to allow manually configuring these peer types.

It also seems like mullvad publishes a script to connect to mullvad servers. The most interesting thing is that you basically link public keys with your account (which is why I think that there is a preconfiguration step to register devices in their announcement).
It seems like the simplest implementation could be to create an external script that calls registerNodeCmd on mullvad endpoints, and then calling the mullvad api with each of the node's public keys you want to link.
(I also am really not an expert in this, so please take it with a grain of salt)

It seems useful to me to allow any generic WireGuard-only peer as an exit node, not just Mullvad servers. That way the open-source control server doesn't have to be tied to one VPN provider like the closed-source version.

It might be possible to support this for any WireGuard server peer by accepting peer config files like those generated by Mullvad's WireGuard config file generator like described in this guide, or by just asking the user to provide the generated fields we need at the CLI when adding the peer.

I don't think it's possible to import a generated config file, because that contains a randomized private key. The provider needs to support uploading the existing public key from the devices that will connect. That doesn't seem possible through Mullvad's website, it wants the private key specified so it can embed it in the generated config files, but it is possible through the API. I haven't used other wireguard based vpn services so I'm not sure if being able to upload existing keys is common.

Why would it be required to upload an existing public key?

@WoodenMaxim From what I can tell, each Tailscale node only has a single private/public key pair that is generated when they are created, and then it uses that pair with every other node. So, when adding a non-Tailscale WireGuard endpoint like a Mullvad server, that other end needs to know (all of the) existing Tailscale nodes' public keys that are going to connect to it.

How does adding a Wireguard-only exit node get the public key of the nodes intending to use it into that node's configuration? If there was an easy solution for this we would not need Tailscale...

How does mullvad do it?

How does mullvad do it?

No. "How does Tailscale do it?" Obviously by being a kind of "reseller" and having an interface to provision the mullvad IAM that way. The more interesting question is how the tailscale client is selecting the "exit node" it wants to use.
I was already wondering about this in other settings. If there are multiple possible exit nodes for a destination or multiple Internet gateways how is the most appropriate node selected and how can I influence the choice?

https://tailscale.com/kb/1103/exit-nodes/?tab=linux
tailscale up --exit-node=<exit-node-ip>

Mullvad themselves provide a script 1 to generate vanilla wg configs
instead of mullvad's native client.
The client public key is communicated over mullvad's (sadly undocumented)
API.
On Thu, Sep 28, 2023 at 4:05 AM Joe Taber @.***> wrote:

How does mullvad do it?
—
Reply to this email directly, view it on GitHub
https://github.com/juanfont/headscale/issues/1545#issuecomment-1737854626,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AGMXXMWCDPE3INS5NYB5JVTX4RTGHANCNFSM6AAAAAA4PIQA6M
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>

Very interesting, thanks for sharing sosnik.
https://github.com/mullvad/mullvad-wg.sh/blob/main/mullvad-wg.sh#L59
curl -sSL https://api.mullvad.net/wg -d account="$ACCOUNT" --data-urlencode pubkey="$(wg pubkey <<<"$PRIVATE_KEY")"

Roughly the script:

Reads your mullvad account number from stdin
Downloads a full listing of mullvad relays from the api, including the id/"CODE", location, public key, and endpoint of each.
Uploads your public key to the mullvad api using your account number (see code quoted above)
Creates a wg config file for each relay named /etc/wireguard/$CODE.conf with aforementioned connection details so you can connect by running wg-quick up $CODE

I also found this gist that loosely documents uploading and revoking keys which may also be useful for mullvad: https://gist.github.com/izzyleung/98bcc1c0ecf424c1896dac10a3a4a1f8

So mullvad relays are configured via simple https POSTs to their api (which great, I love that they use simple tech). This may be useful if we want to implement mullvad support into headscale.
That said, it doesn't help us much if we just have a random wireguard relay sitting on a vps and we want to add "Support for WireGuard only peers", as the title of this issue suggests. Honestly I'm not even sure how we would expect a plain WG exit node to work in theory: Either you configure it completely manually, exporting private keys from tailnet nodes and importing them into the WG node which is annoying; or just... you know, install tailscale on that node instead, tailscale was invented to solve that annoyance in the first place.
With that in mind, I think we should open a new issue / retitle this issue to "Support for mullvad exit nodes" (if desired), and add a recipe to the docs showing how to set up your own exit node by running a headscale node on a vps or something, because a "WireGuard only peer" is a non starter.

Either you configure it completely manually, exporting private keys from tailnet nodes and importing them into the WG node which is annoying

Just to clarify, you need to export public keys to configure the WG node (and import the WG nodes' public key into headscale).
I think there are still situations where this could be useful. One thought is that you want to connect devices to an organization managed WG node, where you don't have permission to install tailscale but you are able to provide your public keys to be configured on the node.
The other main reason I think to target just supporting "wireguard only peers" first is that they are the only thing that the tailscale protocol knows about. If they are supported by headscale then scripts can be written to configure them for whatever situation is needed, while if headscale instead only supports talking to the Mullvad API it blocks being able to configure for other situations. That doesn't mean headscale shouldn't support talking to Mullvad itself, but I think it should build on the general functionality of wireguard only peers.

I am with Nemo157 on this one.
At a bare minimum, headscale should support exporting a vanilla wireguard
config (peer public keys and endpoints) for use with other wireguard
clients.
Supporting only mullvad opens the door to "But why not Proton" / "Why not
X" conversations.
One other thing to consider is that commercial VPN providers will limit you
to X number of concurrent connections (I think mullvad's limit is 5?). If
someone's tailnet (headnet?) has more than 5 devices, we don't want to give
mullvad more than 5 public keys and run up against such limits by accident.
On Thu, Sep 28, 2023 at 7:05 PM Nemo157 @.***> wrote:

Either you configure it completely manually, exporting private keys from
tailnet nodes and importing them into the WG node which is annoying
Just to clarify, you need to export public keys to configure the WG
node (and import the WG nodes' public key into headscale).
I think there are still situations where this could be useful. One thought
is that you want to connect devices to an organization managed WG node,
where you don't have permission to install tailscale but you are able to
provide your public keys to be configured on the node.
The other main reason I think to target just supporting "wireguard only
peers" first is that they are the only thing that the tailscale protocol
knows about. If they are supported by headscale then scripts can be written
to configure them for whatever situation is needed, while if headscale
instead only supports talking to the Mullvad API it blocks being able to
configure for other situations. That doesn't mean headscale shouldn't
support talking to Mullvad itself, but I think it should build on the
general functionality of wireguard only peers.
—
Reply to this email directly, view it on GitHub
https://github.com/juanfont/headscale/issues/1545#issuecomment-1738757384,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AGMXXMXH5IN3WLT6HDXLFZDX4U4V3ANCNFSM6AAAAAA4PIQA6M
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>

I strongly believe this would come with all the overhead involved in implementing a WireGuard management API, for which exist many examples.
Examples

https://github.com/firezone/firezone
https://github.com/gravitl/netmaker
https://github.com/netbirdio/netbird
https://github.com/ngoduykhanh/wireguard-ui

Do we already know the API surface of the Tailscale coordination server, which needs to be mimicked by Headscale for supporting the client feature implemented inhttps://github.com/tailscale/tailscale/pull/7821?

Practically speaking, it appears this use case will be much easier to achieve with a Tailscale network and a given WireGuard network residing in the same namespace, and routing being allowed between their subnets.
To continute to distinguish between (1) sole support for WireGuard peers and (2) a default route via an external WireGuard VPN:

Maybe a node can announce a route to the WG subnet, and that would be about it for "native WireGuard clients", for now?
For the VPN use case, maybe an exit node can announce the ::/0 route, and that is locally forwarded through the above subnet, given another ::/0 route would be inherited from there?

Just to clarify, you need to export public keys

Thanks for the correction, please excuse my typo.

I'll relax my stance a bit here, it seems perfectly reasonable to allow headscale users to manually configure wireguard peers by exporting node public keys and importing remote endpoint public keys by some cli or api, and to expect VPN configuration scripts to be layered on top of this feature. Though, how it interacts with ACL and other tailscale features appears to present some non-trivial remaining challenges.

Wrt namespacing and routing, are routing "announcements" a thing in wg? The mullvad script explicitly sets config on the client to route ips over the interface with AllowedIPs = <IP_ADDRESS>/0, ::/0. From that I'd guess the admin would have to set the route manually.

Wrt namespacing and routing, are routing "announcements" a thing in wg?
The mullvad script explicitly sets config on the client to route ips over
the interface with AllowedIPs = <IP_ADDRESS>/0, ::/0. From that I'd guess the
admin would have to set the route manually.

Not that I am aware of. wg-quick uses native methods (ip route) to define
routes in the host, and no "announcements" per se are actually happening.
But I don't think this is a problem:

The people who will use vanilla wireguard will be savvy enough to be
aware of the need for manual routing; and
Wireguard exit node config is going to be a per-node thing anyway,
and if you have access to the node, you (or your management script) can
define the routes like it normally would for vanilla wg.

On Fri, Sep 29, 2023 at 3:18 AM Joe Taber @.***> wrote:

Just to clarify, you need to export public keys
Thanks for the correction, please excuse my typo.
I'll relax my stance a bit here, it seems perfectly reasonable to allow
headscale users to manually configure wireguard peers by exporting node
public keys and importing remote endpoint public keys by some cli or api,
and to expect VPN configuration scripts to be layered on top of this
feature. Though, how it interacts with ACL and other tailscale features
appears to present some non-trivial remaining challenges.
Wrt namespacing and routing, are routing "announcements" a thing in wg?
The mullvad script explicitly sets config on the client to route ips over
the interface with AllowedIPs = <IP_ADDRESS>/0, ::/0. From that I'd guess the
admin would have to set the route manually.
—
Reply to this email directly, view it on GitHub
https://github.com/juanfont/headscale/issues/1545#issuecomment-1739725218,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AGMXXMWSNVU4TWT2BVN27HLX4WWNPANCNFSM6AAAAAA4PIQA6M
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>

Still relevant.

Tailscale already has the client-side feature for this, someone needs to investigate exactly how it is represented by the server and add it to the details provided by Headscale, there is no design work needed for the tailnet side of it. I'm pretty sure once the backend side of how to represent it is investigated the interface to configure that from the CLI will be relatively self-evident, so I'm not sure if there's any point in trying to design it externally. (I would have worked on this myself already, except I really dislike golang, maybe one day I'll eventually give up waiting for someone else and get over my aversion).

I think this feature would be very helpful in several scenarios:

clients with ssh but without headscale/tailscale client
clients controlled by a deployment system like ansible, chef, puppet, intune, apple mdm
clients controlled by second headscale server

if you can
I) import to headscale a dataset of publickey, wireguard ip address and external address for each wireguard only node
II) export
a) a list of datasets for the headscale nodes, which should be able to connect these nodes
b) a n*m matrix which headscale node should be able to connect to which "wireguard" node
III) send a webhook if reconfiguration ist needed
the deployment tools should be able to do the rest.
Company rules could require to use a specific deployment tool and automation process so headscale client may be no option for some systems.
Some appliances do not have support for head/tailscale and dont allow installing third party software, but allow deloyment over ssh, api, ldap or whatever.

Does anyone have a mullvad account for testing? I want to check the traffic between the tailscale control plane and the tailscale client in order to understand how mullvad server are served to the client.

@unixfox I want to check the traffic between the tailscale control plane and the tailscale client in order to understand how mullvad servers are served to the client.

I think you need a Tailscale account with Mullvad add-on for that.

Not stale.

Hello, I went and bought a Mullvad subscription for Tailscale to investigate how it works.
The system is actually really simple: when you use a Mullvad exit node it looks exactly like a normal exit node. Here's what it looks like using a personal exit node vs Mullvad exit node.
 IP                  HOSTNAME                           COUNTRY            CITY                   STATUS
 100.xxx.xxx.xxx        personal.tailedxxxx.ts.net              -                  -                      -
 <IP_ADDRESS>      us-chi-wg-007-1.mullvad.ts.net     USA                Chicago, IL            -

and then in the tailscaled.state file it sets the ExitNodeID in the "profile-xxxx" like any other exit node, eg Chicago 007 is "ExitNodeID": "n85Dw3BNhX11CNTRL",
When you go to mullvad.net they see your traffic as coming from the server corresponding to that hostname. Beyond that, it's opaque. No Mullvad wireguard configs are exposed, all of that happens within the Tailscale controlled exit node server.
It's a black box from there, although Tailscale provides clear documentation on what data they associate with accounts. Technically speaking, I don't think Mullvad has to do anything for this to work. They provide a CLI and readable API, for example the following is what happens when you login via cli
curl -sSL https://api.mullvad.net/wg -d account="$ACCOUNT" --data-urlencode pubkey="$(wg pubkey <<<"$PRIVATE_KEY")")"
where $PRIVATE_KEY is defined as wg genkey and stored in the wireguard config.
I obviously can't tell, but it seems all Tailscale would have to do is set up those exit nodes to chain the wireguard connections, the complex part would be key allocation/licensing.
TL;DR: Neither the Tailscale client nor orchestrator have anything to do with the Mullvad integration. They have specially configured exit nodes that likely do wireguard chaining.

Thanks for putting your money up to investigate, @thedustinmiller.
Still, I don't think that the tailscale control server has no role to play in managing the wg exit nodes if for no other reason than that you can have an arbitrarily-large amount of exit nodes and you don't necessarily want to give them a unique IP on your tailnet at the same time. Is the Chicago exit node always on <IP_ADDRESS>? Do other nodes use different IPs? Do they use consistent IPs or randomly-assigned ones?
As for connecting the tailscale traffic to wireguard exit traffic, it might be as simple as setting up a minimal container with just ts and wg installed and then:
iptables -A FORWARD -i tailscale0 -o wg0 -j ACCEPT
iptables -A FORWARD -i wg0 -o tailscale0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE

And then you can switch out which wireguard config (VPN exit node) becomes wg0 in the above picture. Granted, this is more of a hacky single-user setup, but it might work.

The control server manages them as "wireguard only" nodes, and Disco and DERP is disabled on such nodes.

Here's a list of the exit nodes. The IPs appear consistent, so far at least.
Exit nodes
IP                  HOSTNAME                           COUNTRY            CITY                   STATUS
 <IP_ADDRESS>       al-tia-wg-001.mullvad.ts.net       Albania            Tirana                 -
 <IP_ADDRESS>       au-adl-wg-301.mullvad.ts.net       Australia          Any                    -
 <IP_ADDRESS>       au-adl-wg-301.mullvad.ts.net       Australia          Adelaide               -
 <IP_ADDRESS>      au-bne-wg-301.mullvad.ts.net       Australia          Brisbane               -
 <IP_ADDRESS>      au-mel-wg-301.mullvad.ts.net       Australia          Melbourne              -
 <IP_ADDRESS>        au-per-wg-301.mullvad.ts.net       Australia          Perth                  -
 <IP_ADDRESS>     au-syd-wg-001.mullvad.ts.net       Australia          Sydney                 -
 <IP_ADDRESS>       at-vie-wg-001.mullvad.ts.net       Austria            Vienna                 -
 <IP_ADDRESS>        be-bru-wg-101.mullvad.ts.net       Belgium            Brussels               -
 <IP_ADDRESS>       br-sao-wg-201.mullvad.ts.net       Brazil             Sao Paulo              -
 <IP_ADDRESS>         bg-sof-wg-001.mullvad.ts.net       Bulgaria           Sofia                  -
 <IP_ADDRESS>      ca-mtr-wg-001.mullvad.ts.net       Canada             Any                    -
 <IP_ADDRESS>      ca-yyc-wg-201.mullvad.ts.net       Canada             Calgary                -
 <IP_ADDRESS>      ca-mtr-wg-001.mullvad.ts.net       Canada             Montreal               -
 <IP_ADDRESS>     ca-tor-wg-001.mullvad.ts.net       Canada             Toronto                -
 <IP_ADDRESS>       ca-van-wg-201.mullvad.ts.net       Canada             Vancouver              -
 <IP_ADDRESS>      cl-scl-wg-001.mullvad.ts.net       Chile              Santiago               -
 <IP_ADDRESS>       co-bog-wg-001.mullvad.ts.net       Colombia           Bogota                 -
 <IP_ADDRESS>       hr-zag-wg-001.mullvad.ts.net       Croatia            Zagreb                 -
 <IP_ADDRESS>      cz-prg-wg-101.mullvad.ts.net       Czech Republic     Prague                 -
 <IP_ADDRESS>       dk-cph-wg-001.mullvad.ts.net       Denmark            Copenhagen             -
 <IP_ADDRESS>     ee-tll-wg-001.mullvad.ts.net       Estonia            Tallinn                -
 <IP_ADDRESS>       fi-hel-wg-001.mullvad.ts.net       Finland            Helsinki               -
 <IP_ADDRESS>      fr-mrs-wg-001.mullvad.ts.net       France             Any                    -
 <IP_ADDRESS>     fr-bod-wg-002.mullvad.ts.net       France             Bordeaux               -
 <IP_ADDRESS>      fr-mrs-wg-001.mullvad.ts.net       France             Marseille              -
 <IP_ADDRESS>      fr-par-wg-001.mullvad.ts.net       France             Paris                  -
 <IP_ADDRESS>       de-fra-wg-009.mullvad.ts.net       Germany            Any                    -
 <IP_ADDRESS>     de-ber-wg-001.mullvad.ts.net       Germany            Berlin                 -
 <IP_ADDRESS>         de-dus-wg-001.mullvad.ts.net       Germany            Dusseldorf             -
 <IP_ADDRESS>       de-fra-wg-009.mullvad.ts.net       Germany            Frankfurt              -
 <IP_ADDRESS>        gr-ath-wg-101.mullvad.ts.net       Greece             Athens                 -
 <IP_ADDRESS>     hk-hkg-wg-201.mullvad.ts.net       Hong Kong          Hong Kong              -
 <IP_ADDRESS>      hu-bud-wg-101.mullvad.ts.net       Hungary            Budapest               -
 <IP_ADDRESS>      id-jpu-wg-001.mullvad.ts.net       Indonesia          Jakarta                -
 <IP_ADDRESS>       ie-dub-wg-101.mullvad.ts.net       Ireland            Dublin                 -
 <IP_ADDRESS>       il-tlv-wg-101.mullvad.ts.net       Israel             Tel Aviv               -
 <IP_ADDRESS>       it-mil-wg-001.mullvad.ts.net       Italy              Any                    -
 <IP_ADDRESS>       it-mil-wg-001.mullvad.ts.net       Italy              Milan                  -
 <IP_ADDRESS>       it-pmo-wg-001.mullvad.ts.net       Italy              Palermo                -
 <IP_ADDRESS>      jp-tyo-wg-001.mullvad.ts.net       Japan              Any                    -
 <IP_ADDRESS>        jp-osa-wg-001.mullvad.ts.net       Japan              Osaka                  -
 <IP_ADDRESS>      jp-tyo-wg-001.mullvad.ts.net       Japan              Tokyo                  -
 <IP_ADDRESS>         lv-rix-wg-001.mullvad.ts.net       Latvia             Riga                   -
 <IP_ADDRESS>     mx-qro-wg-001.mullvad.ts.net       Mexico             Queretaro              -
 <IP_ADDRESS>       nl-ams-wg-007.mullvad.ts.net       Netherlands        Amsterdam              -
 <IP_ADDRESS>        nz-akl-wg-301.mullvad.ts.net       New Zealand        Auckland               -
 <IP_ADDRESS>     no-svg-wg-001.mullvad.ts.net       Norway             Any                    -
 <IP_ADDRESS>         no-osl-wg-001.mullvad.ts.net       Norway             Oslo                   -
 <IP_ADDRESS>     no-svg-wg-001.mullvad.ts.net       Norway             Stavanger              -
 <IP_ADDRESS>     pl-waw-wg-101.mullvad.ts.net       Poland             Warsaw                 -
 <IP_ADDRESS>      pt-lis-wg-201.mullvad.ts.net       Portugal           Lisbon                 -
 <IP_ADDRESS>     ro-buh-wg-001.mullvad.ts.net       Romania            Bucharest              -
 <IP_ADDRESS>       rs-beg-wg-101.mullvad.ts.net       Serbia             Belgrade               -
 <IP_ADDRESS>      sg-sin-wg-001.mullvad.ts.net       Singapore          Singapore              -
 <IP_ADDRESS>      sk-bts-wg-001.mullvad.ts.net       Slovakia           Bratislava             -
 <IP_ADDRESS>       si-lju-wg-001.mullvad.ts.net       Slovenia           Ljubljana              -
 <IP_ADDRESS>      za-jnb-wg-001.mullvad.ts.net       South Africa       Johannesburg           -
 <IP_ADDRESS>       es-bcn-wg-001.mullvad.ts.net       Spain              Any                    -
 <IP_ADDRESS>       es-bcn-wg-001.mullvad.ts.net       Spain              Barcelona              -
 <IP_ADDRESS>     es-mad-wg-101.mullvad.ts.net       Spain              Madrid                 -
 <IP_ADDRESS>        es-vlc-wg-001.mullvad.ts.net       Spain              Valencia               -
 <IP_ADDRESS>      se-got-wg-001.mullvad.ts.net       Sweden             Any                    -
 <IP_ADDRESS>      se-got-wg-001.mullvad.ts.net       Sweden             Gothenburg             -
 <IP_ADDRESS>       se-mma-wg-001.mullvad.ts.net       Sweden             Malmö                  -
 <IP_ADDRESS>         se-sto-wg-001.mullvad.ts.net       Sweden             Stockholm              -
 <IP_ADDRESS>       ch-zrh-wg-001.mullvad.ts.net       Switzerland        Zurich                 -
 <IP_ADDRESS>       th-bkk-wg-001.mullvad.ts.net       Thailand           Bangkok                -
 <IP_ADDRESS>       tr-ist-wg-001.mullvad.ts.net       Turkey             Istanbul               -
 <IP_ADDRESS>       gb-glw-wg-001.mullvad.ts.net       UK                 Any                    -
 <IP_ADDRESS>       gb-glw-wg-001.mullvad.ts.net       UK                 Glasgow                -
 <IP_ADDRESS>        gb-lon-wg-001.mullvad.ts.net       UK                 London                 -
 <IP_ADDRESS>      gb-mnc-wg-001.mullvad.ts.net       UK                 Manchester             -
 <IP_ADDRESS>      us-chi-wg-007-1.mullvad.ts.net     USA                Any                    -
 <IP_ADDRESS>       us-qas-wg-001.mullvad.ts.net       USA                Ashburn, VA            -
 <IP_ADDRESS>      us-atl-wg-001.mullvad.ts.net       USA                Atlanta, GA            -
 <IP_ADDRESS>      us-bos-wg-001.mullvad.ts.net       USA                Boston, MA             -
 <IP_ADDRESS>      us-chi-wg-007-1.mullvad.ts.net     USA                Chicago, IL            -
 <IP_ADDRESS>       us-dal-wg-001.mullvad.ts.net       USA                Dallas, TX             -
 <IP_ADDRESS>       us-den-wg-101.mullvad.ts.net       USA                Denver, CO             -
 <IP_ADDRESS>      us-det-wg-001.mullvad.ts.net       USA                Detroit, MI            -
 <IP_ADDRESS>       us-hou-wg-001.mullvad.ts.net       USA                Houston, TX            -
 <IP_ADDRESS>       us-lax-wg-101.mullvad.ts.net       USA                Los Angeles, CA        -
 <IP_ADDRESS>      us-txc-wg-001.mullvad.ts.net       USA                McAllen, TX            -
 <IP_ADDRESS>       us-mia-wg-002.mullvad.ts.net       USA                Miami, FL              -
 <IP_ADDRESS>       us-nyc-wg-301.mullvad.ts.net       USA                New York, NY           -
 <IP_ADDRESS>       us-phx-wg-103.mullvad.ts.net       USA                Phoenix, AZ            -
 <IP_ADDRESS>      us-rag-wg-101.mullvad.ts.net       USA                Raleigh, NC            -
 <IP_ADDRESS>       us-slc-wg-101.mullvad.ts.net       USA                Salt Lake City, UT     -
 <IP_ADDRESS>       us-sjc-wg-001.mullvad.ts.net       USA                San Jose, CA           -
 <IP_ADDRESS>       us-sea-wg-001.mullvad.ts.net       USA                Seattle, WA            -
 <IP_ADDRESS>        us-uyk-wg-102.mullvad.ts.net       USA                Secaucus, NJ           -
 <IP_ADDRESS>       ua-iev-wg-001.mullvad.ts.net       Ukraine            Kyiv                   -

I am working on exactly what you mentioned with the iptables, I subscribe to normal Mullvad as well and am trying that with the vanilla Wireguard configs they generate.
But yeah I was totally wrong, the search sefidel provided included a test describing wireguard only functionality, I think. I'm guessing this comment means the server has to explicitly define those peers.
// IsWireGuardOnly indicates that this is a non-Tailscale WireGuard peer, it
   // is not expected to speak Disco or DERP, and it must have Endpoints in
   // order to be reachable.

This is pretty far outside my usual work, so please let me know if I can provide any other info.

Thanks for putting your money up to investigate, @thedustinmiller.
Still, I don't think that the tailscale control server has no role to play in managing the wg exit nodes if for no other reason than that you can have an arbitrarily-large amount of exit nodes and you don't necessarily want to give them a unique IP on your tailnet at the same time. Is the Chicago exit node always on <IP_ADDRESS>? Do other nodes use different IPs? Do they use consistent IPs or randomly-assigned ones?
As for connecting the tailscale traffic to wireguard exit traffic, it might be as simple as setting up a minimal container with just ts and wg installed and then:
iptables -A FORWARD -i tailscale0 -o wg0 -j ACCEPT
iptables -A FORWARD -i wg0 -o tailscale0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE

And then you can switch out which wireguard config (VPN exit node) becomes wg0 in the above picture. Granted, this is more of a hacky single-user setup, but it might work.

I've been experimenting with essentially this idea in my homelab recently and I've had some success.
I started with having Tailscale and Wireguard both running inside a Ubuntu VM (well actually a cheap rented virtual private server for the 1Gbps connection) which didn't work until I finally worked out the correct pre-up/down rules and got it working well. Then I transferred the concept into a Debian docker image which is also running well. The only noticeable issue is slightly slower network speeds, 200Mbps vs 350Mbps down from the perspective of another node on the tailnet using the exit-node, presumably due to docker overhead.
I haven't yet put it together into a nice neat repo that can be shared widely. However I'm happy to share my configs here for anyone that's interested with a big health warning that I'm a noob and don't know what I'm doing so copy at your peril. Hope it helps!
This is the wireguard config file I've created. It's activated using wg-quick after tailscale has been installed and started successfully on the same system:
[Interface]
Address = [REDACTED]
PrivateKey = [REDACTED]
Table = off # stops wg-quick from auto-generating routing tables
MTU = 1380 # seems to give better network speed when running inside a docker container

PostUp = wg set vpn1_cloud_01 fwmark 51820 # copied from wg-quck. Interface name should match config file name
PostUp = ip -4 route add <IP_ADDRESS>/0 dev vpn1_cloud_01 table 51820 # copied from wg-quick
PostUp = ip -4 rule add not fwmark 51820 table 51820 pref 32765 # important - I believe this sets the preference of the wireguard tunnel to be higher (i.e. lower priority) than tailscale, allowing both to co-exist
PostUp = ip -4 rule add table main suppress_prefixlength 0 # copied from wg-quick
PostUp = sysctl -q net.ipv4.conf.all.src_valid_mark=1 # copied from wg-quick
PreDown = ip -4 rule del table 51820 # copied from wg-quick
PreDown = ip -4 rule del table main suppress_prefixlength 0 # copied from wg-quick

[Peer]
PublicKey = [REDACTED]
AllowedIPs = <IP_ADDRESS>/0
Endpoint = [REDACTED]:51820
PersistentKeepalive = 25

This is the dockerfile I use to create my docker image:
# Base image
FROM debian:bullseye-slim

# Install necessary packages
RUN apt-get update && apt-get install -y \
        curl \
        iproute2 \
        iptables \
        wireguard-tools \
        bash \
        procps \
        && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# Install additional packages
RUN curl -fsSL https://tailscale.com/install.sh | sh

# Copy and set the entrypoint script into the container if active
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

This is my entrypoint.sh file:

#!/bin/bash

# Check if necessary environment variables are set
: "${TS_EXTRA_ARGS:?Environment variable TS_EXTRA_ARGS must be set}"
: "${WG_CONFIG:?Environment variable WG_CONFIG must be set}"

# Start Tailscale in the background
echo "Starting tailscaled"
tailscaled &
TAILSCALE_PID=$!

# Function to check if tailscaled is running
check_tailscaled() {
    pgrep tailscaled > /dev/null
}

# Wait for tailscaled to start up
echo "Waiting for tailscaled to initialize..."
for i in {1..10}; do
    if check_tailscaled; then
        echo "tailscaled is running"
        break
    fi
    sleep 2
done

# Check again if tailscaled is running after waiting
if ! check_tailscaled; then
    echo "tailscaled failed to start. Exiting."
    tail -f /dev/null  # Keeps the container running for debugging
    exit 1
fi

# Authenticate with Tailscale
echo "Running Tailscale up"
tailscale up $TS_EXTRA_ARGS

# Check if Tailscale is connected
if ! tailscale status | grep -q "Tailscale is stopped"; then
    echo "Tailscale is connected"
    # Ensure WireGuard is up and running
    if [ -f $WG_CONFIG ]; then
        echo "Starting WireGuard"
        wg-quick up "$WG_CONFIG"
    else
        echo "WireGuard configuration file not found!"
    fi
    tail -f /dev/null  # Keeps the container running for debugging
else
    echo "Tailscale failed to connect. Exiting."
    tailscale status # Optionally: Print Tailscale logs for further debugging
    tail -f /dev/null  # Keeps the container running for debugging
fi

And finally my docker-compose to bring the image up:
  ts_wg_01:
    image: ts_wg_01
    container_name: ts_wg_01
    privileged: True
    cap_add:
      - net_admin
      - sys_module
    volumes:
      - /mnt/docker/appdata/ts_wg/state:/var/lib/tailscale
      - /dev/net/tun:/dev/net/tun
      - /etc/wireguard/ts_wg_01.conf:/etc/wireguard/wg0.conf
    environment:
      - TS_EXTRA_ARGS=--login-server=https://headscale.[MYDOMAIN] --authkey=[AUTHKEY] --hostname=[HOSTNAME] --advertise-exit-node=true --accept-routes=true --accept-dns=true
      - WG_CONFIG=/etc/wireguard/wg0.conf


fix(grpc.py): dropped support for gRPC

removed all support for gRPC

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


Polymer 3.x

fixes #54

@megheaiulian I finished work on this; you can mark it as ready for review.

@Wurper ready to release!