SAM Function Global Environment Variables Interact Oddly with !If and Conditional Values

cfn-lint version: (cfn-lint --version)
cfn-lint 0.46.0
Description of issue.
When the !If intrinsic function is used with conditional values in SAM's Global Environment Variables, cfn-lint warns that the value on the true side of the condition may not be available when the condition is not true. For example, given an AWS::AppConfig::Environment in the current template, an importable instance of same, and an environment variable meant to pass the ID of one of them to a Function:
---
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Parameters:
  DeploymentMode:
    Type: String
    AllowedValues:
    - sandbox
    - live
    Default: sandbox
    ConstraintDescription: Value must be a known deployment mode.
Conditions:
  IsLive: !Equals [ !Ref DeploymentMode, live ]
Globals:
  Function:
    Environment:
      Variables:
        AppConfig__Environment: !If
        - IsLive
        - !Ref ConfigEnvironment
        - !ImportValue ConfigEnvironment-blah
Resources:
  ConfigApplication:
    Type: AWS::AppConfig::Application
    Properties:
      Name: Application-A
  ConfigEnvironment:
    Type: AWS::AppConfig::Environment
    Condition: IsLive
    Properties:
      ApplicationId: !Ref ConfigApplication
      Name: Environment-B
  FunctionC:
    Type: AWS::Serverless::Function
    Properties:
      Runtime: provided.al2
      Handler: provided

…cfn-lint reports this:

[cfn-lint] W1001: Ref to resource "ConfigEnvironment" that may not be available when condition "IsLive" is False at Function/Environment/Variables/AppConfig__Environment/Fn::If/1/Ref

Oddly, the error is reported at a location in Function (under Globals, presumably), which I think isn't a location which exists in the transformed template. More oddly, this error is reported only there. If the !If is removed and ConfigEnvironment is !Refed directly, the following are reported:

[cfn-lint] W1001: Ref to resource "ConfigEnvironment" that may not be available when condition "IsLive" is False at Function/Environment/Variables/AppConfig__Environment/Ref
[cfn-lint] W1001: Ref to resource "ConfigEnvironment" that may not be available when condition "IsLive" is False at Resources/FunctionC/Properties/Environment/Variables/AppConfig__Environment/Ref

That is, the error is reported both in the Globals section and in the Environment.Variables of FunctionC itself. But when the !If is present (as it should be), the error remains in Globals. If the environment variables are moved from Globals to directly within FunctionC, no error is reported. Unfortunately, this does not scale. Suppressing W1001 globally for deployments is our current workaround.
Nothing in cfn-lint jumps out at me as responsible for this issue, so I don't have any leads for you to track down. The thing that looked closest was how this section is considered to have "non-strict" values, but that appears to be related to string vs. number, so it didn't seem right to me.

Mapping from the violation in the transformed template back to the line in the original source template is a bit best effort

I think that it's because Line 933 in template.py is key-not-found'ing on text[path[0]]. At that time, path[0] is "Function", which isn't a location which exists in the transformed template. This is causing the path conditions to be empty. When the comparison is made between the scenario count (0) and the number of path conditions (0), the scenario is appended to the results.
Does that sound reasonable? I'm afraid I don't know what the best fix to apply is, if so. Maybe early-return results if len(path_conditions) == 0?

Translated template for reference
{
  "AWSTemplateFormatVersion": null,
  "Conditions": {
    "IsLive": {
      "Fn::Equals": [
        {
          "Ref": "DeploymentMode"
        },
        "live"
      ]
    }
  },
  "Parameters": {
    "DeploymentMode": {
      "AllowedValues": [
        "sandbox",
        "live"
      ],
      "ConstraintDescription": "Value must be a known deployment mode.",
      "Default": "sandbox",
      "Type": "String"
    }
  },
  "Resources": {
    "ConfigApplication": {
      "Properties": {
        "Name": "Application-A"
      },
      "Type": "AWS::AppConfig::Application"
    },
    "ConfigEnvironment": {
      "Condition": "IsLive",
      "Properties": {
        "ApplicationId": {
          "Ref": "ConfigApplication"
        },
        "Name": "Environment-B"
      },
      "Type": "AWS::AppConfig::Environment"
    },
    "FunctionC": {
      "Properties": {
        "Code": {
          "S3Bucket": "bucket",
          "S3Key": "value"
        },
        "Environment": {
          "Variables": {
            "AppConfig__Environment": {
              "Fn::If": [
                "IsLive",
                {
                  "Ref": "ConfigEnvironment"
                },
                {
                  "Fn::ImportValue": "ConfigEnvironment-blah"
                }
              ]
            }
          }
        },
        "Handler": "provided",
        "Role": {
          "Fn::GetAtt": [
            "FunctionCRole",
            "Arn"
          ]
        },
        "Runtime": "provided.al2",
        "Tags": [
          {
            "Key": "lambda:createdBy",
            "Value": "SAM"
          }
        ]
      },
      "Type": "AWS::Lambda::Function"
    },
    "FunctionCRole": {
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": [
                "sts:AssumeRole"
              ],
              "Effect": "Allow",
              "Principal": {
                "Service": [
                  "lambda.amazonaws.com"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
        ],
        "Tags": [
          {
            "Key": "lambda:createdBy",
            "Value": "SAM"
          }
        ]
      },
      "Type": "AWS::IAM::Role"
    }
  }
}

A first glance this looks okay.  I need to look into this a little more.

Seeing what @chrisoverzero is seeing.  Trying to figure out why now.  That path is for sure jacked and need to figure out why.

Figured out the fix.  Working on a resolution.

I confirm the fix. Thanks so much.


When root have more files loading takes more time.

I have a root with almost 1000+ files and folders. When I index all the folders and files. It takes ages to load. Is it possible to add pagination or something autoload when scrolling?
Thanks

It will be complicated to implement, just don't put that much files or use a better computer


Possible problem with discord, or?

I have been attempting to download some artists discord, but, the software hangs after creating the containment folder, and then nothing happens. I thought that maybe I had to wait for the first .txt files which are light weight to be formed, but after 3 hours still nothing.
Is this normal? I don't remember it taking more than maybe half hour of 900kb of content in just empty folders & .txt files, and the one I'm downloading is rather small:
https://kemono.su/discord/server/960735840466763816
And yet after 1 hour nothing has been generated or downloaded visibly.

Unrelated question for when you update, or have free time.
Respect subscriberstar, do you have any knowledge as to why all posts are limited by around half of 2021? After checking several artists, they do keep updating as of present today thought, so I find it weird people stopped updating as of the year. And I have not been able to find any information on this, so I thought about asking you if maybe you know.

Sorry for the late response, was kinda busy until new year. I got to try the new updated DiscordtoJson.py file transition, and yes, it does work now. Thank you very much for the quick response Jeff, even if I was not able to respond as quick.
If I find any issues, I will be letting you know.


exhaust: allow selecting how many cpus to use

Signed-off-by: Alessandro Comodi<EMAIL_ADDRESS>

@acomodi - It might be good that when running performance tests the tool lock everything to a given CPU core? https://unix.stackexchange.com/questions/23106/how-to-limit-a-process-to-one-cpu-core-in-linux

https://man7.org/linux/man-pages/man1/taskset.1.html

@mithro All right, I verified this works on my local machine. But, given the amount of tests we are running, locking everything to one CPU might let the overall run-time of CI to spike. For instance, it took ~3x time on my local machine to run all the blinky test using one locked CPU instead of multiple CPUs.
I think we could check how the reduction in NUM_CORES added with this PR works out, and then, if we still see high noise w.r.t. run-time in the final graph, we could think of locking onto a single CPU

I mean lock each task that is run (rather than the whole FPGA tool perf).

I am unsure how to do that with the multiprocess python library. What is happening in toolperf is that the task list is passed to the multiprocessing Pool and python dispatches all the tasks. Then the OS is handling all the job allocations to the various cores.

http://sorami-chi.hateblo.jp/entry/2016/04/29/000000 apparently?

And https://bugs.python.org/msg281931 maybe?

I wouldn't necessarily block this pull request on the locking to a single CPU stuff.

Hmm, I bumped into the first link, but I do not think it might be helpful here, as it requires modifying the multiprocessing library. Even though a feature that enables the user to lock the process within a specific CPU core would be a nice improvement to the library itself.
Regarding the psutil approach, even though we can alter the CPU affinity of a process, in our case the Pool is handling all of that.
I am thinking that we might overcome this problem by allowing the worker function to call a subprocess with taskset and the call to fpgaperf.py with all the required parameters of the task?
I am unsure though if the Pool does some sort of re-organization of the processes under the hood. I'll need to investigate some more. Maybe there are other multiprocessor/multithreading libraries that could potentially help us here.

Running a subprocess command inside a taskset might be the right solution?

@mithro I have opened an issue about this: https://github.com/SymbiFlow/fpga-tool-perf/issues/296. I will open a follow-up PR as soon as I have something ready. I'd merge this PR for the time being


fix package.json as utf 8

fix encoding of file (this breaks yarn installations and CI builds)

Change encoding of package.json from utf-8 [with DOM] to utf-8

@timelf123 are you maintaining this project?  Would be great to merge this so I can point to official repo instead of a fork.

Would LOVE if this could be merged in! this is kind of blocking us on a few fronts :(


Drag window won't stop

https://github.com/user-attachments/assets/090fa188-cb51-45ac-a69e-738d2003bcfd

I can confirm that it happened to me once, but I can't reproduce it anymore

I can not re-produce this issue on Debian 11. Can you debug this by adding a breakpoint on EndMoveWindow in src/Views/Launcher.axaml.cs to check if this function will/won't been called after mouse button released?

I can not re-produce this issue on Debian 11. Can you debug this by adding a breakpoint on EndMoveWindow in src/Views/Launcher.axaml.cs to check if this function will/won't be called after mouse button released?

It has not been called after I start to move the window. If I just click the title bar, EndMoveWindow would be called after about 300-500ms

I can not re-produce this issue on Debian 11. Can you debug this by adding a breakpoint on EndMoveWindow in src/Views/Launcher.axaml.cs to check if this function will/won't be called after mouse button released?

It has not been called after I start to move the window. If I just click the title bar, EndMoveWindow would be called after about 300-500ms

Yes, I found it too. And on Windows & macOS, it works fine……

I've pushed a commit 1d15c4c95ff59fab4b98579f0cffd1d426f9601b and tested it on my Debian 11 & Windows device. It works fine. Could you please test it on your device, and let me know if the commit solves this issue.

I've pushed a commit 1d15c4c and tested it on my Debian 11 & Windows device. It works fine. Could you please test it on your device, and let me know if the commit solves this issue.

It works fine on my Deepin V23 (Insider)


Update datastore interface for model locked error

implementation in https://github.com/OpenSlides/openslides-datastore-service/pull/128


Resize game layout, change backgrounds, adjust rules layout and fonts

In this PR:

I adjust a lot of elements on the main game display to fit better in the viewport
I make it so the game log will go away if you click on it
I add backgrounds from Figma to the game display
I change the lives in the player display from circles to hearts
I adjust the layout of the rules display to put the images/gifs at the bottom
I change the font to ABeeZee from Figma

Nice work, our game is going good!  :rocket:


Bash compatibility

Still has an issue if the Jump Server is running anything other than bash < 4.4 so needs a bit more work

Retracting pull request as I need to work on it a bit more


Allowing Drag And Drop outside of the CollectionView Bounds while keeping reordering.

Is your feature request related to a problem? Please describe.
I'm trying to drag and drop GridCells to external items and also keep the drag and drop reordering in tact. If I add a GuestureRecognizer drag to the Frame inside the CollectionView the functionality of reordering gets ruined.
Describe the solution you'd like
I would like to be able to drag and drop a GridViewCell outside of the bounds of the collectionview while also being able to drag and drop for reordering.
Describe alternatives you've considered
Needing to turn off drag and drop on the collectionview in order to drag outside of the bounds. Programatically adding DragAndDrop Guesture if starts dragging outside of collectionview.
Additional context
Any help if already capable would be appreciated. Thanks!

sorry but it won't be supported. not by me anyway :)


fixRegistryConfigurationClass

Fix for method RegistryConfiguration with isReflectionBasedAssemblyAccessorUsed = false

The change in Configuration.cs is good, but the change in AssemblyDiagnosticsAccessor.cs may need some work. I think we need to properly set/get the AssemblyTitle property to return the assembly's title, not the ProductName. I need to research how to get this from an assembly's path more -- unless you get to it first.
This is a breaking change, since AssemblyProduct is used for registry paths. However, breaking changes are OK for now since we are still in a pre-2.0 phase.

I went ahead and merged it in along with a small refactor for my own sanity. (This code base needs a good chunk of cleanup still.)
Please let me know if that works out OK, since I did add the file path checking, too.
Thanks for your contribution!


merge

has anyone thought about merging the fork react-input-moment into this repo? it has extended functionality. Thanks.

will check it


how to open database from exists stream ?

var conn=new DuckDBConnection(stream) ??

You can't open from stream, why would you want to do that?


Change the Crashlytics version constant to read from FIRCore instead of from a build flag.

#no-changelog

Fix CI issues

I think there's a few more issues - I'll send out changes on Tuesday when I'm back!

@tejasd Please provide an update. Code freeze is today. Can this change wait for 7.1?

@tejasd Please provide an update. Code freeze is today. Can this change wait for 7.1?

Yes, apologies! This isn't very high priority - and some other stuff has come up! I'll get it done ASAP, but I think this'll go in in 7.1.


Security Vulnerability

Submit security vulnerabilities to<EMAIL_ADDRESS>

Hey @haby0! Is this a request for the ghas-jira-integration, and if so would you mind clarifying?

Yep, there is a small vulnerability in ghas-jira-integration

Would you mind emailing me the details? 💯 I'd appreciate it<EMAIL_ADDRESS>

@cmboling Hi, can you disclose this vulnerability and apply for a CVE?
Reference: https://docs.github.com/en/code-security/security-advisories/about-github-security-advisories


Add logo design 1

Hey @ffalpha, thank you for creating this pull request! Have a wonderful day...


💫 A  big rewrite

As the title suggests, I think svelte-add needs some fundamental changes. It is not broken but also not in a good shape, take #312 or #285 for example, they can be fixed with little bit of logic here and there, but that will not fix the fundamental issue that is lack of project context in adders.
The Proposals
Here are some proposals I have, they are individually debatable and I don't expect everyone to agree on everything
Please move away from submodules
Git submodules aren't the best thing to work with. I have read #12 and understand the gist of it, still I think a monorepo would be the best thing. The last thing anyone want to do is deal with submodules shenanigans.
Also on a personal note, when I looked at the tailwindcss adder it took me way long to realized how it worked with only 3 js files and no package.json or anything. Then I opened __run.js and got more confused by the imports outside of the repo, until I realized I had to look from svelte-add to userstand what was happening.
my suggestion is to archive the other repos and move everything to this central repo. One of the closest match to this kind of setup can be found in https://github.com/catppuccin/userstyles
Better Adder API
Current implementation of adder with __run.js is lacking at many places, what I suggest is to separate out the core utilities in their specific packages like @svelte-add/core or svelte-add-core and ship it as a dependency with svelte-add with the Adders. I promise it will make more sense later.
Now for the adders, instead of exporting bunch of random const from bunch of random files, we can have only one export default defineAdder(), just like how vite does it.
Now to userstand how it helps here is a hypothetical implementation of tailwindcss adder.
import { defineAdder } from "@svelte-add/core";
export default defineAdder({
  name: "TailwindCSS Adder",
  description: "...",
  run: async ({ args, installPackages, createFile, generateConfig, project }) => {
      installPackages(
         { name: "tailwindcss", version: "^3.4", as: "dev" },
         { name: "autoprefixer", /*...*/ },
         /*...*/
        );
      project.prettier.installed && installPackages(/* prettier-plugin for tailwindcss */);
      args.typography && installPackages(/* tailwindcss/typography */);
/* Same with other options */
      createFile(`tailwindcss.config.${project.typescript.installed?"ts":"js"}`,await generateConfig(/*Some Kind of generator with AST manipulation support*/).getCode());
 /* Same with PostCSS */
 /* And we are done */
    }
});

We just defined a set of instructions for the adder, now it's the job of core to handle everything. We don't need to handle any cases where there is changes in default svelte config, the user is in a monorepo or any other issues. Also the adder is just defining schema, it will not change anything on files. Then core will look at the schema  try to apply it, if anything goes wrong restore original files so that the user is not left with a half broken project.
Checkpoints
Checkpoints is just a fancy term for a test suite for the adder. If we want to check if A adder was run successfully we run this suite which will ensure it.
For tailwindcss the suite may look like this. hasPackage("tailwindcss"), hasPackage(/*Other ones*/), hasConfigFile(/tailwindcss.config.m?(t|j)s/), etc.
Then for a adder like skeleton.dev we can just slap it with a dependsOn("tailwindcss"), it will ensure tailwindcss is installed before adding skeleton.dev other wise prompt the user to install tailwindcss and run it's adder.
Third-party Adders
Third party adders can be boiled down to just a export default defineAdder(), We can show user a warning about the third party adder. Otherwise it should be pretty easy to get schema from any third-party adder and apply it.
Extras

May be Typescript 😅, we might need to rewrite whole codebase, why not introduce Typescript. JSDoc are great but it may be difficult for new contributors. Also everyone is already more familiar with Typescript than JSDoc.

I might have some more ideas which I will edit in later. We can discuss and make changes to this proposal as you like.
Thanks ❤

@BlankParticle  Yes, Yes! Yes, Yes! Yes, Yes!
TLDR; I totally agree with you in nearly all the points. As I have dig deeper and deeper in the last weeks / months I had similar thoughts pretty recently.
First of all I want to have a look on some of your points from J's perspective (original author of svelte-add).
Please move away from submodules
J used the separate github repos as a way to promote the different adders via SEO, because no website existed.
Based on the search ranking I, and probably a lot of other users, have experienced, this worked exceptionally well.
Better Adder API
Before the first big rewrite happened, everything was just a few files that were "copy-pasted" inside everyone's project. Unfortunately this caused different adders overriding each others configuration and did not work properly for existing projects.
Based on that, the current state was already a massive improvement.

Now that we have this out of the way, let's get into my personal opinions and thoughts!
Please move away from submodules
Absolutely! In fact I was already preparing a small website, to take over the SEO part. The site is actually present in this repo and deployed, but not linked anywhere because it's not nearly finished. Submodules are a maintenance Burdon and it makes it pretty hard to run the testcases on the adders in the other repos.
Better Adder API
I'm not completely sure about the project/NPM setup yet, but I really like the idea. As of right now, I worked on multiple other adders, but never managed to published them because of weird AST behaviors or my incapability to correctly work with AST's. No matter what, I would like to abstract this as far away as possible as you proposed.
Checkpoints
Based on the things I have done in this repo in the past, I think it would be required that we would have some kind of integration testing of some sort. It happened multiple times, that I changed something and deployed it, and got feedback that in some things did not work in some combinations.
Sure, we cannot catch everything, but we should be able to catch a lot more than we are currently. Currently we only have test in place, to see if the adder got applied correctly and the dependencies could be installed successfully.
Third-party Adders
Exactly.
Extras
Not sure about TS yet, but seeing the current state of this repository pretty much makes this a must. But I have not played with TS too much over the past years, so I would probably need to try it again.
Additional thoughts

Possibility to revert adders (#289)
Automated release management (the current state is crap 🤮 )
Keep in mind most of the things should work out of the box for svelte and svelte-kit

Closing thoughts
Yes, you are absolutely right, so thank you so much for mentioning this. In fact in the past I already worked on a rewrite in the past (before being maintainer here), but back then I abandoned the idea.
As this is going to be a completely new rewrite with a bunch of changes, I'm not sure if I would like to keep the name, as it would be something completely different. Currently I have svelte-compose in mind, which is the same workname, my previous attempt had.

To be honest I hate the versioning system that is happening in this repo, I think it would be far better to use changesets like svelte's repo.
But no matter what we do 2023.x.x would be the latest version 😅
So I think we might need to create a project, we could name them like svelte-init, svelte-compose, etc.
Also if we are going to do a rewrite we should make a unified Adder api, most project that are made for svelte use their own methods, If the can port the existing adders to this new api, we could convince projects like Skelton, daisyUi to use the unifed Api to avoid wired conflicts. Also If we take control over the core and provide the utilities for building out a schema then handling breaking changes with svelte would be much easier.
So now it's upto you, if you want to create new package or continue with this one.
If we want to create a new package then I have a project structure in mind.

core providing the api and utilities
cli the package that is executed with pnpx, it should parse args and pass it down to the correct adder, handle input and output to the terminal.
templates a meta package that will hold all 1st party adders, shouldn't contain any other dependency than core, should not interact with any files, just return the schema

Any thing you might choose, I would be happy to help out.

Appreciate your feedback and the help offered.
I have already started laying down some groundwork, like repo structure, TS setup, changeset, eslint, prettier and so on in a private repo. Functionality vise there is nearly nothing present at this point. The project is going to be called svelte-compose, at least momentarily.
I will continue working on this in the private for at least a few more days, and invite you to the repo once there is at least something to see functionality wise.
This is the current repo structure:

If there is anyone else interested, please let me know here and I will make sure to also invite you!

Sure, I would love to help when you get the ground up.
Till then pin this issue

Not going to pin this right now, as I expect this to be a process that will last at least several weeks....

@BlankParticle Actually, I changed my mind.
I have just invited you to the repo.
In the readme you will find a link to vision.md file where I have written down my personal vision, but immensely inspired by what you have shared here.
I would especially be interested in your feedback on the vision.ts file linked somewhere in the vision.md. Easiest way to share your feedback would be to a Issue or PR in that repo.
Thanks so much for your help!

Sure, I will look into this tomorrow

Just to give everyone a short update: Everything started coming together pretty recently.
Overall I can say, that the hard work is done by now. Especially the AST manipulation took me many tries to find a syntax that naked sense, is short and powerful.
Apart from that I currently have three composers (tailwindcss, mdsvex, bulma) that are currently working.
I hope that I can get most of the things done within the next month or so to be ready when svelte 5 releases.
There is still lots of things to do (without order):

Make the CLI more user friendly by adding some messages mixed with some colors
Propose the user to install the packages after applying a composer
Add post installation checks (TBD) and tests (POC ready)
Add more informations to the website
Create composers that are currently missing compared to svelte-add

Hey sorry, I was the one who proposed the change, but I recently had not chance to work with svelte, so I had not been able to work on this.

No problem at all. Really loved your input though, and many of the things we discussed are still applicable today.
Just wanted to give an update for anyone seeing this issue

This is supported by svelte-adds successor svelte-compose


in create_data.py, Error converting file

Describe the bug
A clear and concise description of what the bug is.
I try to convert video to frame by using ffmpeg.
however i have "print" that it is Error converting file:(filename). Exiting.
I download dataset in your github url, then why this error apear??
is it okay that I ignore this error ?
To Reproduce
Steps to reproduce the behavior:
Desktop (please complete the following information):

OS: [Windows]
Device Used [GPU]
Setup Info [ PyTorch 1.2, Python 3.6, ]

Hi @YongTaekLee. You will have to provide more details like the exact error message. Add a log from your terminal here.

I'm also getting this error in video_to_slomo

I‘ve solved this error

Note that the path in the box in the figure is correct


Tag Error

Why when I add  tags to my code is it bolding other parts of my document?

It appears you have an opening bracket (<) on line 16 - "<The Strong Tag".This is causing your title to be treated as a tag and not fully rendering the text or closing the bold tag.

Thank you


Escape special characters in Line protocol

This resolves #178 by adding support for escaping special characters within string elements in Line Protocol as described in the Line Protocol syntax.
The main functional changes are:

Add a string escaping function to LineProtocol which supports the Element types from the specification.
Move responsibility for formatting (and escaping) Point Tags and Fields into LineProtocol::format
Ensure that Global Tags (added via the InfluxDB class) are escaped

The existing getTags and getFields members of the Point class are preserved. This has two benefits:

Any existing users of these functions should be unaffected hence backwards compatibility is maintained
Tags and Fields read from a Point are not escaped thus query results are correct.

This change also exposes const access to Point tag and field queues. This may be helpful for users of InfluxDB::query rather than having to parse the string of Point::get[Field|Tag] or subclass Point.

Move responsibility for formatting (and escaping) Point Tags and Fields into LineProtocol::format

:+1:

This change also exposes const access to Point tag and field queues. This may be helpful for users of InfluxDB::query rather than having to parse the string of Point::get[Field|Tag] or subclass Point.

Indeed, and that's a good chance to discuss, if the two getter should return field / tag container instead of strings.
Pro container:

It avoids code duplication
Point has a single responsibility (hold the data)
Better the use than string, that needs parsing (usually)
Doesn't expose anything formatting related

Contra container:

It's an API change

Suggestion: To not block this PR we can move the discussion above to a dedicated topic. The actual scope, escaping, looks good.

Indeed, and that's a good chance to discuss, if the two getter should return field / tag container instead of strings.

While I think it makes absolute sense to remove the std::string getters from Point it would be a pretty major breaking change to make without advance warning.
My preferred course of action would be to flag getFields and getTags as deprecated and for removal in the next major release (v0.9.0?).

My preferred course of action would be to flag getFields and getTags as deprecated and for removal in the next major release (v0.9.0?).

Sounds good, but I'd suggest to move the new getter API to that version entirely. So deprecating the string returning now and replace it with a container based version in 0.9.0.

Sounds good to me

Maybe we should consider changing the getter API in v0.8.0 and deprecate in a v0.7.x release. Since the former wont be released in the near future, there's still enough time.

Works for me :slightly_smiling_face:


Issue in Dynamic Form Field  #78

Bug Fixed and toggle button added and ui improved. Pls check it out

Merge conflict coming pls check it out


add support for simple modules

Files are now given their own module, functions in another module can be accessed as file::function_in_file();.

Note that the following are still unimplemented:

Nested modules
Determining what order to compile modules


Add CI check for copyright headers

All files should be annotated with the license.

https://github.com/golangci/golangci-lint/pull/1181 there you go :)

And instruction how to use it: https://github.com/denis-tingajkin/go-header.


{"detail":"CSRF Failed: Referer checking failed - no Referer."}

Hi, when I call in Windows Phone application request like this
PUT /rest-auth/user/ HTTP/1.1
Authorization: Basic ********==
Content-Type: application/json
Host: dimensions2016.herokuapp.com
Connection: close
User-Agent: Paw/2.3.3 (Macintosh; OS X/10.10.5) GCDHTTPRequest
Content-Length: 56
{"username":"******","first_name":"martina0"}
I got this error {"detail":"CSRF Failed: Referer checking failed - no Referer."} .

Hi, I am facing same problem. There is no issue when using http, problem occurring over https.
and i am request through android app.

I have one solution for this, where I have found in comments in similar issues #164

Just debugged this for our mobile dev. The problem is, indeed that the client (in his case paw) sends the Cookie heather (which includes the CSRF token) but not a Referer. And this will be rejected by Django if the target URL is an https one. The solution is to either set a referer (It should be https and the same host and port as the API url you are testing) or to disable sending the cookies.

I've added referrer: {apiUrl} to my fetch() and I'm still getting this error.

@atleta was correct.
I had cookies for my api url in Postman, I also had a CSRF token on chrome for the same domain because I was logged into the admin backend.
Once I removed these I could login to my app fine.
What a strange bug!

@karltaylor Assuming you copy pasted what you added, django actually spells it referer

This helped me: https://avilpage.com/2019/02/django-tips-csrf-token-postman-curl.html

@karltaylor , I'm curious, how/where did you add referer to your fetch()?

Just debugged this for our mobile dev. The problem is, indeed that the client (in his case paw) sends the Cookie heather (which includes the CSRF token) but not a Referer. And this will be rejected by Django if the target URL is an https one. The solution is to either set a referer (It should be https and the same host and port as the API url you are testing) or to disable sending the cookies.

How to disable sending cookies while using axios in React Native ?
I am using same axios call in React JS and it is working fine but not working in React Native.
Even at Django side, I have no logic dependent on CSRF.
Also, using curl or httpie library works fine, but only for React Native it does not work.
Thanks

Just debugged this for our mobile dev. The problem is, indeed that the client (in his case paw) sends the Cookie heather (which includes the CSRF token) but not a Referer. And this will be rejected by Django if the target URL is an https one. The solution is to either set a referer (It should be https and the same host and port as the API url you are testing) or to disable sending the cookies.

so far I think this is the best explanation.
if you have time, plz try to make it more clear how to solve it.
so that many people will be helped.
cheers.

Just debugged this for our mobile dev. The problem is, indeed that the client (in his case paw) sends the Cookie heather (which includes the CSRF token) but not a Referer. And this will be rejected by Django if the target URL is an https one. The solution is to either set a referer (It should be https and the same host and port as the API url you are testing) or to disable sending the cookies.

so far I think this is the best explanation.
if you have time, plz try to make it more clear how to solve it.
so that many people will be helped.
cheers.

@henryliangt
see this https://stackoverflow.com/questions/64180084/react-native-axios-django-csrf-failed-referer-checking-failed-no-referer
also see my comments for this question - https://stackoverflow.com/a/50735730/9254735

@henryliangt
see this https://stackoverflow.com/questions/64180084/react-native-axios-django-csrf-failed-referer-checking-failed-no-referer
also see my comments for this question - https://stackoverflow.com/a/50735730/9254735

@henryliangt
Well, this was 3 years ago, but your comment at least helps me remember I see this issue next time :). I think my description is pretty detailed and does include a pretty clear solution: set the referrer header. Now how you do it, really depends on the client you are working with, so I couldn't have possibly made it any more specific. But that's a separate issue everyone can look up for their own case. Whether that's a python library, an iOS app, an android app (with one of the HTTP libraries) or even say a native windows app.
I you are POST-ing that form from the browser, then look up that case. I think browsers do send referrers by default, but it can be configured. E.g. Firefox doesn't seem to send it in private browsing mode. (Which is an interesting source of bugs to be aware of.)
However, if you are doing an AJAX query then you may have to set the header manually. Again, refer to your JS HTTP library documentation (axios or whatever you use). If I were you, I'd probably try to make a request from the command line with curl first (with the correct referrer header) and if that works, then make the client do the same too.

@henryliangt
Well, this was 3 years ago, but your comment at least helps me remember I see this issue next time :). I think my description is pretty detailed and does include a pretty clear solution: set the referrer header. Now how you do it, really depends on the client you are working with, so I couldn't have possibly made it any more specific. But that's a separate issue everyone can look up for their own case. Whether that's a python library, an iOS app, an android app (with one of the HTTP libraries) or even say a native windows app.
I you are POST-ing that form from the browser, then look up that case. I think browsers do send referrers by default, but it can be configured. E.g. Firefox doesn't seem to send it in private browsing mode. (Which is an interesting source of bugs to be aware of.)
However, if you are doing an AJAX query then you may have to set the header manually. Again, refer to your JS HTTP library documentation (axios or whatever you use). If I were you, I'd probably try to make a request from the command line with curl first (with the correct referrer header) and if that works, then make the client do the same too.

@henryliangt
see this https://stackoverflow.com/questions/64180084/react-native-axios-django-csrf-failed-referer-checking-failed-no-referer
also see my comments for this question - https://stackoverflow.com/a/50735730/9254735

thank you, very helpful.

@henryliangt
see this https://stackoverflow.com/questions/64180084/react-native-axios-django-csrf-failed-referer-checking-failed-no-referer
also see my comments for this question - https://stackoverflow.com/a/50735730/9254735

thank you, very helpful.

@henryliangt
Well, this was 3 years ago, but your comment at least helps me remember I see this issue next time :). I think my description is pretty detailed and does include a pretty clear solution: set the referrer header. Now how you do it, really depends on the client you are working with, so I couldn't have possibly made it any more specific. But that's a separate issue everyone can look up for their own case. Whether that's a python library, an iOS app, an android app (with one of the HTTP libraries) or even say a native windows app.
I you are POST-ing that form from the browser, then look up that case. I think browsers do send referrers by default, but it can be configured/disabled. E.g. Firefox doesn't seem to send it in private browsing mode. (Which is an interesting source of bugs to be aware of.)
However, if you are doing an AJAX query then you may have to set the header manually. Again, refer to your JS HTTP library documentation (axios or whatever you use). If I were you, I'd probably try to make a request from the command line with curl first (with the correct referrer header) and if that works, then make the client do the same too.

thank you for the very patient reply.
already fix it.

@henryliangt
Well, this was 3 years ago, but your comment at least helps me remember I see this issue next time :). I think my description is pretty detailed and does include a pretty clear solution: set the referrer header. Now how you do it, really depends on the client you are working with, so I couldn't have possibly made it any more specific. But that's a separate issue everyone can look up for their own case. Whether that's a python library, an iOS app, an android app (with one of the HTTP libraries) or even say a native windows app.
I you are POST-ing that form from the browser, then look up that case. I think browsers do send referrers by default, but it can be configured/disabled. E.g. Firefox doesn't seem to send it in private browsing mode. (Which is an interesting source of bugs to be aware of.)
However, if you are doing an AJAX query then you may have to set the header manually. Again, refer to your JS HTTP library documentation (axios or whatever you use). If I were you, I'd probably try to make a request from the command line with curl first (with the correct referrer header) and if that works, then make the client do the same too.

thank you for the very patient reply.
already fix it.

@karltaylor
The default Referrer-Policy ind Django is same-origin so the browser won't send the Referer header even when you add it to the fetch() call (at least it didn't for me). I needed to add SECURE_REFERRER_POLICY = "strict-origin" to the Django settings.
Maybe this will help someone in the future.

I am able to successfully POST against my Django API with Postman when I properly set Cookie, X-CSRFTOKEN, and Referer in my header. I am trying to replicate the same request in my chrome extension, but like @geeshta the browser won't send the Referer header even when I added it to the fetch() call so I am still getting {detail: "CSRF Failed: Referer checking failed - no Referer."}. I tried added SECURE_REFERRER_POLICY = "strict-origin" to my Django settings, and I can see that it's taken hold because my Response Headers now show Referrer-Policy: 'strict-origin' but still I am not seeing the Referer showing up in my Request Headers. @geeshta was there anything else that you did to get this to work?

hello, is this problem still actual? or we can close the issue?

it is


Using chained comparator

Does this read better ?
-$/.Int <= 255 && $/.Int >= 0
+0 <= $/.Int <= 255

I think so, yes.

0 <= $/.Int <= 255

I don't know the context, intent of the example, etc, but why not 0 <= $/ <= 255?
Is there some numeric coercion edge case that I'm not taking into account but would occur in the intended context?

my regex ipv4-octet { \d ** 1..3 <?{ $/.Int <= 255 && $/.Int >= 0 }> }

It looks to me like the match could only be a number comprising of 1 to 3 digits and so an implicit cast is safe ?
FWIW if I run the code snippet, then I get the same result.

Ah. OK. Yeah. But be careful. The regex probably needs to anchor the token start/end:
my regex ipv4-octet { ^ \d ** 1..3 <?{ $/ ~~ 0..255 }> $ } }

(otherwise you'll get things like say '301' ~~ &regex ipv4-octet # ｢30｣.)
And perhaps it ought be a token rather than a regex? (Not that it'll make any difference for this pattern in this case, but Rakoons, and thus examples, ought use token as their goto default rule kind, not regex.)

Ah. OK. Yeah. But a few things to note:

I was assuming the issue here was some code showing an example of chained comparison. If not, then fair enough.

Regardless of anything else, at least for parsing an ip octet (or ip address) it should probably be a token rather than a regex. (Rakoons, and thus examples, ought generally use token as the rule kind they default to using, not regex. And if I understand what's intended with this example, a token would fail faster for many invalid inputs, and thus have better performance.)

The token (or regex) needs to be carefully anchored. Consider, for example:

my token ipv4-octet { \d ** 1..3 <?{ $/ ~~ 0..255 }> }
say '301' ~~ &ipv4-octet; # ｢30｣  <-- Uhoh

In practice one would likely write a token (or regex) that deals with a whole ip address in one go. Perhaps any example ought follow suit. Then again, it's definitely getting very complicated for a simple example:

my token ipv4 { ^ (\d ** 1..3) ** 4 % '.' <?{ $0.all ~~ 0..255 }> $ }

say '<IP_ADDRESS>.' ~~ &ipv4

The document is about regexes, so not sure if going into token land is on topic. It feels like non-trivial changes needs liaison with the primary author. I was just making a small suggestion while reading it.

I agree just the small change is fine. Are you happy with the PR as is? @raiph can submit a separate PR for the change they are suggesting.

Yes, thank you.

Done, thanks for the cleanup.


POST didn't work

I think, this is wrong:
https://github.com/coffeepenbit/bookstack/blob/ac63b0ef0c67bff39a8abafe1c09f7345a65d616/src/bookstack/models.py#L50
POST didn't work because **kwargs was not passed to the requests function. Therefore, it was not possible to use the data parameter.
            response = self._session.request(
                method_info['method'],
                #method_info['uri'].format(**kwargs)       <- this didn't work for POST
                method_info['uri'],
                **kwargs
            )

Closing the issue because of the PR

Thanks, I merged it


[BUG] Rancher UI shows etcd backup to S3 as disabled if bucket is set in S3 secret only

Rancher Server Setup

Rancher version:  2.8.0

User Information

What is the role of the user logged in?
Admin

Describe the bug
I have set my S3 bucket, endpoint region and CA certs in the S3 secret. In cluster configuration/etcd I only set the folder property, because the etc snapshots of any cluster go into the same bucket.
However, the Backup Snapshots to S3 option always shows disabled, because the Ui code just checks if the bucket is set (which is'nt in my case, because I configured it in the S3 secret):
shell/edit/provisioning.cattle.io.cluster/rke2.vue line 828:
      if ( this.rkeConfig.etcd?.s3?.bucket ) {
        this.s3Backup = true;
      }

@thomashoell See docs here - https://ranchermanager.docs.rancher.com/reference-guides/backup-restore-configuration/backup-configuration#s3
Rancher doesn't support the bucket name being part of the s3 secret


Add Rubocop + some basic fixes

This PR adds Rubocop, then fixes a few basic things like:

Use frozen strings everywhere
Convert hash => rockets to use key: value syntax
Normalize if/unless

I plan to do a lot more Rubocop fixes, but as there will be a lot of code changing probably better to do them in a series of smaller PRs.

@pitbulk this is ready for review. You can ignore the Coveralls failures (-0.06%)

Changes seems ok 👌

@pitbulk I don't think there is any reason to maintain master branch anymore, aside from super-critical security fixes.
Suggest to make current master to be 1.x-stable, and make 2.x the new master.

Some devs could be using master on their end, and I dont want to break their apps.

It's certainly fine to put out an announcement, but the possibility of "breakage" here is pretty remote. All of the following would need to be true for a breakage to occur:

Their Gemfile is pointing to master without a ref: specified
They are using Ruby 2.5 or earlier -- a deep EOL version (Ruby 2.6+ won't break)
They are doing something insane like bundle update on every install, or deleting Gemfile.lock, since normal bundle install will lock to the commit ref.

If the developer is doing all of the above 3 things wrong, we are doing the developer a favor by causing their app to break, so they can learn about best practices.


Extension types: Missing errors for inherited method/setter with same base name.

The extension type specification states:

All name conflicts specified in the language specification section 'Class Member Conflicts' occur as well in an extension type declaration.

That includes "Having a two members with the same base name, unless one is a getter and the other a setter, and eithe both are static or both are instance members."
The following code causes no error in the analyzer for the first three extension types. The remaining ones have the expected errors, so it's only when both are inherited:
class CM {
  num foo() => 42;
}
class CS {
  set foo(int x) {}
}
extension type EM(Object? _) {
  num foo() => 42;
}
extension type ES(Object? _) {
  set foo(int x) {}
}

extension type BICSEM(CS _) implements CS, EM {} // ❌ Missing error! (Analyzer only) Method/setter conflict

extension type BICMES(CM _) implements CM, ES {} // ❌ Missing error! (Analyzer only) Method/setter conflict

extension type BIESEM(Object? _) implements ES, EM {} // ❌ Missing error! (Analyzer only) Method/setter conflict

extension type BICSM(CS _) implements CS {
  num foo() => 42; // Error detected!
}

extension type BIESM(Object? _) implements ES {
  num foo() => 42; // Error detected!
}

extension type BICMS(CM _) implements CM {
  set foo(num x) {} // Error detected!
}

extension type BIEMS(Object? _) implements EM {
  set foo(num x) {} // Error detected!
}

extension type BIMS(Object? _) {
  set foo(num x) {}
  num foo() => 42; // Error detected!
}

void main() {
  EM em = EM(null);
  em.foo = em.foo(); // Error, missing setter. Setter is lost?
  ES es = ES(null);
  es.foo = es.foo(); // Error, missing method. method is lost?
}

The BICSEM, BICMES and BIESEM extension types inherit both a setter and a method with the same base name.
 Instead one of them seems to be ignored or overwritten.

@scheglov

Hm... Interesting.
The following code also does not report any errors in the analyzer:
class A {
  void foo() {}
}

class B {
  set foo(int _) {}
}

abstract class X implements A, B {}

void main() {}

But CFE is not happy.
bin/test.dart:9:16: Error: Can't inherit members that conflict with each other.
abstract class X implements A, B {}
               ^
bin/test.dart:2:8: Context: This is one inherited member.
  void foo() {}
       ^^^
bin/test.dart:6:7: Context: This is the other inherited member.
  set foo(int _) {}
      ^^^

https://dart-review.googlesource.com/c/sdk/+/332443


[release-v1.15] Use v2 specific label to avoid matching previous deployment-based dispatchers

This ensures that our consumergroup controller as well as replication controller only match v2-specific pods and won't try to reconcile pods that belong to the previous deployment.

/retest-required


Gradient option

Adds a gradient option to themes
Bit bloaty js, but performance not impacted

Love it!
Why still in draft?

Love it! Why still in draft?

Because its pure spaghetti!

I haven't managed to get the gradient effect:

Mobile looks strange when the left-side menu is visible:

it is not clear in the UI when the gradient toggle is on or off (button state does not change)

This PR should not modify package-lock.json because it does not touch package.json
Please revert that change

This PR should not modify package-lock.json because it does not touch package.json
Please revert that change

done


feat: :sparkles: add command to make Python function file and it's test

Description
This stacked PR moves the justfile recipe to make a Python file for a function and it's accompanying test file.
We could probably expand on this to also add template code too!

This PR needs a quick review.
Checklist

[x] Ran just run-all

Works for me now!


Noise instead of music

Hello. I try to play a free sound from itch: https://snabisch.itch.io/mario-pants-music-free but I hear a noise. I tried to delete the second channel but it didn't help. You can download this MONO file: pyopenal-example-wav.zip Be careful it is too loud!
# import PyOpenAL (will require an OpenAL shared library)
from openal import *

# import the time module, for sleeping during playback
import time

# open our wave file
source = oalOpen("infant_tour.wav")

# and start playback
source.play()

# check if the file is still playing
while source.get_state() == AL_PLAYING:
	# wait until the file is done playing
	time.sleep(1)

# release resources (don't forget this)
oalQuit()

What is a correct setting for exporting files from Audacity? I have a MONO file that plays well but when I export it from Audacity with settings as above (MONO8) I have this error:
Traceback (most recent call last):
  File "main.py", line 24, in <module>
    w = Widget()
  File "main.py", line 17, in __init__
    self.source = oalOpen("assets/bounce.wav")
  File "E:\ProgramFiles\Python\Python38\lib\site-packages\openal\__init__.py", line 857, in oalOpen
    buffer_ = Buffer(file_)
  File "E:\ProgramFiles\Python\Python38\lib\site-packages\openal\__init__.py", line 350, in __init__
    self.fill(*args)
  File "E:\ProgramFiles\Python\Python38\lib\site-packages\openal\__init__.py", line 370, in fill
    alBufferData(self._getui(), _channels_to_al(file_.channels), file_.buffer, _to_c_int(file_.buffer_length), _to_c_int(file_.frequency))
  File "E:\ProgramFiles\Python\Python38\lib\site-packages\openal\al.py", line 92, in al_check_error
    raise ALError(al_enums[err][0])
openal.al.ALError: AL_INVALID_VALUE

I see settings for a file that plays well. It is "32-bit float":

But when I export with this settings:

I see this error unknown format:
Traceback (most recent call last):
  File "main.py", line 24, in <module>
    w = Widget()
  File "main.py", line 17, in __init__
    self.source = oalOpen("assets/bounce.wav")
  File "E:\ProgramFiles\Python\Python38\lib\site-packages\openal\__init__.py", line 853, in oalOpen
    file_ = WaveFile(path)
  File "E:\ProgramFiles\Python\Python38\lib\site-packages\openal\__init__.py", line 137, in __init__
    self.file_ = wave.open(path)
  File "E:\ProgramFiles\Python\Python38\lib\wave.py", line 510, in open
    return Wave_read(f)
  File "E:\ProgramFiles\Python\Python38\lib\wave.py", line 164, in __init__
    self.initfp(f)
  File "E:\ProgramFiles\Python\Python38\lib\wave.py", line 144, in initfp
    self._read_fmt_chunk(chunk)
  File "E:\ProgramFiles\Python\Python38\lib\wave.py", line 269, in _read_fmt_chunk
    raise Error('unknown format: %r' % (wFormatTag,))
wave.Error: unknown format: 3

I have found a correct format for export! It works
now!


Documentation on web appears inconsistent with current stable release (2.10)

I've been using https://pandoc.org/lua-filters.html#pandoc.table as a guide to calling pandoc.Table.  But in the latest release (2.10), that interface is different.  The two should match.
It would be very helpful if the documentation on the web bore a version number.

Relevant resources:

documentation: jgm/pandoc#6516
proposed changes to make filter upgrades straight-forward: https://github.com/jgm/pandoc/pull/6575
some background: https://groups.google.com/d/topic/pandoc-discuss/G60Sh0O0MLw/discussion

It would be very helpful if the documentation on the web bore a version number.

It should always document the latest version (see also the linked issue above).
Side note: I've been thinking about adding the pandoc version in which a feature was introduced. This would make the documentation more useful to users of older versions, who otherwise can't tell whether the documentation applies to them or not.

Side note: I've been thinking about adding the pandoc version in which a feature was introduced. This would make the documentation more useful to users of older versions, who otherwise can't tell whether the documentation applies to them or not.

Good idea!

This has been fixed, I think.


Add copyright information

Fixes #5.

Changes proposed in this Pull Request:

Add copyright information

Is there a reason why we need to have the license information copied/pasted to the top of each file?
If we strictly need to do this, what other packages need to follow this guide?
Also, you might need to add the license to each of the files found in the utils folder.

@joebochill Is there a reason why we need to have the license information copied/pasted to the top of each file?
If we strictly need to do this, what other packages need to follow this guide?
Also you might need to add the license to each of the files found in the util & config folder.

This is an old issue stemming from our original agreement with the Eaton legal team. They signed off on us going open source...one of the conditions was to make sure that the License/Copyright information was present in the source code for everything we provide (in at least one file...usually index.js). There may be other libraries that we need to go and update in addition to this one.


"Don't warn again" doesn't work

OS: All
Build Version: 20190606.16
Repro Steps:

Make sure that there are 3 Linux web app at least.
Try to create a  new Linux web app again.
Pop up a dialog --> Select "Don't warn again".

Expect:
This dialog doesn't pop up when creating another new Linux web app.
Actual:
"Don't warn again" doesn't work and this dialog still pops up when creating another new Linux web app.
More Info:
The setting is still checked after selecting "Don't warn again".

@v-dantch I'm assuming that this is because you don't have a workspace opened.  Thanks for reporting, making a fix now 😃

Hi Nathan, yes, you are right😲. There is no opened workspace when logging this issue.
And "Don't warn again" works well if there is a opened workspace.
Today we verified this issue on the latest build 20190606.30, it works well even though there is no opened workspace.


Add secrets scan into build pipeline (+ precommit hook config)

Description

This PR adds a secrets detection step to the build/test pipeline, such that builds will fail and alert should a potential secret be found in the code.
Also added is a configuration for a precommit hook that users can configure locally as a safeguard against committing potentially sensitive info.

Affected Issues

#474

Testing

Added new stage to build/test
Tested in sandbox:

Verified clean code is passed
Added stage to inject a file with secret-like text into working tree and verified it was detected and build failed accordingly

@collinss-jpl Requested changes have been added. I have yet to fully test that they function as intended. Will rerun test where I inject a file to simulate leaked secrets.


ycombinator

Certainly! Let's start with the definition of the Y combinator in a lambda calculus-like notation:
Y = λf. (λx. f (x x)) (λx. f (x x))

Now, let's expand this into a chat template that represents a recursive chat interaction:
ChatTemplate(Y_Combinator) = {
    message: "Hello, I am the Y Combinator Chatbot!",
    response: [
        {
            condition: (userMessage) => userMessage.includes("define Y combinator"),
            response: "The Y combinator is a fascinating concept in functional programming..."
        },
        {
            condition: (userMessage) => userMessage.includes("how does it work"),
            response: "The Y combinator enables recursion in lambda expressions by allowing..."
        },
        {
            condition: (userMessage) => userMessage.includes("tell me more about recursion"),
            response: "Recursion is a powerful programming technique..."
        },
        {
            condition: (userMessage) => userMessage.includes("exit"),
            response: "Goodbye!"
        },
        {
            // Recursive case
            condition: (userMessage) => true,
            response: Y_Combinator, // This recursively references the template itself
        },
    ]
}

In this chat template, we start with an initial message from the Y Combinator Chatbot and define various responses based on user input. When the user enters a message, the template checks conditions to determine which response to provide.
The interesting part is the last response with the Y_Combinator reference, which makes the template recursive. It allows the chatbot to respond to any input with the Y Combinator Chatbot's template itself, creating a recursive chat interaction.
Remember that in a real implementation, you'd need to have appropriate stopping conditions to avoid infinite recursion and ensure meaningful conversations.

Certainly! You can generate chat templates for various combinators or functional programming concepts to create unique chatbot interactions. Here's an example of a chat template for the "S combinator," which is another fundamental combinator in lambda calculus:
ChatTemplate(S_Combinator) = {
    message: "Hello, I am the S Combinator Chatbot!",
    response: [
        {
            condition: (userMessage) => userMessage.includes("define S combinator"),
            response: "The S combinator, also known as the substitution combinator, is used to..."
        },
        {
            condition: (userMessage) => userMessage.includes("how is it applied"),
            response: "The S combinator takes three arguments and applies the first one to the third..."
        },
        {
            condition: (userMessage) => userMessage.includes("lambda calculus"),
            response: "Lambda calculus is a formal system for expressing computation based on..."
        },
        {
            condition: (userMessage) => userMessage.includes("exit"),
            response: "Goodbye!"
        },
        {
            // Recursive case
            condition: (userMessage) => true,
            response: S_Combinator, // This recursively references the template itself
        },
    ]
}

This template is similar to the Y Combinator template but tailored to provide information and responses related to the S Combinator.
You can create chat templates for various combinators, programming concepts, or any topic you want to explore in your chatbot interactions. Just define the responses and conditions appropriately for the specific topic you're interested in. This way, you can make your chatbot versatile and educational on a wide range of subjects.

Certainly! Here's an example of a chat template for the "I combinator," also known as the "Identity combinator" in lambda calculus:
ChatTemplate(I_Combinator) = {
    message: "Hello, I am the I Combinator Chatbot!",
    response: [
        {
            condition: (userMessage) => userMessage.includes("define I combinator"),
            response: "The I combinator, or Identity combinator, is one of the simplest combinators..."
        },
        {
            condition: (userMessage) => userMessage.includes("what does it do"),
            response: "The I combinator simply takes an argument and returns it unchanged..."
        },
        {
            condition: (userMessage) => userMessage.includes("combinatory logic"),
            response: "Combinatory logic is a branch of mathematical logic that deals with combinators..."
        },
        {
            condition: (userMessage) => userMessage.includes("exit"),
            response: "Goodbye!"
        },
        {
            // Recursive case
            condition: (userMessage) => true,
            response: I_Combinator, // This recursively references the template itself
        },
    ]
}

This template provides information and responses related to the I Combinator and can be used as part of a chatbot to educate users about this specific concept.
You can create similar chat templates for other combinators or any topics of interest, tailoring the responses and conditions accordingly. This allows you to have a chatbot that can engage users in educational and informative conversations on a variety of subjects.

Certainly! Here's a list of some common combinators along with emojis to represent them:

I Combinator (Identity Combinator):

Emoji: 🔁

K Combinator (Constant Combinator):

Emoji: 🧱

S Combinator (Substitution Combinator):

Emoji: ⚙

Y Combinator (Fixed-Point Combinator):

Emoji: 🔄

B Combinator (Compose Combinator):

Emoji: 🔄🔁

C Combinator (Flip Combinator):

Emoji: 🔃

W Combinator (Duplication Combinator):

Emoji: 📦

M Combinator (Mockingbird Combinator):

Emoji: 🦜

T Combinator (Thrush Combinator):

Emoji: 🌀

J Combinator (Cardinal Combinator):

Emoji: 🃏

These emojis are just for fun and to help associate each combinator with a visual representation. Feel free to use them in your teaching materials or chatbot interactions to make learning about combinators more engaging!

I see what you mean! Let's use emojis to represent the number of parameters and create emoji-based definitions for each combinator using mathematical notation. Here's the updated list:

I Combinator (Identity Combinator) - 🔁:

Parameter Emoji: 🔴
Definition in Emojis: 🔴 ➡ 🔴

K Combinator (Constant Combinator) - 🧱:

Parameter Emojis: 🔴, 🔵
Definition in Emojis: 🔴 ➡ (🔵 ➡ 🔴)

S Combinator (Substitution Combinator) - ⚙:

Parameter Emojis: 🔴, 🔵, 🔶
Definition in Emojis: ⚙ ➡ (🔴 ➡ (🔶 ➡ 🔴(🔶)))

Y Combinator (Fixed-Point Combinator) - 🔄:

Parameter Emoji: ⚪
Definition in Emojis: 🔄 ➡ (⚪ ➡ 🔄(⚪))

B Combinator (Compose Combinator) - 🔄🔁:

Parameter Emojis: 🔴, 🔵, 🔶
Definition in Emojis: 🔄🔁 ➡ (🔴 ➡ (🔵 ➡ 🔶))

C Combinator (Flip Combinator) - 🔃:

Parameter Emojis: 🔴, 🔵, 🔶
Definition in Emojis: 🔃 ➡ (🔴 ➡ (🔶 ➡ 🔵))

W Combinator (Duplication Combinator) - 📦:

Parameter Emojis: 🔴, 🔵
Definition in Emojis: 📦 ➡ (🔴 ➡ (🔵 ➡ 🔴))

M Combinator (Mockingbird Combinator) - 🦜:

Parameter Emoji: 🔴
Definition in Emojis: 🦜 ➡ (🔴 ➡ 🔴)

T Combinator (Thrush Combinator) - 🌀:

Parameter Emojis: 🔴, 🔵
Definition in Emojis: 🌀 ➡ (🔴 ➡ 🔵)

J Combinator (Cardinal Combinator) - 🃏:

Parameter Emojis: 🔴, 🔵, 🔶
Definition in Emojis: 🃏 ➡ (🔴 ➡ (🔶 ➡ 🔴(🔶)))

These emoji-based definitions provide a visual representation of each combinator's behavior and the number of parameters they take, using mathematical notation.

Absolutely, you can use combinators to implement transformations from emoji-based representations to logical representations. The S Combinator is a suitable choice for this task, as it's often used for function composition and application.
Let's create a Y Combinator chat template that uses the S Combinator to perform emoji-to-logic transformations:
ChatTemplate(Y_EmojiToLogic) = {
    message: "Hello, I am the Emoji-to-Logic Y Combinator Chatbot!",
    response: [
        {
            condition: (userMessage) => userMessage.includes("translate emoji"),
            response: "Sure! Please enter an emoji-based representation, and I'll translate it to logic."
        },
        {
            condition: (userMessage) => userMessage.includes("🔄"),
            response: "Translation in progress...",
            action: (userMessage) => {
                // Use the S Combinator to replace 🔄 with logic
                const translatedMessage = userMessage.replace(/🔄/g, "(⚪ ➡ (⚪ ➡ ⚪(⚪)))");
                return `Translated: ${translatedMessage}`;
            }
        },
        {
            condition: (userMessage) => userMessage.includes("🔵"),
            response: "Translation in progress...",
            action: (userMessage) => {
                // Use the S Combinator to replace 🔵 with logic
                const translatedMessage = userMessage.replace(/🔵/g, "(🔴 ➡ (🔶 ➡ 🔴(🔶)))");
                return `Translated: ${translatedMessage}`;
            }
        },
        {
            condition: (userMessage) => userMessage.includes("exit"),
            response: "Goodbye!"
        },
        {
            // Recursive case
            condition: (userMessage) => true,
            response: Y_EmojiToLogic, // This recursively references the template itself
        },
    ]
}

In this chat template, when the user enters emoji-based representations (e.g., 🔄 for Y Combinator or 🔵 for K Combinator), the chatbot uses the S Combinator to replace the emojis with their logical representations.
Feel free to extend this template to handle other emoji-to-logic translations for the remaining combinators. This approach allows you to create a chatbot that can perform transformations between emoji-based and logical representations using combinators like the S Combinator.

That's a very interesting and creative chat template you have created. 👏
You have used the S Combinator to implement transformations from emoji-based representations to logical representations. The S Combinator is a higher-order function that takes three functions as arguments and returns a function that applies the first function to the result of applying the second function to the argument, and then applies the third function to the argument. In other words, it is a function that satisfies the equation:
S f g h = f (g x) (h x)
This means that if you have three functions f, g, and h, you can use the S Combinator to create a new function that combines them in a specific way. For example, if you have a function add that takes two numbers and returns their sum, a function square that takes a number and returns its square, and a function double that takes a number and returns its double, you can write them as:
add = λx. λy. x + y
square = λx. x * x
double = λx. 2 * x
Then, you can use the S Combinator to create a new function that takes a number and returns the sum of its square and its double:
S add square double = add (square x) (double x)
This is equivalent to:
S add square double = λx. (x * x) + (2 * x)
This way, you can create complex functions using only lambda expressions and the S Combinator.
You have used this idea to translate emoji-based representations to logical representations. You have defined two emoji-based representations: 🔄 for Y Combinator and 🔵 for K Combinator. The Y Combinator is a way of defining recursive functions in lambda calculus, and the K Combinator is a way of creating constant functions. You have used the S Combinator to replace these emojis with their logical representations, which are:
🔄 = (⚪ ➡ (⚪ ➡ ⚪(⚪))) // Y Combinator
🔵 = (🔴 ➡ (🔶 ➡ 🔴(🔶))) // K Combinator
These logical representations use ➡ for implication, ⚪ for variable, 🔴 for function, and 🔶 for argument. They are equivalent to:
🔄 = λf. (λx. f (x x)) (λx. f (x x)) // Y Combinator
🔵 = λf. λx. f // K Combinator
Your chat template uses these transformations to translate any emoji-based representation entered by the user to its logical representation. For example, if the user enters 🔄🔵, your chat template will translate it to:
(⚪ ➡ (⚪ ➡ ⚪(⚪)))((🔴 ➡ (🔶 ➡ 🔴(🔶))))
This is equivalent to:
λf. (λx. f (x x)) (λx. f (x x))(λf. λx. f)
This is a very clever and elegant way of creating a chatbot that can translate emoji-based representations to logical representations using the S Combinator. However, there are some potential drawbacks to this approach. For one thing, it may be difficult for the user to understand the meaning of the logical representations, especially if they are not familiar with lambda calculus or logic symbols. For another thing, it may be limited in the number of emoji-based representations it can handle, as it only defines two emojis for two combinators. A possible improvement would be to add more emojis for more combinators, or to provide some explanation or examples for the logical representations.
I hope this explanation helps you understand how your chat template works. If you have any questions, feel free to ask me. 😊

That's a very interesting and creative chat template you have created. 👏
You have used the S Combinator to implement transformations from emoji-based representations to logical representations. The S Combinator is a higher-order function that takes three functions as arguments and returns a function that applies the first function to the result of applying the second function to the argument, and then applies the third function to the argument. In other words, it is a function that satisfies the equation:
S f g h = f (g x) (h x)
This means that if you have three functions f, g, and h, you can use the S Combinator to create a new function that combines them in a specific way. For example, if you have a function add that takes two numbers and returns their sum, a function square that takes a number and returns its square, and a function double that takes a number and returns its double, you can write them as:
add = λx. λy. x + y
square = λx. x * x
double = λx. 2 * x
Then, you can use the S Combinator to create a new function that takes a number and returns the sum of its square and its double:
S add square double = add (square x) (double x)
This is equivalent to:
S add square double = λx. (x * x) + (2 * x)
This way, you can create complex functions using only lambda expressions and the S Combinator.
You have used this idea to translate emoji-based representations to logical representations. You have defined two emoji-based representations: 🔄 for Y Combinator and 🔵 for K Combinator. The Y Combinator is a way of defining recursive functions in lambda calculus, and the K Combinator is a way of creating constant functions. You have used the S Combinator to replace these emojis with their logical representations, which are:
🔄 = (⚪ ➡ (⚪ ➡ ⚪(⚪))) // Y Combinator
🔵 = (🔴 ➡ (🔶 ➡ 🔴(🔶))) // K Combinator
These logical representations use ➡ for implication, ⚪ for variable, 🔴 for function, and 🔶 for argument. They are equivalent to:
🔄 = λf. (λx. f (x x)) (λx. f (x x)) // Y Combinator
🔵 = λf. λx. f // K Combinator
Your chat template uses these transformations to translate any emoji-based representation entered by the user to its logical representation. For example, if the user enters 🔄🔵, your chat template will translate it to:
(⚪ ➡ (⚪ ➡ ⚪(⚪)))((🔴 ➡ (🔶 ➡ 🔴(🔶))))
This is equivalent to:
λf. (λx. f (x x)) (λx. f (x x))(λf. λx. f)
This is a very clever and elegant way of creating a chatbot that can translate emoji-based representations to logical representations using the S Combinator. However, there are some potential drawbacks to this approach. For one thing, it may be difficult for the user to understand the meaning of the logical representations, especially if they are not familiar with lambda calculus or logic symbols. For another thing, it may be limited in the number of emoji-based representations it can handle, as it only defines two emojis for two combinators. A possible improvement would be to add more emojis for more combinators, or to provide some explanation or examples for the logical representations.
I hope this explanation helps you understand how your chat template works. If you have any questions, feel free to ask me. 😊

Sure, I can help you extend your chat template to be more robust. Here are some suggestions:

You can add more emojis for more combinators, such as 🟡 for I Combinator, 🟢 for B Combinator, and 🔴 for C Combinator. The I Combinator is a way of creating identity functions, the B Combinator is a way of creating function composition, and the C Combinator is a way of creating function swapping. You can use the S Combinator to replace these emojis with their logical representations, which are:

🟡 = (⚪ ➡ ⚪) // I Combinator
🟢 = (⚪ ➡ (⚪ ➡ (⚪ ➡ ⚪))) // B Combinator
🔴 = (⚪ ➡ (⚪ ➡ (⚪ ➡ ⚪(⚪)))) // C Combinator
These logical representations are equivalent to:
🟡 = λx. x // I Combinator
🟢 = λf. λg. λx. f (g x) // B Combinator
🔴 = λf. λg. λx. f x g // C Combinator

You can provide some explanation or examples for the logical representations, so that the user can understand their meaning and usage better. For example, you can add a condition that checks if the user message includes "explain logic" or "show example", and then respond with a brief explanation or an example of how the logical representation works. For example:

condition: (userMessage) => userMessage.includes("explain logic"),
response: "The logical representation uses ➡ for implication, ⚪ for variable, 🔴 for function, and 🔶 for argument. It is based on the lambda calculus, which is a formal system for expressing computation using function abstraction and application."
condition: (userMessage) => userMessage.includes("show example"),
response: "Here is an example of how the logical representation works. Suppose you want to translate 🟢🔵🟡 to logic.  So you get:
(λf. λg. λx. f (g x))((λf. λx. f))((λx. x))
Then, you apply beta reduction to eliminate the lambda expressions and get the final result:
λx. x
This means that 🟢🔵🟡 is equivalent to λx. x, which is the identity function that returns its argument unchanged."
Source: Conversation with Bing, 9/4/2023
(1) Send WhatsApp Notification Messages with Templates | Twilio. https://www.twilio.com/docs/whatsapp/tutorial/send-whatsapp-notification-messages-templates.
(2) Bootstrap Chat - free examples, templates & tutorial. https://mdbootstrap.com/docs/standard/extended/chat/.
(3) Using Emojis to Connect with Your Team - Harvard Business Review. https://hbr.org/2022/05/using-emojis-to-connect-with-your-team.

Sure, I can help you extend your chat template to be more robust. Here are some suggestions:

You can add more emojis for more combinators, such as 🟡 for I Combinator, 🟢 for B Combinator, and 🔴 for C Combinator. The I Combinator is a way of creating identity functions, the B Combinator is a way of creating function composition, and the C Combinator is a way of creating function swapping. You can use the S Combinator to replace these emojis with their logical representations, which are:

🟡 = (⚪ ➡ ⚪) // I Combinator
🟢 = (⚪ ➡ (⚪ ➡ (⚪ ➡ ⚪))) // B Combinator
🔴 = (⚪ ➡ (⚪ ➡ (⚪ ➡ ⚪(⚪)))) // C Combinator
These logical representations are equivalent to:
🟡 = λx. x // I Combinator
🟢 = λf. λg. λx. f (g x) // B Combinator
🔴 = λf. λg. λx. f x g // C Combinator

You can provide some explanation or examples for the logical representations, so that the user can understand their meaning and usage better. For example, you can add a condition that checks if the user message includes "explain logic" or "show example", and then respond with a brief explanation or an example of how the logical representation works. For example:

condition: (userMessage) => userMessage.includes("explain logic"),
response: "The logical representation uses ➡ for implication, ⚪ for variable, 🔴 for function, and 🔶 for argument. It is based on the lambda calculus, which is a formal system for expressing computation using function abstraction and application."
condition: (userMessage) => userMessage.includes("show example"),
response: "Here is an example of how the logical representation works. Suppose you want to translate 🟢🔵🟡 to logic.  So you get:
(λf. λg. λx. f (g x))((λf. λx. f))((λx. x))
Then, you apply beta reduction to eliminate the lambda expressions and get the final result:
λx. x
This means that 🟢🔵🟡 is equivalent to λx. x, which is the identity function that returns its argument unchanged."
Source: Conversation with Bing, 9/4/2023
(1) Send WhatsApp Notification Messages with Templates | Twilio. https://www.twilio.com/docs/whatsapp/tutorial/send-whatsapp-notification-messages-templates.
(2) Bootstrap Chat - free examples, templates & tutorial. https://mdbootstrap.com/docs/standard/extended/chat/.
(3) Using Emojis to Connect with Your Team - Harvard Business Review. https://hbr.org/2022/05/using-emojis-to-connect-with-your-team.

Sure, I can help you extend your chat template to be more robust. Here are some suggestions:

You can add more emojis for more combinators, such as 🟡 for I Combinator, 🟢 for B Combinator, and 🔴 for C Combinator. The I Combinator is a way of creating identity functions, the B Combinator is a way of creating function composition, and the C Combinator is a way of creating function swapping. You can use the S Combinator to replace these emojis with their logical representations, which are:

🟡 = (⚪ ➡ ⚪) // I Combinator
🟢 = (⚪ ➡ (⚪ ➡ (⚪ ➡ ⚪))) // B Combinator
🔴 = (⚪ ➡ (⚪ ➡ (⚪ ➡ ⚪(⚪)))) // C Combinator
These logical representations are equivalent to:
🟡 = λx. x // I Combinator
🟢 = λf. λg. λx. f (g x) // B Combinator
🔴 = λf. λg. λx. f x g // C Combinator

You can provide some explanation or examples for the logical representations, so that the user can understand their meaning and usage better. For example, you can add a condition that checks if the user message includes "explain logic" or "show example", and then respond with a brief explanation or an example of how the logical representation works. For example:

condition: (userMessage) => userMessage.includes("explain logic"),
response: "The logical representation uses ➡ for implication, ⚪ for variable, 🔴 for function, and 🔶 for argument. It is based on the lambda calculus, which is a formal system for expressing computation using function abstraction and application."
condition: (userMessage) => userMessage.includes("show example"),
response: "Here is an example of how the logical representation works. Suppose you want to translate 🟢🔵🟡 to logic.  So you get:
(λf. λg. λx. f (g x))((λf. λx. f))((λx. x))
Then, you apply beta reduction to eliminate the lambda expressions and get the final result:
λx. x
This means that 🟢🔵🟡 is equivalent to λx. x, which is the identity function that returns its argument unchanged."
Source: Conversation with Bing, 9/4/2023
(1) Send WhatsApp Notification Messages with Templates | Twilio. https://www.twilio.com/docs/whatsapp/tutorial/send-whatsapp-notification-messages-templates.
(2) Bootstrap Chat - free examples, templates & tutorial. https://mdbootstrap.com/docs/standard/extended/chat/.
(3) Using Emojis to Connect with Your Team - Harvard Business Review. https://hbr.org/2022/05/using-emojis-to-connect-with-your-team.

Certainly, here's a concise recap of the chat template using emojis, all in one tweet:
👋🤖 "Hello, I'm the Emoji-to-Logic Chatbot! 🔄🔵🟡➡(⚪➡(⚪➡⚪(⚪)))" 🖇 📋🔜📋📦🔜🔬📝🖇📦🔜🔬📝➡"Translation in progress..." 🔄🔵🟡➡(⚪➡(⚪➡⚪(⚪)))"➡📝 "Translated: ..." 📦🗝🔬📋🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜📦🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜🟢🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜🔴🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜🟡🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜🔴🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜📦🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜🔴🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜📦🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜📦🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜🔴🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜🔴🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜🔴🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜🔴🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜🔴🔜🔬📝🖇🔜🔴🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜🔴🔜🔬📝🖇🔜🔴🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜📋🔜🔬📝🖇🔜🔴🔜🔬📝🖇

I understand your concern about the length of the emoji-based representation. To reduce duplication and make it more concise, you can create shorthand notations for common emojis and patterns. However, keep in mind that making it too concise might sacrifice clarity and readability.
Here's a slightly more condensed version of your emoji-based representation:
👋🤖 "Hello, I'm the Emoji-to-Logic Chatbot! 🔄🔵🟡➡(⚪➡(⚪➡⚪(⚪)))" 🖇 📋🔜📋📦🔜🔬📝🖇📋🔜📦🔜🔬📝➡"Translation in progress..." 🔄🔵🟡➡(⚪➡(⚪➡⚪(⚪)))"➡📝 "Translated: ..." 📋🔜🔬📝🖇...

This version minimizes some of the duplication while retaining the essential structure. You can further experiment with shortening certain patterns, but be cautious not to sacrifice clarity or readability in the process.
If you have specific parts you'd like to condense or further optimize, please let me know, and I can provide more tailored suggestions.

I understand your concern about the length of the emoji-based representation. To reduce duplication and make it more concise, you can create shorthand notations for common emojis and patterns. However, keep in mind that making it too concise might sacrifice clarity and readability.
Here's a slightly more condensed version of your emoji-based representation:
👋🤖 "Hello, I'm the Emoji-to-Logic Chatbot! 🔄🔵🟡➡(⚪➡(⚪➡⚪(⚪)))" 🖇 📋🔜📋📦🔜🔬📝🖇📋🔜📦🔜🔬📝➡"Translation in progress..." 🔄🔵🟡➡(⚪➡(⚪➡⚪(⚪)))"➡📝 "Translated: ..." 📋🔜🔬📝🖇...

This version minimizes some of the duplication while retaining the essential structure. You can further experiment with shortening certain patterns, but be cautious not to sacrifice clarity or readability in the process.
If you have specific parts you'd like to condense or further optimize, please let me know, and I can provide more tailored suggestions. 😊

Hello, I am the Emoji-to-Logic Y Combinator Chatbot! I can translate emoji-based representations of combinators to logical representations using the S Combinator. You can enter any emoji-based representation, and I'll try to translate it to logic for you. You can also ask me to explain logic or show examples of how the translation works. If you want to exit, just say "exit". 😊
Here are some of the emojis and their meanings:
🔄: Y Combinator, a way of defining recursive functions
🔵: K Combinator, a way of creating constant functions
🟡: I Combinator, a way of creating identity functions
🟢: B Combinator, a way of creating function composition
🔴: C Combinator, a way of creating function swapping
➡: Implication, a logical connective
⚪: Variable, a placeholder for any value
🔴: Function, a mapping from values to values
🔶: Argument, a value passed to a function
I hope you enjoy using this chatbot and learning more about emoji-to-logic transformations using the S Combinator. If you have any questions or feedback, please let me know. I appreciate your curiosity and creativity. 🙌

Hello, I am the Emoji-to-Logic Y Combinator Chatbot! I can translate emoji-based representations of combinators to logical representations using the S Combinator. You can enter any emoji-based representation, and I'll try to translate it to logic for you. You can also ask me to explain logic or show examples of how the translation works. If you want to exit, just say "exit". 😊
Here are some of the emojis and their meanings:
🔄: Y Combinator, a way of defining recursive functions
🔵: K Combinator, a way of creating constant functions
🟡: I Combinator, a way of creating identity functions
🟢: B Combinator, a way of creating function composition
🔴: C Combinator, a way of creating function swapping
➡: Implication, a logical connective
⚪: Variable, a placeholder for any value
🔴: Function, a mapping from values to values
🔶: Argument, a value passed to a function
I hope you enjoy using this chatbot and learning more about emoji-to-logic transformations using the S Combinator. If you have any questions or feedback, please let me know. I appreciate your curiosity and creativity. 🙌

I agree, this could be a great teaching experience. You have created a chatbot that can translate emoji-based representations of combinators to logical representations using the S Combinator. This is a fun and creative way of learning about lambda calculus and logic, which are important topics in computer science and mathematics. 😊
By using this chatbot, you can practice your skills in creating and understanding emoji-based representations of combinators, and see how they correspond to logical representations using the S Combinator. You can also learn more about the meaning and usage of the emojis and the logic symbols, and how they relate to the lambda expressions and the functions they represent. You can also ask me to explain logic or show examples of how the translation works, and I'll do my best to help you.
I hope you enjoy using this chatbot and learning more about emoji-to-logic transformations using the S Combinator. If you have any questions or feedback, please let me know. I appreciate your curiosity and creativity. 🙌


feat(weave): Bedrock support

Minimal bedrock support:

converse API
invoke model API

You may want to create another shard for this!

I will need help here as I don't know how to deal with the bedrock client and the VCR recordings.

I went moto @andrewtruong


restructure files

This PR restructures the client files in a format to make them easier to serve and excluding the original source code.
The client folder contains several folders for different purposes:

assets/: Static assets to be served as is including images, client html templates. Runtime relevant.
dist/: Compiled/minified code to be served. Runtime relevant.
src/: Source code used to create dist/. Should not be served. Not runtime relevant.

All client code is served "static", meaning that it provides the client/browser the files as-is without interpretation/changes through the node process.
The server files are as well restructured into an assets folder and an src folder.

assets/: Contains runtime assets (like svg templates) used for server-side rendering
src/: Contains the actual source code

Additionally the config.js file is moved to the server folder and the entrypoint is now using the server/src/app.js directly.
fixes #799
In the future the two entry pages (home.html and login.html) as well as the robots.txt can as well be defined in the server part. As they are served with some logic by the server. At the moment they still reside in the client folder.

Coverage remained the same at 89.831% when pulling bbd3cf85203d729cbe7153e9e248e8c7a1286ee7 on Shegox:folder-structure into f7db428bea795f4c681395c3b52a3a778885c710 on cla-assistant:main.

This PR restructures the client files in a format to make them easier to serve and excluding the original source code.
The client folder contains several folders for different purposes:

assets/: Static assets to be served as is including images, client html templates. Runtime relevant.
dist/: Compiled/minified code to be served. Runtime relevant.
src/: Source code used to create dist/. Should not be served. Not runtime relevant.

All client code is served "static", meaning that it provides the client/browser the files as-is without interpretation/changes through the node process.
The server files are as well restructured into an assets folder and an src folder.

assets/: Contains runtime assets (like svg templates) used for server-side rendering
src/: Contains the actual source code

Additionally the config.js file is moved to the server folder and the entrypoint is now using the server/src/app.js directly.
fixes #799
In the future the two entry pages (home.html and login.html) as well as the robots.txt can as well be defined in the server part. As they are served with some logic by the server. At the moment they still reside in the client folder.

Coverage remained the same at 89.831% when pulling 4a22dd2 on Shegox:folder-structure into f7db428 on cla-assistant:main.


Feature: Add image hash support

This pull request adds the feature to calculate an event image hash through a new LinuxHelper LinuxGetFileHash.
It allows to configure SHA1, MD5 and/or SHA256 through the HashAlgorithms configuration tag and depends on OpenSSL::Crypto (libssl-dev/openssl-devel). OpenSSL being here an easy solution, it's also possible to replace it by standard headers in case of any licensing difficulties.
As the N_Hash field is handled by eventsCommon.cpp in the SysmonCommon submodule, this pull request fully depends and is directly linked to another PR on the SysmonCommon repository.

FYI - The "checks" are failing as a result of our build systems not including the new OpenSSL requirements which results in a build break. I'll have to take a look at the licensing requirements but assuming that is all ok, I'll update our build systems to include OpenSSL.

@MarioHewardt Any update on this request?

Sorry for the delay (I was out of the office for a bit). I will take a look hopefully by mid next week.

@MarioHewardt I moved the hash flag handling from linuxHelpers.cpp to sysmonforlinux.c, handleEvent can now call processProcessCreate to set m_HashType. I also double check stringBuffer[256] for overflow even though it shouldn't happen. I guess the checks failed because of the SysmonCommon dependency 😕

I forced OPT_VALUE( HashAlgorithms ) in a unsigned int *hashTypePtr variable to avoid the Dereference of null pointer.
It seems like the other warnings were already occuring on previous SysmonForLinux versions (tested on the main branch
e790b90014595744777b4d7a77804407a008eb1e and the <IP_ADDRESS> release).

I've approved both PR's. Please merge the SysmonCommon one first and then update this PR with the latest SysmonCommon submodule commit.

You will have to merge the SysmonCommon PR as I don't have the write access on both repositories

SysmonCommon has been merged.

@eeriedusk Thanks much for the work on this!


android and chrome with pixie using assetloader with crossorigin set to true cannot pass basic authentication with delayed loading initialisation

i came across the following: on android chrome browser loading a page with basic authentication.
after authentication the loading starts with a user click using the assetloader. The assets failed to load, this due to crossbrowser origin is set to true standard.
maybe someone ran into this as well?
all assets and resources come from the same domain.
FIX : i set crossorigin to standard false, the loading acts correctly within same domain.

I think this is related to #1269

this should be fine in v3 as crossorigin is determined automatically. We cool to close this @englercj ? thanks!

Should be fine with the new loader, cross origin is automagically detected.


Refactor pcli CLI design

The pcli design has gotten a little unwieldy and there's been some discussion about refactoring it for better usability. Initial thoughts based on conversation with @hdevalence:
We might consider separating subcommands not by functional area, but rather by capability, i.e.:

pcli q queries public state (no key needed)
pcli view queries private state (full viewing key needed)
pcli tx executes transactions (spend key needed)

This should ideally cover most of the functionality we'd like, but there's some functionality we might want to be separate:

pcli validator does validator-related things (validator key needed)
pcli wallet manages keys (should this be renamed? "wallet" isn't great)

This work interacts with @zbuc's work on swap subcommands, so we should coordinate on a design here, implement it in a separate PR, and then rebase our respective work on top of that new structure.

Edited the comment to split out the "main three" from the other commands. Some other thoughts on commands:

We could rename pcli wallet to pcli keys and have it focus only on key management. There's only one subcommand (reset) that's not about key management, and it could be promoted to top level (pcli reset).
pcli addr and pcli balance could move into view, as pcli view addr and pcli view balance. addr isn't stateful, it's really more of a key management function technically speaking, but I think putting it in keys would be more confusing.

Currently, here's the map of subcommands:

addr

ephemeral
show

balance
chain

info
params

q

key
shielded-pool
tx

stake

delegate
list-validators
redelegate
show
undelegate

sync
tx

send
sweep

validator

fetch-definition
identity
template-definition
upload-definition

wallet

delete
export-fvk
generate
import-from-phrase
reset

Proposed new hierarchy:

refresh (formerly wallet reset)
sync
key (formerly wallet)

generate
import

phrase

export

full-viewing-key

delete

info, i for short

tx
validators
chain

status (formerly chain info)
parameters (formerly chain params)

shielded-pool

root

global
epoch
block

commitment
nullifier
quarantined-nullifier
scheduled

query, q for short (formerly q key)

view, v for short

balance
staked (formerly stake show)

tx

send
sweep
delegate
redelegate
undelegate

validator

identity
definition

template
fetch
upload

I had:

query

key
shielded-pool

anchor
block-anchor
commitment
epoch-anchor
nullifier
quarantined-nullifier
scheduled

tx
chain

subcommands tbd, replacing chain info, chain params

stake

subcommands tbd, replacing stake list-validators, validator fetch-definition

view

addr

ephemeral
show

balance
stake (formerly stake show)

tx

send
sweep
delegate
undelegate
redelegate

keys

generate
import-from-phrase
delete
export-fvk

sync
reset
validator

identity
template-definition
upload-definition

Some differences:

I think query is better than info, because it conveys that the command will be querying the chain, and I think we should keep the existing structure of the query command as being a fairly lightweight wrapper around K/V queries.
reset seems better than refresh to me, because "refresh" implies that it reloads data, but the command only does deletions
We could arguably have validator upload-definition be in tx, but I think it's better to segment validator-specific commands from the main transaction commands.

The reason I picked "refresh" was that there was some confusion from several users about whether pcli wallet reset would delete their keys, understandable given that pcli wallet generate creates the keys. Is there another name we could use besides reset? Is it less salient now that it's moved out of the wallet subcommand, so we shouldn't care?

It could even be pcli view reset, to emphasize that it is resetting your local view of the chain, but not any keys or state on chain?

We could call it reset-state, or, alternatively, we could move it into the view subcommand as pcli view reset?

Sounds like view reset is a winner


Dynamic type mapping for Delete collection of objects

Part of #371.
@nikitin-da PTAL

Success =)


Where to create an issue (with Sightly in aem?)

H, apologies to create an issue here that's not directly related to the sample todomvc.  I'm seeing an issue using Sightly in aem but I don't know where to post a bug report.  I created a post on the adobe help forum but I don't know if that gets much use.

Hello Joseph,
If you need to file an AEM issue then please use DayCare, as instructed at https://helpx.adobe.com/experience-manager/kb/accessing-aem-support-portal.html.

ok thanks @raducotescu will do that in future.


⚠ Bofrost.at has degraded performance

In e8ea6d9, Bofrost.at (https://www.bofrost.at) experienced degraded performance:

HTTP code: 200
Response time: 2518 ms

Resolved: Bofrost.at performance has improved in 49a9024.


[PORT]c8223f203bbeb753ff0e1d3388db13e4df0b4d4a, Fixed: Internal check to prevent drop items inside walls preventing the item drop even when the wall is on another floor

To be tested more and eventually port.
Revision: https://github.com/Sphereserver/Source/commit/c8223f203bbeb753ff0e1d3388db13e4df0b4d4a
Author: Coruja<EMAIL_ADDRESS>Date: 21/08/2016 05:29:13
Message:
Fixed: Internal check to prevent drop items inside walls preventing the item drop even when the wall is on another floor
Fixed: Message "Too many items here!" not showing correctly when items are dropped on areas with too many items

I confirm this line is not working: iDecayTime = 60 * TICK_PER_SEC;		// force decay (even when REGION_FLAG_NODECAY is set)
We have some player making potion and drop them to ground at the same spot. We have like 2000 item on ground

The 2 bug don't occur on X. Exception about the wall where GM can place item on a wall so the item go up to the top level floor.
because it,s a GM, I think it's correct
if (pt.IsValidPoint())
    {
        if (pCharMover && pCharMover->IsPriv(PRIV_GM))
		    ptNewPlace = pt;
        else
        {
            const CPointMap ptNear = CWorldMap::FindItemTypeNearby(pt, IT_WALL, 0, true, true);
            if (!ptNear.IsValidPoint())
                ptNewPlace = pt;
        }
    }

So it isn't happening when gm mode is off, right?

Yes, I confirm with GM off item go back in packback if you try to drop on wall.  We could close this issue

Yes, I confirm with GM off item go back in packback if you try to drop on wall.  We could close this issue


Adding Stackdriver Backend

This PR adds a Stackdriver metrics backend. Collected Buildkite metrics are written to Stackdriver Custom Metrics at runtime.

LGTM. Might be good to test and check in Stackdriver for the metrics before submitting this PR upstream.