Initial work to add functions UI and db support

This is the start of work on adding functions to ChatCraft.  I'm initially targeting the database and UI, so we can create/manage functions.  Using them comes after this.
This PR adds a new set of "function" routes to the front-end, similar to what we have for Chats with /c/*:

/f/new creates a new function
/f/:id loads an existing function
/f/:id/delete deletes an existing function

I've using CodeMIrror 6 as the editor component.
As discussed in #86, I've done this first version by having all of the metadata get extracted from the code.  I'm not sure that what's required to make this happen is efficient, but it's working (i.e., the code has to be parsed and saved on every keystroke in the editor).  My computer is really fast, so it would be good to test this on something slower.
The alternative to what I'm doing here would be:

add a "Save" button to only save when you want (I already know what you'll say to this...)
debounce keystrokes, which means editor state and db are not totally in sync
move metadata out of code so it can be managed separately

However, maybe what I have here is fine.  I'm able to parse the JS code into a ES Module and get the default function.  If we wanted to call it for an LLM, that would be easy.
NOTE: I haven't bothered to add this to the Sidebar yet, since I want to figure out the db and editor part first, in case the data layout changes.

This approach seems logical, feel free to land it.

Added Functions to the sidebar so it's easier to navigate back and forth between chats and functions:

I suspect that this will change once we get code that can call these, but we need something to start with, so here it is.
NOTE: I've added "New" buttons in the sidebar beside "Recent Chats" and "Functions" so that you can easily get from one to the other.  Probably we'll need more links/UI.

@tarasglek, check this out.  Here's a function add an arbitrary list of numbers and format it:

Then I use it to do math:

The demo above passes all of your functions, which is obviously wrong, but let's me test it.  It then gets the response back, finds the function to call in the DB, invokes it with the arguments, and returns the result.
Lots of hacks and rough edges here, but I'm excited!  I need to clean up the code so it's generalized, and then find a way to tell the model to use particular functions in UI, but IT WORKS!

I pushed my hacky code, if you want to play along: don't land this.
To use it: create one or more functions, then write a prompt that can use them.  It will print the result if it can.

Added some basic UI to the message so it's clear that a function was called, which args were passed, and what the result was:

@tarasglek I've got this to the point that you can use it.  Here's how it works:

Create one or more functions (i.e., go to /f/new).  Here's an example:

/**
 * Example Function Module. Each function needs you to define 4 things:
 */

/* 1. Name of your function */
export const name = "sum";

/* 2. Description of function, used to describe what it does to an LLM */
export const description = "Adds all numbers passed to it, returning the total.";

/**
* 3. A JSON Schema defining the function's parameters. See:
*
* - https://platform.openai.com/docs/guides/gpt/function-calling
* - https://json-schema.org/learn/getting-started-step-by-step
*/
export const parameters = {
  type: "object",
  properties: {
    "numbers": {
      items: {
        type: "number"
      },
      description: "Array of numbers",
    }
  }
};

/**
 * 4. The function itself. Accepts an Object matching the schema
 * defined in params, returning a Promise<string> (i.e., should be
 * an async function).
 */
export default async function (data) {
  const { numbers } = data;
  const result = numbers.reduce((acc, current) => acc + current, 0);
  return result.toLocaleString();
}

Write a prompt and let ChatCraft know you want to use your function.  For example: Add these numbers: 10, 1000, 13, 134, 1345 @function: sum. I look for @functions: ..., @function: ..., @fns: ..., and @fn: ... (the prefix/format is something to figure out, but for now it works) and then extract the list of one or more function names.
If you include function(s) in your prompt, the LLM will use them, otherwise it's going to do the usual thing.

I struggled a lot to figure out the right UI to include functions easily in your chat, and it suddenly dawned on me that using plain text was probably the easiest.  It's not so discoverable, so we might want visual UI as well later.
Try this branch.  It lets us experiment with the ideas.

not having any luck..i defined a function and it's not passed into api

What is your prompt?

i.e., did you include "@function: runClickhouseQuery` to tell it to use that function?

Ok, sorry I was really confused by the UX. I got it now. It works!

Here is a small refinement of your work. I made it scan all human + system message for functions. this allows a more natural convo form.
I also allowed functions to provide own formatting.

I find the experience of having functions listed in sidebar to be good..nice to be able to switch between function and chat in sidebar
I find using chatcraft to edit functions frustrating. I propose we just list urls to gists or other CORS-fetch()able content..then just add a "reload functions" button(if functions are present) for handling the corner case of gists changing
I think in a followup we can get rid of special syntax for listing functions..we can just run a special chatgpt call every time system message changes, that extract all functions using some gpt parsing-using-functions trick..this would also validate the json schema for loaded functions..and could even pass those through another gpt prompt to suggest fixes :)

Here is a small refinement of your work. I made it scan all human + system message for functions. this allows a more natural convo form. I also allowed functions to provide own formatting.

This is useful, thanks.  We should make chat.messages({...}) take options to allow easily getting just those message types so you don't have to write code manually.

I find the experience of having functions listed in sidebar to be good..nice to be able to switch between function and chat in sidebar
I find using chatcraft to edit functions frustrating. I propose we just list urls to gists or other CORS-fetch()able content..then just add a "reload functions" button(if functions are present) for handling the corner case of gists changing. I provided a sample of how that would look in the screenshot...Would still like to be able to jump to them using sidebar per point_1
I think gists-for-functions also keep us to true to cause for sharing chats...no need to figure out how to share functions

I can see the value of being able to point at a URL and have it get pulled in, similar to how we pull code in from db.  However, I disagree that this is the best experience.  I think we should support both local (in db, edited in ChatCraft) and remote (URL) functions.
In addition, I'd be interested to her what's frustrating about editing locally.
Some thoughts about functions as URLs:

There will be two cases: 1) function served as text/plain (e.g., gist), which needs to be downloaded and parsed into a module (i.e., like what we do from db now); 2) function served as ES Module text/javascript (i.e., CDN), which we can simply import(url).  Both assume CORS, but we could proxy through Cloudflare too.  The latter is already usable by doing import whatever from 'url'; in your function.
What happens when I use a URL function in a chat?  Do we store the metadata info in memory (i.e., just for this session) or in db (i.e. ,survives sessions)?  The answer will help guide what happens in sidebar: should the sidebar show you all functions currently "in scope" (i.e., what's in db + what's memoized from previous use)?  What happens when you switch to a new chat?  Do the URL functions from the other chat live there too, or are they only accessible in the one where they were mentioned?
Locking us into gist as our function backend seems short-sighted.  A URL to a gist requires us to build infra for loading modules from any URL, so that opens the door to the whole web.
How would a URL function in the sidebar act when you click it? Would it redirect you?  Would it open the code in the local functions editor (maybe read-only)?

You talk about using functions in the system message, which I agree is a logical place for them.  However, I'm not sure you'd only want that.  For example, if I'm chatting with an LLM, and it suddenly gives me a bunch of numbers I want to do math on, I'd need to use a function part-way through the chat vs. from the start.  I think we should support functions being called anywhere in the chat.

I think we could also teach chatcraft to comment in gists when we share conversations with functions for SEO and general goodness :)
I think in a followup we can get rid of special syntax for listing functions..we can just run a special chatgpt call every time system message changes, that extract all functions using some gpt parsing-using-functions trick..this would also validate the json schema for loaded functions..and could even pass those through another gpt prompt to suggest fixes :)

You'll have to expand on these, I don't fully understand.

Thanks!  I'm really happy to have something less hand-wavy that we can talk about.  It's been hard getting to this point, and I'm excited it works.

As an experiment to play with your ideas, I've pushed another commit that lets you do this:
// Use one or more function names in the db
@fn: localFunctionName

// Use a URL to a function we load externally
@url: https://gist.github.com/...

  We could add some code to convert the format of the URL I guess.
Anyway, this works.  I've only lightly tested this code, so it might have bugs if you mix local + remote functions.

 We could add some code to convert the format of the URL I guess.
Anyway, this works. I've only lightly tested this code, so it might have bugs if you mix local + remote functions.

per chatcraft:
For the given Gist URL (https://gist.github.com/humphd/647bbaddc3099c783b9bb1908f25b64e), the raw URL would be:

https://gist.githubusercontent.com/humphd/647bbaddc3099c783b9bb1908f25b64e/raw

You can use this raw URL to access the raw content of the Gist programmatically.

@tarasglek I went over the code, I think it's probably good/safe to land.  But I have one question: will what we did here break interactions with models that don't support functions?  That is, do we need to add code to specifically check if the model being used can handle functions, or will it safely ignore them?  Can you try with your OpenRouter account?
If that's OK, I think this can land.

Reading the OpenAI docs on function calling, I think we need to append a message type for function responses, with role: function.  Here's an example:
import openai
import json

# Example dummy function hard coded to return the same weather
# In production, this could be your backend API or an external API
def get_current_weather(location, unit="fahrenheit"):
    """Get the current weather in a given location"""
    weather_info = {
        "location": location,
        "temperature": "72",
        "unit": unit,
        "forecast": ["sunny", "windy"],
    }
    return json.dumps(weather_info)

def run_conversation():
    # Step 1: send the conversation and available functions to GPT
    messages = [{"role": "user", "content": "What's the weather like in Boston?"}]
    functions = [
        {
            "name": "get_current_weather",
            "description": "Get the current weather in a given location",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "The city and state, e.g. San Francisco, CA",
                    },
                    "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
                },
                "required": ["location"],
            },
        }
    ]
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo-0613",
        messages=messages,
        functions=functions,
        function_call="auto",  # auto is default, but we'll be explicit
    )
    response_message = response["choices"][0]["message"]

    # Step 2: check if GPT wanted to call a function
    if response_message.get("function_call"):
        # Step 3: call the function
        # Note: the JSON response may not always be valid; be sure to handle errors
        available_functions = {
            "get_current_weather": get_current_weather,
        }  # only one function in this example, but you can have multiple
        function_name = response_message["function_call"]["name"]
        fuction_to_call = available_functions[function_name]
        function_args = json.loads(response_message["function_call"]["arguments"])
        function_response = fuction_to_call(
            location=function_args.get("location"),
            unit=function_args.get("unit"),
        )

        # Step 4: send the info on the function call and function response to GPT
        messages.append(response_message)  # extend conversation with assistant's reply
        messages.append(
            {
                "role": "function",
                "name": function_name,
                "content": function_response,
            }
        )  # extend conversation with function response
        second_response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo-0613",
            messages=messages,
        )  # get a new response from GPT where it can see the function response
        return second_response

print(run_conversation())

The key bit here is Step 4:
# Step 4: send the info on the function call and function response to GPT
        messages.append(response_message)  # extend conversation with assistant's reply
        messages.append(
            {
                "role": "function",
                "name": function_name,
                "content": function_response,
            }
        )  # extend conversation with function response
        second_response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo-0613",
            messages=messages,
        )  # get a new response from GPT where it can see the function response
        return second_response

We sort of do this now, but put it into an AI message. That should get fixed to add a ChatCraftFunctionMessage and some UI to display it.
Either I should do that in this PR, or in a follow-up.

That is, do we need to add code to specifically check if the model being used can handle functions, or will it safely ignore them? Can you try with your OpenRouter account?

This only works with the one chatgpt model, but it works on both openrouter and openai...So basically add a hardcoded a check to our model wrapper class to see if functions are supported, right next to logoUrl()

@tarasglek good idea, I've added a check to see if the model supports function calling.  In my experience, all of the OpenAI gpt models can do it, but some are better at it.  I've also noticed that I don't need to turn off streaming when using functions, which was bugging me when it responded with text, but I had to wait for it.
Can you review/test this?  I think it's probably good to land if you're happy.

From call with @tarasglek today, some things we need to change and/or adapt with how this works:

Currently, we store a function call + result in a ChatCraftFunctionMessage.  This doesn't map well to how functions work, not least because OpenAI requires 2 separate messages (one for call, one for result) to build the full context.  We should split ChatCraftFunctionMessage into a call and result as well.  One nice benefit of this is that it lets us show that something is happening while a function is running (e.g., might take some time).
We need a way to send the function call + result back to the LLM, so it can answer follow-up questions based on that new context.  We talked about adding some UI to let you trigger that, optionally being able to specify to always send results back during this chat session.
If an fn or fn-url are referenced in a system prompt, we could let the LLM decide whether to use it.  However, if referenced in a human message, and there's only one, we should probably send that function via the function_call param to the model, indicating that we want it to call this function (i.e., mentioning a function in a human prompt is intent vs. suggestion).

I think I should tackle the db side of 1. before we land this (since it will change things), and the rest can happen in follow-ups.

OK, I've completed 1. above, see https://github.com/tarasglek/chatcraft.org/pull/172/commits/86359eec66a26d2193c48d7fbd5c5eb1567f1a6a.
Here's what this does:

Like OpenAI, a "function" now has two parts: a function call, and a result.  I've created a ChatCraftFunctionCallMessage and a ChatCraftFunctionResultMessage to handle these.
In the UI, FunctionCallMessage and FunctionResultMessage components take care of rendering these.
I've moved the function invocation step out of the ai/use-chat-openai code, and put it after this code runs in ChatBase.  When a response comes back from the LLM, we add it to the message list, then check if it's a function and execute it if it is, adding the result when it completes.  It's the same logic, but split up across multiple files, since we now do it in stages.

I've also made a change to how the auto-scrolling works, and I'll need to build on it in follow-ups.  Previously, I only auto-scrolled when a streaming messages was coming in (and changed its value).  This breaks when we add new messages to the chat, so was broken for functions.  Fixing this is good for the function case, but it will create some weirdness when you delete a message high-up in the middle of a chat, or create new versions of a chat, etc.  I'll fix that later, but if it bugs people, we can disable the dependency on chat.date in the autoscroll effect.
This code was a bit of a pain to write and think through, but it's a much better design than what I had before.
@tarasglek please test this again, and I think it's ready when you're happy.

Works fantastic in my testing. Lets get this landed

OK, I've filed a bunch of follow-ups, and we'll need to probably file new things to improve this as we work with it.  Going to land.

This is the greatest pull request ever, excited :)

This is the greatest pull request ever, excited :)

I think we're on to something!  Thanks for helping me figure it out.


feat: adds portuguese language

This pull request adds the Portuguese version of the pages.
Pages on which the translation should be:

[x] header
[x] footer
[x] SEO
[x] home
[x] what-is-ebpf
[x] get-started
[x] case-studies
[x] labs
[x] events
[x] applications
[x] infrastructure
[x] contribute

@xmulligan Hello. I don't have enough translations to complete the localization for Portuguese. I have made a list to complete this task.
Pages on which the translation should be:

[ ] header
[ ] footer
[x] home
[ ] what-is-ebpf
[ ] get-started
[ ] case-studies
[ ] labs
[x] events
[ ] applications
[ ] infrastructure
[ ] contribute

Which parts are missing?

@xmulligan I didn't find a translation for two paragraphs and a title on the what-is-ebpf page.

@xmulligan Also, I didn’t find translations for the headings and buttons for the get-started page.

@xmulligan I'm sorry. For the get-started page, the translation is available in full. I made all the translations that were available and there is not enough translation for the contribute page.

@prosazhin @xmulligan (portuguese version)
Se um gancho predeterminado não existe para uma necessidade em particular , É possível criar um kernel probe (kprobe)ou usuário probe (uprobe) para anexar programas eBPF praticamente em qualquer lugar do kernel ou aplicações do usuário.
Como os programas de eBPF são escritos ?
Em muitos cenários,  eBPF não é usado diretamente mas sim indiretamente através de projetos como Cilium, bcc ou bpftrace que fornecem uma abstração em cima do eBPF e não necessitam de um programa de escrita diretamente, mas ao invés disso Oferecem a habilidade de especificar definições baseadas nas intenções que são implementadas com eBPF.

@prosazhin @xmulligan (portuguese version)
Se um gancho predeterminado não existe para uma necessidade em particular , É possível criar um kernel probe (kprobe)ou usuário probe (uprobe) para anexar programas eBPF praticamente em qualquer lugar do kernel ou aplicações do usuário.
Como os programas de eBPF são escritos ?
Em muitos cenários, eBPF não é usado diretamente mas sim indiretamente através de projetos como Cilium, bcc ou bpftrace que fornecem uma abstração em cima do eBPF e não necessitam de um programa de escrita diretamente, mas ao invés disso oferecem a habilidade de especificar definições baseadas nas intenções que são implementadas com eBPF.

@xmulligan All that's left is the translation for the contribute page.

Thanks @Hudsoncoutinho can you help with that too?

before continue, need to know if this translate will be pt or pt-br (pt=European portuguese; pt-br=Brazilian portuguese)
thanks

I had the same question, but based on the icon chosen to represent the language, I'm assuming it is Portuguese from Portugal.

This one should be Brazilian Portuguese. We are also working on a Portugal one, but that is separate.
@prosazhin can you update the flag to Brazil?

@xmulligan
what needs to be translated into Portuguese? please tell me the excerpt so I can help with that

@Hudsoncoutinho for the contribute page we need
How to Contribute to eBPF
eBPF consists of many communities including the eBPF runtime in the Linux kernel, various development SDKs and libraries, a series of large projects using eBPF, and a wide set of smaller projects and tools. There are therefore many ways to contribute to the eBPF community and get involved. The following list of ideas can serve as a starting point on how you can get involved and contribute to the community.
Maintainers of the eBPF runtime in the Linux kernel
Contribute to the eBPF runtime in the Linux kernel
The Linux kernel community is maintaining separate Git trees for the eBPF subsystem to manage all developer contributions. The trees are maintained by:
Alexei Starovoitov, Facebook
Daniel Borkmann, Cilium/Isovalent
Working on the eBPF runtime can be incredibly rewarding as it builds the foundation for software being written that runs on millions of systems and devices. Work includes a wide range of topics from adding support to additional hooks, adding new program types, improvements to the eBPF verifier, adding JIT support for additional CPU architectures, extending the set of BPF helpers, adding new test cases to BPF’s test infrastructure, or improvements to bpftool and libbpf.
Contribute to an eBPF project
The list of eBPF-based projects is long and growing. It will be simple to find a project that sparks interest. Check out the eBPF landscape to see an overview of eBPF-based projects.
Many of the listed eBPF-based projects maintain a list of good-first-issue-labeled tasks which are scoped to not require extensive project specific knowledge and provide a great opportunity to get hands-on quickly.
Contribute to the eBPF development toolchains
Even though the Linux kernel provides minimal libraries and APIs to use eBPF directly, the majority of projects leverage an eBPF development toolchain to simplify use of eBPF and share common code among other projects.
Check out eBPF development toolchains for a frequently updated list of projects in this space. You will find information on how to get involved on each project website directly.
EBPF DEVELOPMENT TOOLCHAINS
Contribute to ebpf.io
Do you have a writing talent? Are you good with diagrams? The content of the ebpf.io website is licensed under a Creative Commons Attribution 4.0 International License. If you want to get involved, visit the GitHub repository. Make sure to also join the #ebpf-website Slack channel to get in touch with the team working on the documentation. Share what you have learned by improving the documentation or write additional tutorials.

@xmulligan Hello. Please do not merge. I will make all the necessary changes.

@xmulligan I have made all the necessary changes, please check

@xmulligan Hello. I have made all the recent changes from the comments. It can be reviewed now.

Thanks for all the help @marcsvll @Hudsoncoutinho @cpanato ! Any last comments or changes before we merge the page?

Thanks for all the help @marcsvll @Hudsoncoutinho @cpanato ! Any last comments or changes before we merge the page?

Hello @xmulligan, apologies for the delay in my response. I have completed the review, and everything looks good to me.

i was a bit late for the final review :( but i've read and that makes sense to me, thanks for doing that


Work around Xcode 13 GM SDK issues.

Motivation:
Xcode 13 GM shipped with a Swift overlay for libsystem in macOS that
marked free's first argument as non-nullable. This leads to an awkward
breakage for us, because we're trying to hold a reference to free as a
function pointer, and to do that we had an explicit type annotation.
We'd like to keep NIO compiling in Xcode 13 GM.
Modifications:

Defined the free function as a thunk that passes through to the
underlying OS free call, but takes its first argument as non-nullable.

Result:
Should compile on the Xcode 13 GM again.
Resolves #1955.

@swift-nio-bot test perf please

No meaningful perf changes, which is nice.


DSA 4.3.4 Boyer Moore Algorithm - Audio/Video

Description
Discuss in detail the Boyer Moore Algorithm.
Two contributors may take up this issue depending on Audio or Video format.
Task

[ ] Video
[ ] Audio

Note

Do not use assign command for this issue.
While requesting the issue to be assigned, please mention your NAME & BATCH NUMBER.
Kindly refer to Issue Guidelines.
Changes should be made inside the DSA/directory & DSA branch.
This issue is only for 'GWOC' contributors of 'DSA' Domain.

Please assign the audio part of this issue to me
Elisha Singh
DSA- Batch 9

@Elisha-s you may try for some of these documentation topics as well by creating issue on your own.

https://github.com/girlscript/winter-of-contributing/tree/DSA/DSA/3.2 Greedy Algorithms/08. Fitting Shelves Problem
https://github.com/girlscript/winter-of-contributing/tree/DSA/DSA/3.2 Greedy Algorithms/07. Minimum Swaps for Bracket Balancing
https://github.com/girlscript/winter-of-contributing/tree/DSA/DSA/3.2 Greedy Algorithms/11. Boruvka's Minimum Spanning Tree
https://github.com/girlscript/winter-of-contributing/tree/DSA/DSA/3.2 Greedy Algorithms/19. Standard Array Greedy Algorithms


Gemnasium service hook

I'm building a new service and launch is right around (weeks) around the corner, so I want to preemptively add this service hook. It'll be required for launch. I'll be hitting up the IRCs when I need it in the UI but I'm also wondering if it'll become available via the service hooks API at that same time. Thank you!

Let me know when it's launched and I'll merge it in.  It doesn't take
much work on my part to do it.

Could we merge it in this morning? I'm not launched yet but want to wrap up some testing. Thanks, Rick!


problem with tracker hit associations (VXDTrackerHitRelations)?

using the nightlies, the last CLDConfig and CLD_o2_v06, VXDTrackerHitRelations (as well as other relation collections for the tracker hits) rec and sim index are filled with -2s
an example file can be found here:
/eos/experiment/fcc/ee/datasets/CLD_tracking/condor/Pythia_eval/Zcard_CLD_v3/1/out_reco_edm4hep_edm4hep.root

I would suspect this check
https://github.com/key4hep/k4EDM4hep2LcioConv/blob/73793abf6794c48e27c0a584e645d2f0a0377f48/k4EDM4hep2LcioConv/include/k4EDM4hep2LcioConv/k4Lcio2EDM4hepConv.ipp#L856
Still need to figure out why it fails though, maybe something in the translation mappings has changed unexpectedly recently @tmadlener?

When did it start failing? My suspicion would be that it's an issue related to TrackerHitPlane vs TrackerHit in the filling of the association. We have removed the association from TrackerHitPlane to SimTrackerHit in EDM4hep (https://github.com/key4hep/EDM4hep/pull/331). The corresponding changes in the converter are: https://github.com/key4hep/k4EDM4hep2LcioConv/pull/73 and https://github.com/key4hep/k4EDM4hep2LcioConv/pull/76

I think I found one suspicious bit but I don't think that it was the source of this error https://github.com/key4hep/k4EDM4hep2LcioConv/pull/83
As there are still associations created but just default initialised (which I would think from the -2) this check should not have been the problem.
Does it maybe just not work because the typeMapping.trackerHits that is also passed for TrackerHitPlanes contains a mapping to TrackerHit3D and not to the TrackerHit interface? I think that would fit with the above error :)

Does it maybe just not work because the typeMapping.trackerHits that is also passed for TrackerHitPlanes contains a mapping to TrackerHit3D and not to the TrackerHit interface? I think that would fit with the above error :)

indeed


Swashbuckle.AspNetCore.Cli not working in .net6

Using 6.2.3 and running dotnet add package Swashbuckle.AspNetCore.cli, I get
error: NU1202: Package Swashbuckle.AspNetCore.Cli 6.2.3 is not compatible with net6.0 (.NETCoreApp,Version=v6.0). Package Swashbuckle.AspNetCore.Cli 6.2.3 supports:
error:   - net5.0 (.NETCoreApp,Version=v5.0) / any
error:   - net6.0 (.NETCoreApp,Version=v6.0) / any
error:   - netcoreapp2.1 (.NETCoreApp,Version=v2.1) / any
error:   - netcoreapp3.0 (.NETCoreApp,Version=v3.0) / any
error: NU1212: Invalid project-package combination for Swashbuckle.AspNetCore.Cli 6.2.3. DotnetToolReference project style can only contain references of the DotnetTool type
error: Package 'Swashbuckle.AspNetCore.cli' is incompatible with 'all' frameworks in project 'xxx\Api.csproj'.

The project is an aspnet core api that was upgraded from 5 to 6 (simply by changing the TargetFramework to net6.0)

Seeing the same.

@domaindrivendev

Temporary workaround was:
cd "project"
dotnet new tool-manifest
dotnet tool install --version 6.2.3 Swashbuckle.AspNetCore.Cli

I have the same issue

Any updates about support of Swagger cli for .net 6.0 to generate documentation on build.

@sagar-sk15 I'm able to generate json documentation.  You can see a example here
Clone this repo and run it or pull down the docker image from docker hub.
Hope that's what your after 👍

@loanburger Thanks for response. are you able to generate it while building your project locally using vscode/visual studio?
Let me try your example.

Mm I can't remember if it got generated at build time or run time but pull down that project and take a look.

Please open a new issue if you still find this doesn't work with the latest version (6.5.0 right now).


Structure of books is not mirrored in docs

Having nested folder in books do not result in an arborescence in docs see the buld in my fork : https://github.com/Clonkk/getting-started/runs/2583163378?check_suite_focus=true

Hmm it seems like it's the fact that the folder structure doesn't exists that it fails. I tried and writeFile which Nimib uses internally can't create folders, they must already exist.

We could solve this in the nimble task using mkDir

Hmm it seems like it's the fact that the folder structure doesn't exists that it fails. I tried and writeFile which Nimib uses internally can't create folders, they must already exist.
And I guess it hasn't been a problem for Nimib prior to this because the HTML was always placed besides the nim file so the folders was guaranteed to already exist. Feels like an Nimib issue

another point to be fixed also in nimib. this is really helpful. I will open a meta issue in nimib to track all these discussions.

We could solve this in the nimble task using mkDir

feel free to add a temportary fix, but if you also want to try a PR* in nimib... 😄
*the idea as @HugoGranstrom noted would be to use an improved writeFile...

It should just be a matter of adding a splitFile and a createDir to make it work. I can fix a PR for Nimib if Clonkk doesn't beat me to it

PR submitted to Nimib: https://github.com/pietroppeter/nimib/pull/44 that should solve this issue

release a 0.1.1 with the fix merged: https://github.com/pietroppeter/nimib/releases/tag/v0.1.1


Setting the right values in "variables", "assumptions", "experimental_design" and "hypothesis" in the python script based on the attached sample data.

Setting the right values in variables, assumptions, experimental_design and hypothesis in the python script based on the attached sample data. We hypothesis that AR will be higher than TV. ie AR >TV.
sample_data.txt

I added your data and a sample Tea program to analyze it in the repo https://github.com/emjun/tea-lang/tree/master/examples/AR_TV
ar_tv.csv is a CSV of the data you gave (as a .txt file).
ar_tv_long.csv is a CSV in long format for your data.
ar_tv_tea.py is the Tea program!
You may have to change the data_path in the ar_tv_tea.py file, but it runs on my machine! Let me know what results you get. We can compare notes! :)
If you're wondering how I changed ar_tv.csv int long format, see the longify.py script here.

@chijiokeonukem - I haven't heard from you, so I am going to assume this issue is resolved.


Getting error: "Error: GraphQL request failed." while running "eas login"

Summary
I am trying to login using the command eas login but keep getting this error: Error: GraphQL request failed.
It came out of nowhere after I updated the eas cli to the latest version. After that I downgraded to version 9.0.7 which I was using previously but still getting the same error. I have tried resetting my router as well as changing internet connections as well as trying after a gap of 3 hours. Nothing is working. Keep in mind I am not running my react native expo code as of now. I am just trying to login into eas using the cli command and getting the error. The same error is happening with all the commands of eas cli but for now I just want to login and eas login is not working.
What platform(s) does this occur on?
Android
SDK Version
51
Environment
expo-env-info 1.2.0 environment info:
System:
OS: macOS 14.5
Shell: 5.9 - /bin/zsh
Binaries:
Node: 22.1.0 - /opt/homebrew/bin/node
npm: 10.7.0 - /opt/homebrew/bin/npm
Watchman: 2<IP_ADDRESS> - /opt/homebrew/bin/watchman
Managers:
CocoaPods: 1.15.2 - /opt/homebrew/bin/pod
SDKs:
Android SDK:
API Levels: 30, 31, 33, 34
Build Tools: 34.0.0
System Images: android-34 | Google APIs ARM 64 v8a
IDEs:
Android Studio: 2023.3 AI-233.14808.21.2331.11709847
Xcode: /undefined - /usr/bin/xcodebuild
npmPackages:
expo: ~51.0.6 => 51.0.8
react: 18.2.0 => 18.2.0
react-dom: 18.2.0 => 18.2.0
react-native: 0.74.1 => 0.74.1
npmGlobalPackages:
eas-cli: 9.0.7
Expo Workflow: managed
Minimal reproducible example
Run eas login on version 9.0.7 of the eas cli.

Hi @raahimkhan,
Can you try to run EXPO_DEBUG=1 eas login? It should reveal the underlying error and therefore help us check what the issue is.


[Enhancement] Add more error messages for CSV loading

For CSV loading, This PR adds more error messages for users to troubleshoot problems.
What type of PR is this:

[ ] BugFix
[ ] Feature
[x] Enhancement
[ ] Refactor
[ ] UT
[ ] Doc
[ ] Tool

Checklist:

[ ] I have added test cases for my bug fix or my new feature
[ ] This pr will affect users' behaviors
[ ] This pr needs user documentation (for new or modified features or behaviors)

[ ] I have added documentation for my new feature or new function

Bugfix cherry-pick branch check:

[x] I have checked the version labels which the pr will be auto-backported to the target branch

[ ] 3.0
[ ] 2.5
[ ] 2.4
[ ] 2.3

@Mergifyio rebase


Issues with Symlinks

Description
Having issues with app project running inside a lerna project.  The issue is a particular node module is replaced by a symlink and when adding the import statement the output returns a missing module inside node_modules.  That module is a symlink within the lerna project and doesn't seem include the module during export.  But when I run add the package such as yarn add the exported node_modules work. Is there settings or configuration to resolve symlinks?
Expected Behavior
Expected the symlinks to get resolved properly.
Observed Behavior
On the error I cleared out the cache and followed the recommended clearing of node cache.
Unable to resolve module `@test/test-redux` from `/projects/app/packages/app/App.js`: Module does not exist in the module map or in these directories: /projects/app/node_modules/@test

Environment
Ran this command to clear cache
watchman watch-del-all
rm -rf ./node_modules
npm cache clean
yarn cache clean
rm -rf $TMPDIR/react-*
yarn install
npm cache clean
yarn cache clean

Also specify:

Mac OS
iPhone Simulator & version: 10.2

I am getting the following when using lerna Failed building JavaScript bundle any help is welcome

Related: https://github.com/facebook/react-native/issues/637

I believe some work is happening upstream to improve symlink support for the RN packager, going to close this as this will be fixed once it is there. Thanks!


Schubert/refactor amqp test utils pd 731

This refactors ergo's amqp test utils with kombu, removing the pika implementation that was leaking file handlers and causing flakiness. I also made some substantial changes to the interface for these utilities, primarily to remove the dependence on AMQPComponents used as non-anonymous ContextDecorators, which turns out to not work well with pytest's fixture syntax.

Codecov Report

Merging #82 (7dcf035) into master (6ec2c49) will decrease coverage by 0.12%.
The diff coverage is 95.01%.

@@            Coverage Diff             @@
##           master      #82      +/-   ##
==========================================
- Coverage   68.39%   68.26%   -0.13%
==========================================
  Files          33       33
  Lines        1449     1440       -9
==========================================
- Hits          991      983       -8
+ Misses        458      457       -1

Impacted Files
Coverage Δ

ergo/amqp_invoker.py
31.73% <0.00%> (ø)

test/integration/utils/http.py
100.00% <ø> (ø)

test/integration/utils/__init__.py
80.00% <21.42%> (-13.43%)
:arrow_down:

test/integration/test_amqp/test_reply_to.py
75.60% <94.59%> (-1.22%)
:arrow_down:

test/integration/conftest.py
100.00% <100.00%> (ø)

test/integration/test_amqp/test_amqp.py
84.84% <100.00%> (+1.99%)
:arrow_up:

...est/integration/test_amqp/test_argument_binding.py
96.42% <100.00%> (+0.97%)
:arrow_up:

test/integration/test_amqp/test_scope.py
72.82% <100.00%> (+0.60%)
:arrow_up:

test/integration/test_gateway/test_gateway.py
88.57% <100.00%> (+0.33%)
:arrow_up:

test/integration/test_http.py
97.61% <100.00%> (ø)

... and 3 more

Continue to review full report at Codecov.

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


Missing inner array type dimensions errors do not include correct source locations

We currently have a test that checks that "Array dimensions can only be omitted for the outermost dimension", ConstraintsTest.test_error_on_missing_inner_array_size:
  def test_error_on_missing_inner_array_size(self):
    ir = _make_ir_from_emb("struct Foo:\n"
                           "  0 [+1]  UInt:8[][1]  one_byte\n")
    error_array = ir.module[0].type[0].structure.field[0].type.array_type
    self.assertEqual([[
        error.error(
            "m.emb",
            error_array.base_type.array_type.element_count.source_location,
            "Array dimensions can only be omitted for the outermost dimension.")
    ]], error.filter_errors(constraints.check_constraints(ir)))

This test passes as an error is generated and a source location is listed.
While working on a refactoring in #149 I noticed that the error itself is missing valid source locations: due to the nature of auto-generating fields as they're accessed error_array.base_type.array_type.element_count.source_location ends up yielding a default value which matches the default value generated by the compiler error.
We can reproduce this with the following:
$ cat test.emb
struct Foo:
    0 [+1]  UInt:8[][1]  one_byte
$ python3 ./embossc test.emb
test.emb:0:0: error: Array dimensions can only be omitted for the outermost dimension.

Note the error is at 0:0.

FYI @robrussell

This does point to a larger hole in the unit tests for error messages: they should either check the actual numbers for the source locations (thorough, but slightly brittle) or at least check that the source locations are not defaulted.

due to the nature of auto-adding fields as they're accessed

Just a minor point: (in the current implementation) fields aren't added as they are accessed, but they do have default values if they are read without being accessed.  ...element_count.HasField('source_location') should still return False here.

Just a minor point: (in the current implementation) fields aren't added as they are accessed, but they do have default values if they are read without being accessed. ...element_count.HasField('source_location') should still return False here.

Reworded to "auto-generating"


Headscale container keeps restarting

Bug description
After installing using this docker compose code, I keep getting this in the logs before the container restarts and tries again.
version: '3.5'
services:
  headscale:
    image: headscale/headscale:latest
    container_name: headscale
    volumes:
      - {my config directory}:/etc/headscale
    ports:
        - 8181:8181
        - 9090:9090
    command: headscale serve
    restart: unless-stopped
  headscale-ui:
    image: ghcr.io/gurucomputing/headscale-ui:latest
    restart: unless-stopped
    container_name: headscale-ui
    ports:
        - 9999:80

2024-02-19 00:16:53 Error: unknown command "headscale" for "headscale"
2024-02-19 00:16:53 Run 'headscale --help' for usage.

the headscale-ui container works ok.
Environment

Version of headscale: latest
OS: Windows 11 (Docker Desktop)
Docker version: 4.27.2

[ ] Headscale is behind a (reverse) proxy
[x] Headscale runs in a container

+1, running into the same error

https://github.com/juanfont/headscale/issues/1760#issuecomment-1947950051

https://github.com/juanfont/headscale/issues/1760#issuecomment-1947950051

Thanks, @fcodes0 just add to the compose file:
volumes:
  - ...
  - /var/run/headscale

#1760 (comment)

Thanks.
@fcodes0 just add to the compose file. Also change the command from "headscale serve" to "serve":
volumes:
  - ...
  - /var/run/headscale
command: serve

`I have same problem and did what you did but still same
@fcodes0 just add to the compose file. Also change the command from "headscale serve" to "serve":
volumes:

...
/var/run/headscale
command: serve
`

see my docker-compose.yml below
version: '3.5' services:   headscale:     image: headscale/headscale:0.22.3     container_name: headscale     volumes:       - /opt/headscale:/etc/headscale     ports:         - 8181:8181         - 9090:9090     command: headscale serve     restart: unless-stopped   headscale-ui:     image: ghcr.io/gurucomputing/headscale-ui:latest     restart: unless-stopped     container_name: headscale-ui     ports:         - 3838:80


[FEATURE] Include this action into the awesome list

Is your feature request related to a problem? Please describe.
It's not widely use.
Describe the solution you'd like
Update the https://github.com/sdras/awesome-actions#readme to list this action.

See https://github.com/sdras/awesome-actions/pull/598


Adding Static IP to ALB step missing?

[Enter feedback here]
"When you update the ingress controller, you must pass a parameter to the Helm release so the ingress controller is made aware of the static IP address of the load balancer"
At what point do we create a static ip at a load balancer? I only saw the instruction to create a regular static IP, but it is not associated with a load balancer.
Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: ada58160-dc50-b977-d3bc-65f92406e16d
Version Independent ID: 5c596e04-fddb-effe-3b72-575f4df42d4e
Content: Use TLS with an ingress controller on Azure Kubernetes Service (AKS) - Azure Kubernetes Service
Content Source: articles/aks/ingress-tls.md
Service: container-service
GitHub Login: @erik-ha-msft
Microsoft Alias: erikha

@ChaiSwaddipong As a prerequisite for Use TLS with an ingress controller on Azure Kubernetes Service (AKS) you'll need an ingress controller and applications set up as described in Before you begin which takes you to Create an ingress controller in Azure Kubernetes Service (AKS).  During this tutorial a Kubernetes load balancer service is created for the NGINX ingress controller and then the default dynamic public IP address is reconfigured to use an internal IP address.  When you create an ingress route, traffic to EXTERNAL_IP/static is routed to the service named aks-helloworld-one for static assets.

@ChaiSwaddipong Thank you again for your feedback!  We are going to close this thread as resolved but if there are any further questions regarding the documentation, please tag me in your reply and we will be happy to continue the conversation.


Word Blanks challenge difficult for ESL campers (and a bit obtuse for people who have never heard of madlibs)

Challenge Word Blanks has an issue.
User Agent is: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36.
Please describe how to reproduce this issue, and include links to screenshots if possible.
I wonder if this challenge is suitable for the large number of campers who speak english as a second language or if it could be re-worded so that understanding english sentence structure or the game "madlibs" is no longer required. I see a disproportionate number of campers unable to even begin this challenge, asking questions in the gitter chat rooms. If we could distill this challenge to its programming essence, I believe it would be good.

Maz

English is not my first. I can tell what I did: I just added random words =)
But I agree. If it was simpler would be more fun

English is my second language and I didn't find this challange difficult at all. A quick search explained what "madlibs" is and there is even a link to the Wikepedia.
But, I do agree that maybe there is a better way to explain the challange, without the use of the "madlibs" reference.

English is my first language and I still thought the exercise was a bit weird. A lot of these exercises I don't feel are very clearly laid out. The instructions are often worded in a weird way.. To me anyways.

Perhaps we should remove the MadLibs reference and use the Wikipedia entry for Phrasal Template? https://en.wikipedia.org/wiki/Phrasal_template

There has been discussion about this earlier https://github.com/FreeCodeCamp/FreeCodeCamp/issues/10100 and changes being merged https://github.com/FreeCodeCamp/FreeCodeCamp/pull/10172. I guess they just haven't been pushed up to production yet.
The changes made are something like this.

We will now use our knowledge of strings to build a "Mad Libs" style word game we're calling "Word Blanks". You will create an (optionally humorous) "Fill in the Blanks" style sentence. Here's an example incomplete sentence.
"The ______ ______ looked around ______ then ______ into the house"

These four blanks would be filled in this order: (adjective) (noun) (adverb) (verb)
You will need to use string concatenation to build a new string, result, using the variables myNoun, myAdjective, myVerb, and myAdverb. These variables are passed to the function as parameters.  Don't change these parameter names in the function.
Include additional strings and spaces (which will not change) in between the provided variables to make a complete sentence.

Any changes to be made to this?

Hi all! It seems this issue is very similar to #10100, so I'm closing it as a duplicate.
As Eric said above, if any changes should be made, or the new changes make things more confusing, please feel free to let us know what we should change into what and reopen the issue.
Happy coding!


generate random salt for 2 claims with same params

Description
2 claims with the same parameters will use the same salt. To fix that, we generate a random hex in the mix to generate the salt
Checklist:

[ ] Pull Request references Jira issue
[ ] Pull Request applies to a single purpose
[ ] I've added comments to my code where needed
[ ] I've updated any relevant docs
[ ] I've added tests to show that my changes achieve the desired results
[ ] I've reviewed my code
[ ] I've followed established naming conventions and formatting
[ ] I've generated a coverage report and included a screenshot
[ ] All tests are passing locally

For v1 this usage seems ok to me. Is it helpful to generate a new hidden file containing the random salt, for our records?


Clean up awkward sentence in docs.

Pretty simple, just making this sentence a bit easier to read and understand who gets the tokens.
Category (place an x in each of the [ ])

[ ] slack_bolt.App and/or its core components
[ ] slack_bolt.async_app.AsyncApp and/or its core components
[ ] Adapters in slack_bolt.adapter
[x] Document pages under /docs
[ ] Others

Requirements (place an x in each [ ])
Please read the Contributing guidelines and Code of Conduct before creating this issue or pull request. By submitting, you are agreeing to those rules.

[x] I've read and understood the Contributing Guidelines and have done my best effort to follow them.
[x] I've read and agree to the Code of Conduct.
[ ] I've run ./scripts/install_all_and_run_tests.sh after making the changes.

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

Thanks for the PR! If you could sign the CLA as per the CLAassistant's comment, I will merge the PR.

Closing for inactivity, the docs section of this project have also changed drastically since this PR was opened


RedisStreamSink Updates: new cloud based Redis instance, minor fixes, documentation cleanup etc

Proposed Changes

New support for Cloud based Redis instances for RedisStreamSink
Documentation changes
Minor namespace, sample fixes...

Release Note

Docs

/cc @lionelvillard

Can you add a release note?
/lgtm


Login/register function failing to fetch error

Problem persists, even though server has been started.

Tested server port, login and registration are both working, but it seems like it's not mapping correctly with frontend. May be Chrome cache issue, going to test with other browsers


implement TLS TCP echo example refs #42

Resolves #42 however I think I made a typo somewhere which causes the thing not to work while I  was translating it from java... help in spotting the mistake would be very welcome

This is the working java8 version: https://github.com/typesafehub/activator-akka-stream-java8/commit/c8e514ccca9806f5ab6579e5605b94018f27bbd0

Added two fixes:

added missing keystore
only shutdown client actor system when client finishes

This makes the example run without errors.


Why don't prefiles show pilot stats?

Seems to be just prefiles with this issue, they never show pilot stats on hover of the callsign.

Ok this isn't prefiles, it's pilots that are so new the vatsim stats API hasn't updated yet with numbers and returns a 404 for the cid.

It should still hyperlink the callsign and provide a link out to stats.vatsim.net if the CID exists.


Sessions vanish from vmq-admin session show with --peer_host

Environment

VerneMQ Version: 1.2.1
OS: Docker

Steps to reproduce
Using --client_id --is_online --peer_host I just get a few offline sessions. But I have a client connected! Where is it?
$ docker exec -it vernemq vmq-admin session show --client_id --is_online --peer_host
+--------------------------------+---------+---------+
|           client_id            |is_online|peer_host|
+--------------------------------+---------+---------+
|d4ac947cfa0fe5e8fae8e7a10cecd6e1|  false  |  null   |
|cf7ab0caba1cc99cde217634f68826c8|  false  |  null   |
|6055bd62e7100c1566d2aa74149d2fa3|  false  |  null   |
|848c54637ad78c4add73479edaf8da94|  false  |  null   |
|258e04ed88f6398abe703d12c5a35d2e|  false  |  null   |
|957bbf3feee5cd3b0bbdfbdc37cce42b|  false  |  null   |
+--------------------------------+---------+---------+

As soon as I remove --peer_host, I can see my connected client ("beancounter"):
$ docker exec -it vernemq vmq-admin session show --client_id --is_online
+--------------------------------+---------+
|           client_id            |is_online|
+--------------------------------+---------+
|d4ac947cfa0fe5e8fae8e7a10cecd6e1|  false  |
|cf7ab0caba1cc99cde217634f68826c8|  false  |
|          beancounter           |  true   |
|6055bd62e7100c1566d2aa74149d2fa3|  false  |
|848c54637ad78c4add73479edaf8da94|  false  |
|258e04ed88f6398abe703d12c5a35d2e|  false  |
|957bbf3feee5cd3b0bbdfbdc37cce42b|  false  |
+--------------------------------+---------+

The client is connecting from another container in the same docker network (created by docker-compose).

console.log says
[warning] <0.722.0>@vmq_ql_query:select:199 Subquery failed due to timeout

Every time I run vmq-admin session show --client_id --is_online --peer_host.
Nothing in the others.

Haven't figured out what this is caused by exactly - but we did a number of fixes to the vmq-admin session show command (especially in the filters) which we'll hopefully release with VerneMQ 1.2.2 one of the next days.
I wonder if your issue could be somehow dns related. I have a suspicion that vernemq (erlang) will try to look up the dns record of the client peer_host when we ask the socket for it. If this blocks this would block the query mechanism and a timeout would happen...

@larshesel peer_host should be extracted at connection time and is storef inside the session fsm state... so query shouldnt trigger a dns lookup

@dergraf we do call inet:gethostbyaddr/1 when fetching the info from vmq_mqtt_fsm which can result in a dns lookup. We should move this into the initialization of the fsm instead.
@trehn could you try and run your command with a higher timeout value (like 1000ms) as in the example below?
vmq-admin session show --client_id --is_online --peer_host --rowtimeout=1000

@larshesel No change, even with --rowtimeout=10000.

As we're quite sure the issue is indeed related to the gethostbyaddr/1 call we've made a fix for that and no longer try to translate IP-addresses into hostnames. This will be part of the next vernemq release. Let us know if you still have issues when it comes out.

Hi @trehn I guess this is still an issue... When you tested 1.2.3 were all nodes upgrade to 1.2.3 or were some of the cluster nodes still earlier versions?

@larshesel I only run a single node.

And it only happens for the client which you connect from another docker instance? Which MQTT client is used? Are there any other differences between the clients which is missing and the ones that aren't except that the one that's missing is coming from a specific docker instance? What happens if that client connects from somewhere else, does it work then?

It happens to all clients, from within Docker and from outside. These are the connections:
root@2839697331e3:/# netstat -atvpn | grep 8080
tcp        0      0 <IP_ADDRESS>:8080         <IP_ADDRESS>:*               LISTEN      -
tcp        0      0 <IP_ADDRESS>:8080         <IP_ADDRESS>:50052        ESTABLISHED -
tcp        0      0 <IP_ADDRESS>:8080         <IP_ADDRESS>:60212        ESTABLISHED -
tcp        0      0 <IP_ADDRESS>:8080         <IP_ADDRESS>:39812        ESTABLISHED -
tcp        0      0 <IP_ADDRESS>:8080         <IP_ADDRESS>:39708        ESTABLISHED -
tcp        0      0 <IP_ADDRESS>:8080         <IP_ADDRESS>:39892        ESTABLISHED -
tcp        0      0 <IP_ADDRESS>:8080         <IP_ADDRESS>:41838        ESTABLISHED -
tcp        0      0 <IP_ADDRESS>:8080         <IP_ADDRESS>:44896        ESTABLISHED -
tcp        0      0 <IP_ADDRESS>:8080         <IP_ADDRESS>:41886        ESTABLISHED -
tcp        0      0 <IP_ADDRESS>:8080         <IP_ADDRESS>:35060        ESTABLISHED -
tcp        0      0 <IP_ADDRESS>:8080         <IP_ADDRESS>:48842        ESTABLISHED -
tcp        0      0 <IP_ADDRESS>:8080         <IP_ADDRESS>:46630        ESTABLISHED -
tcp        0      0 <IP_ADDRESS>:8080         <IP_ADDRESS>:35806        ESTABLISHED -
tcp        0      0 <IP_ADDRESS>:8080         <IP_ADDRESS>:34500        ESTABLISHED -  # THIS ONE IS FROM ANOTHER CONTAINER
tcp        0      0 <IP_ADDRESS>:8080         <IP_ADDRESS>:39696        ESTABLISHED -
tcp        0      0 <IP_ADDRESS>:8080         <IP_ADDRESS>:48148        ESTABLISHED -
tcp        0      0 <IP_ADDRESS>:8080         <IP_ADDRESS>:40532        ESTABLISHED -
tcp        0      0 <IP_ADDRESS>:8080         <IP_ADDRESS>:37974        ESTABLISHED -
tcp        0      0 <IP_ADDRESS>:8080         <IP_ADDRESS>:41868        ESTABLISHED -
tcp        0      0 <IP_ADDRESS>:8080         <IP_ADDRESS>:39692        ESTABLISHED -

Using dig, I get a PTR record for <IP_ADDRESS> (automatically provided by Docker), but not <IP_ADDRESS>. The query for <IP_ADDRESS> fails without blocking for any significant amount of time:
root@2839697331e3:/# dig -x <IP_ADDRESS>

; <<>> DiG 9.9.5-9+deb8u15-Debian <<>> -x <IP_ADDRESS>
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 52885
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;<IP_ADDRESS>.in-addr.arpa.	IN	PTR

;; Query time: 14 msec
;; SERVER: <IP_ADDRESS>#53(<IP_ADDRESS>)
;; WHEN: Wed Feb 21 09:24:04 UTC 2018
;; MSG SIZE  rcvd: 52

Clients affected are the Paho ones for Python, JavaScript and Java.
Note that the clients that were visible in the OP were offline sessions. We don't use these anymore, so by now I either get an empty list (with --peer_host) or the correct list of all clients (without --peer_host).
Also note the time it takes the commands to complete:
root@2839697331e3:/# time vmq-admin session show --client_id --is_online --peer_host

real	0m2.322s
user	0m0.216s
sys	0m0.140s

root@2839697331e3:/# time vmq-admin session show --client_id --is_online
+--------------------------------+---------+
|           client_id            |is_online|
+--------------------------------+---------+
|a0106f05972b1361e8605dbd651d0d31|  true   |
|be30590ff9575fa93d13e6c289b11de4|  true   |
|bef002b698d127af74298358c3e77ba3|  true   |
|541fc67e054ba0296c73e8d33f6b02dc|  true   |
|b7d7f16f92ed2b6891fa40c2ad6f76c8|  true   |
|8c6d01eb961f595276ca00ec58197afa|  true   |
|3299ebd44949cb71cee8315175494f10|  true   |
|          beancounter           |  true   |
|557c14cc14da2174503ebfd969129472|  true   |
|3cbf7da6967f84df91813e18e6cc40a0|  true   |
|e8812df876595455dfc7b89acd9f0599|  true   |
|49c0143f6ccedf217d0ca83921e72796|  true   |
|f37ac69abf9f06ae5f7f8eeebf89aacd|  true   |
|7ffc988bb3eb16179036887756938c56|  true   |
|24d41034b04af1a5aa746df219f7edb6|  true   |
|415a0a08701e61177a5460504e600d3a|  true   |
|d31a2e3c243af5df540822b2c7ccde73|  true   |
|bfaae40a34387378b6cee60215c6b9f8|  true   |
|43cdaace865b0550d6a816ea7cc9f2ab|  true   |
+--------------------------------+---------+

real	0m0.399s
user	0m0.236s
sys	0m0.120s

I get one line of "Subquery failed due to timeout" for each connected client, nothing else in logs.

Ok, let's see if we can get a bit closer and see what the actual errors is when the peer_host lookup is done. First we need to obtain the session process id of one the sessions where the peer_host doesn't work like this:
vmq-admin session show --session_pid --client_id
+-----------+-----------+
| client_id |session_pid|
+-----------+-----------+
|test-client| <0.404.0> |
+-----------+-----------+

Afterwards attach to VerneMQ using vernemq attach command and in the shell try the following (replacing the actual pid into command):
(VerneMQ@<IP_ADDRESS>)1> vmq_mqtt_fsm:info(c:pid(0,404,0), [peer_host]).
{ok,[{peer_host,<<"<IP_ADDRESS>">>}]}

What happens when you do this?
To quit the Erlang shell press "Ctrl-g q".

To be completely certain of the VerneMQ version, could you output what vernemq version returns?

root@2839697331e3:/# vernemq version
1.2.3

The vmq_mqtt_fsm:info call just hangs and doesn't return (I aborted it after ~70 seconds). Happens for both the Docker-internal connections (which do have a PTR as noted earlier) and external connections (which do not).
Nothing in logs.

Another experiment, can you in the erlang shell do
> rp(sys:get_state(c:pid(0,402,0)).

With the correct session pid inserted?
For my process it returns something like:
{st,#Port<0.9138>,<<>>,vmq_mqtt_fsm,
    {connected,{state,1,
                      {[],<<"test-client">>},
                      undefined,#{},[],
                      {{127,0,0,1},32940},
                      <<"test-user">>,60,undefined,
                      {[],[]},
                      true,3,<0.405.0>,
                      {1519,218778,690843},
                      {1519,218658,536484},
                      true,100,prefer_local,20,0,20000,false,vmq_reg_trie,
                      {cap_settings,false,false,false,false},
                      undefined}},
    {tcp,tcp_closed,tcp_error},
    [],false,<0.351.0>}
ok

From which I can see the peer IP and port: {{127,0,0,1},32940}. Can you then do take the IP part and do the following in the shell:
> inet:ntoa({127,0,0,1}).
"<IP_ADDRESS>"

How does that look in your case?

(VerneMQ@<IP_ADDRESS>)1> rp(sys:get_state(c:pid(0,791,0))).
** exception exit: {timeout,{sys,get_state,[<0.791.0>]}}
     in function  sys:send_system_msg/2 (sys.erl, line 303)
     in call from sys:get_state/1 (sys.erl, line 112)

(VerneMQ@<IP_ADDRESS>)2> inet:ntoa({172,18,0,1}).  # just guessing that would've been the result
"<IP_ADDRESS>"

This is an indication that the session process is not responsive anymore and is blocked for some reason. What does the following return?:
> process_info(c:pid(0,791,0)).

(VerneMQ@<IP_ADDRESS>)1> process_info(c:pid(0,791,0)).
[{current_function,{cowboy_websocket,handler_loop,4}},
 {initial_call,{cowboy_protocol,init,4}},
 {status,waiting},
 {message_queue_len,0},
 {messages,[]},
 {links,[<0.477.0>,#Port<0.10108>]},
 {dictionary,[{socket_open,<<>>},
              {max_msg_size,524288},
              {mqtt_publish_sent,<<>>},
              {mqtt_pingresp_sent,<<>>},
              {mqtt_pingreq_received,<<>>},
              {mqtt_suback_sent,<<>>},
              {mqtt_subscribe_received,<<>>},
              {bytes_sent,<<>>},
              {mqtt_connack_accepted_sent,<<>>},
              {mqtt_connect_received,<<>>},
              {bytes_received,<<>>},
              {rand_seed,{#{max =><PHONE_NUMBER>51711743,next => #Fun<rand.8.41921595>,
                            type => exsplus,uniform => #Fun<rand.9.41921595>,
                            uniform_n => #Fun<rand.10.41921595>},
                          [68127008860634340|219891682082609665]}},
              {mqtt_publish_received,<<>>},
              {mqtt_pubcomp_sent,<<>>},
              {mqtt_pubrel_received,<<>>},
              {mqtt_pubrec_sent,<<>>},
              {guid,{{...},...}}]},
 {trap_exit,false},
 {error_handler,error_handler},
 {priority,normal},
 {group_leader,<0.68.0>},
 {total_heap_size,2595},
 {heap_size,2586},
 {stack_size,14},
 {reductions,9749363},
 {garbage_collection,[{max_heap_size,#{error_logger => true,kill => true,size => 0}},
                      {min_bin_vheap_size,46422},
                      {min_heap_size,233},
                      {fullsweep_after,0},
                      {minor_gcs,0}]},
 {suspending,[]}]

Ah, I  think the websocket processes doesn't support the sys:get_state/1 call, so that's probably fine. I suppose vmq_mqtt_fsm:info(c:pid(0,791,0), [peer_port]). works?

No, that one just blocks indefinitely.

ok - thanks - I'm now able to reproduce this here, it seems to be an issue with websockets - until now I'd just focused on normal tcp connections where I couldn't reproduce this issue. I'm looking into it.

Cool, thanks!

I created a fix in #614 - it'll be included in 1.4.0 and perhaps in 1.3.1 if we decide to do a bugfix release.

Thank you very much!

Thank you for the help - and I apologize for the low priority this have had. But I'm pretty sure we found the root cause this time!


Update .babelrc

Fixes an issue with hmr in production.
Related reading https://github.com/gaearon/react-transform-hmr/issues/5

Sorry about that! Fixed it!


LRN workspace question

The documentation says that workspace is an input parameter which implies that it's not supposed to contain any meaningful information after the LRN operation completes.
However, when do_backward is true and forward and backward use different workspace buffers  all values of dx output are nans.
Can you please clarify whether sharing workspace between forward and backward is required or not?

I think it's clear to me now, sorry for the noise.


fix response content length

Fixes #2398.
Now http.Response.ContentLength is always 0 even the response header includes content-length, this patch is to fix it.

@googlebot I signed it!

@googlebot I signed it!

Is this supposed to be a fix for #2398?
Can you add tests please?

Is this supposed to be a fix for #2398?
Can you add tests please?

@marten-seemann Done

@marten-seemann Done

@bachue Are you still planning to update this PR?

@bachue Are you still planning to update this PR?

@marten-seemann Working on it

@marten-seemann Working on it

@marten-seemann Done

@marten-seemann Done

@bachue Are you still working on this?

@bachue Are you still working on this?

Closing due to inactivity. Too bad, we were so close.


docs: update breaking_changes.md with v0.5.4 & v0.5.5

I can update the doc with another fix if you have a better way to do it
Type of change

[x] Documentation update

See: breaking_changes.md

I converted to draft to make some other tweaks to the docs at the same time instead of making another PR later

I closed this one and made a new pr that also includes this


Create MISP

MISP documentation

@m1nk-code can you verify and merge this one?

Created misp.md https://github.com/Shuffle/openapi-apps/blob/master/docs/misp.md


"Hide Scrollbar" Doesn't Work

0.39.0 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36

Need more info - which option is not working?

Only in watch page
In live-chat

Activate one of the options. For example the first(Only in watch page). I see no reason to hide the scrollbar on any page other than watch.
"Hide scrollbar" By itself, activating "Hide scrollbar" without internal options does nothing.

This plugin is a response to a request. Where 2 requests were merged into 1 plugin
https://greasyfork.org/en/scripts/433360-nova-youtube/discussions/170167


How does skywalking work with webflux？

Please answer these questions before submitting your issue.

Why do you submit this issue?
[ ] Question or discussion
[ ] Bug
[ ] Requirement
[ ] Feature or performance improvement

Question

What do you want to know?
How does skywalking work with webflux？

Bug

Which version of SkyWalking, OS and JRE?
skywalking ：6.1.0
ElasticSearch：6.3.2
webflux：5.0.8.RELEASE
Which company or project?
Gateway
What happen?
If possible, provide a way for reproducing the error. e.g. demo application, component version.

Webflux is nio and AsyncRestTemplate is nio. NullPointerException appears when threadLocal is used to obtain it. May I ask what has been done with spring-webflux_5.1.2.RELEASE? Do you have any plans to support other versions of webflux in the future?

Requirement or improvement

Please describe about your requirements or improvement suggestions.

Check our supported list, we have version supported list there in agent set up document.

I know you don't support 5.0.8.RELEASE version now. Do you have plans to support other versions of webflux in the future?

Or how do I need to modify it to support it

I know you don't support 5.0.8.RELEASE version now. Do you have plans to support other versions of webflux in the future?

Plugins developed and contributed for different frameworks and different versions, but it only comes from the community. Some contributors think one version is valuable to support, they could follow our development document, PR review, integration tests, in order to make it merged into the main repo. Like all these plugins you saw.
In SkyWalking, we are totally community-based and community-driven. So some new version supports require everyone like you to contribute.
But I found spring-webflux_5.0.8.RELEASE-spring-mvc_5.0.8.RELEASE in the test case, maybe there is some bugs, could you submit a new demo to help on reproducing this error?

Ok, so what I'm going to do is rewrite the demo and reproduce the problem,I need some time. any other requirements?

Just make us as easy as possible to make us run locally.

No update in a month


Cache: Make cache public

Fix: https://github.com/grafana/authlib/issues/19

Well right now we are not exposing a way to configure the cache even with this pr right? If you want that ability then I think authz should expose its own cache interface and expose wrapped errors?

Yes we are:
func WithCache(cache cache.Cache) ClientOption

But we can come back on that decision and provide:
func WithCacheOption(cache cache.CacheOption) ClientOption

oh yeah you are right, that is strange. We are exposing a function with an interface from an internal package..
Any way do we have a case for custom implementation of the cache? Otherwise we should not expose it and just cache options I guess and when/if we have a use case for custom cache we add support for it. No need to add stuff we don't need

My opinion on this is that right now it's useful for us to expose it and it's getting in the way of development. Let's optimize for now here and not for when this lib is used by a 1000 integrations.

Ok, let's merge this then, at least the cache would be override-able.


server.cfg is overwritten

Hi, i'm trying to set up custom map for pracc smokes with my friends, I put several arguments in server.cfg and redeploy the containter but .cfg is overwritten. I think I have to put it in CS2_ADDITIONAL_ARGS env but this doesn't work.

server.cfg is overwritten on every container launch by design.
I recommend you put your config in an alternative file, like my.cfg and launch it using CS2_ADDITIONAL_ARGS="+exec my.cfg"

Thank you very much for your help!
my.cfg file has been loaded correctly but with the competitive game mode (CS2_GAMEALIAS=competitive) my my.cfg settings are not activated by default, how can I load a map with the settings listed in my my.cfg file?
In summary, I simply pracc with my colleagues smokes and site executes.

Thank you very much for your help! my.cfg file has been loaded correctly but with the competitive game mode (CS2_GAMEALIAS=competitive) my my.cfg settings are not activated by default, how can I load a map with the settings listed in my my.cfg file?
In summary, I simply pracc with my colleagues smokes and site executes.

Can you share your .cfg ?

Can you share your .cfg ?
sv_cheats 1
bot_kick
mp_limitteams 0
mp_autoteambalance 0
mp_maxmoney 60000
mp_startmoney 60000
mp_buytime 9999
mp_buy_anywhere 1
mp_freezetime 0
mp_roundtime 60
mp_roundtime_defuse 60
mp_respawn_on_death_ct 1
mp_respawn_on_death_t 1
sv_infinite_ammo 1
sv_infinite_ammo 2
sv_showimpacts 1
sv_showimpacts_time 10
ammo_grenade_limit_total 5
mp_warmup_end
mp_restartgame 1

sv_grenade_trajectory_prac_pipreview 1
sv_setsteamaccount "....."

server.cfg is overwritten on every container launch by design.
I recommend you put your config in an alternative file, like my.cfg and launch it using CS2_ADDITIONAL_ARGS="+exec my.cfg"

Hello,
I'm trying to use this property CS2_ADDITIONAL_ARGS="+exec autoexec.cfg" but my config is not being loaded.
Can you confirm that this property is really working?
Thanks in advance,
Pedro

I recently added support for supplying a bundle of custom configs from a Tar Gzip at a specified URL. See: https://github.com/joedwards32/CS2#customisation-bundle

I recently added support for supplying a bundle of custom configs from a Tar Gzip at a specified URL. See: https://github.com/joedwards32/CS2#customisation-bundle

i dont understand what to add/ type there? There is no example :P

You could type:
CS2_CFG_URL="https://github.com/joedwards32/CS2/blob/main/examples/cs2.cfg.tgz"


URL for get-available-server-imports refer to not existing resource

Hi @bryanfriedman @jruckle ,
During our development we found that URL provided in get-available-server-imports always returns 404.
Then after investigation we found that correct URL for receive list of server import is https://api.ctl.io/v2/vmImport/{accountAlias}/{dataCenterId}/available.
Best Regards,
Ilya

Thanks, just updated the doc accordingly. Fix 5d82264.


Implement the most rudimentary pytest

Just to have a simple test that actually runs.

Implemented with this commit: ccddaf91d248be86c39f5e3f04f45a15703bff2a


Choosing fast-track delivery doesn’t change the price

May not be an issue, but the cost on the payment page is always £10, even if you've selected fast-track delivery for '£8.50 extra'.

@iqbalgds can you set up a second payment link for this?
Amount: £18.50
Description: Blue badge application fee (fast track delivery)

@quis Done - please use this link:
https://products.payments.service.gov.uk/pay/d3b0506a7c9049ae97dcf2d7bad5be5e§


qtox: 1.13.0 -> 1.15.0

Semi-automatic update generated by https://github.com/ryantm/nixpkgs-update tools.
This update was made based on information from https://repology.org/metapackage/qtox/versions.
These checks were done:

built on NixOS
Warning: no binary found that responded to help or version flags. (This warning appears even if the package isn't expected to have binaries.)
found 1.15.0 with grep in /nix/store/ii5kalmx3dsm3iavfy90nb6ii2wnlcly-qtox-1.15.0
directory tree listing: https://gist.github.com/18327d415b483b38e9a2085630084645

cc @viric @jgeerds @akaWolf @peterhoeg for review

Failure on x86_64-darwin (full log)
Attempted: qtox
Partial log (click to expand)
make[2]: *** [CMakeFiles/toxcrypto_shared.dir/build.make:121: libtoxcrypto.1.11.0.dylib] Error 1
make[1]: *** [CMakeFiles/Makefile2:402: CMakeFiles/toxcrypto_shared.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
2 warnings generated.
[  7%] Linking C executable auto_monolith_test
[  7%] Built target auto_monolith_test
make: *** [Makefile:141: all] Error 2
builder for '/nix/store/zj7bkpp3l4faagan5b566y12ipz7zi3s-libtoxcore-0.1.11.drv' failed with exit code 2
cannot build derivation '/nix/store/51yrcxb3xm577x7cdv8imqblxc53mb5b-qtox-1.15.0.drv': 1 dependencies couldn't be built
error: build of '/nix/store/51yrcxb3xm577x7cdv8imqblxc53mb5b-qtox-1.15.0.drv' failed

Success on x86_64-linux (full log)
Attempted: qtox
Partial log (click to expand)
post-installation fixup
shrinking RPATHs of ELF executables and libraries in /nix/store/ii5kalmx3dsm3iavfy90nb6ii2wnlcly-qtox-1.15.0
shrinking /nix/store/ii5kalmx3dsm3iavfy90nb6ii2wnlcly-qtox-1.15.0/bin/qtox
strip is /nix/store/j75dgadrff2d1fyc4fczmcgqkid2imdx-binutils-2.30/bin/strip
stripping (with command strip and flags -S) in /nix/store/ii5kalmx3dsm3iavfy90nb6ii2wnlcly-qtox-1.15.0/bin
patching script interpreter paths in /nix/store/ii5kalmx3dsm3iavfy90nb6ii2wnlcly-qtox-1.15.0
checking for references to /build in /nix/store/ii5kalmx3dsm3iavfy90nb6ii2wnlcly-qtox-1.15.0...
postPatchMkspecs
postPatchMkspecs
/nix/store/ii5kalmx3dsm3iavfy90nb6ii2wnlcly-qtox-1.15.0

Success on aarch64-linux (full log)
Attempted: qtox
Partial log (click to expand)
post-installation fixup
shrinking RPATHs of ELF executables and libraries in /nix/store/5wi6xf41dfkrhxa7vdd1kpjkvz4n5il4-qtox-1.15.0
shrinking /nix/store/5wi6xf41dfkrhxa7vdd1kpjkvz4n5il4-qtox-1.15.0/bin/qtox
strip is /nix/store/j7d4mr0ikv974ig7yzhknpsq288js4bs-binutils-2.30/bin/strip
stripping (with command strip and flags -S) in /nix/store/5wi6xf41dfkrhxa7vdd1kpjkvz4n5il4-qtox-1.15.0/bin
patching script interpreter paths in /nix/store/5wi6xf41dfkrhxa7vdd1kpjkvz4n5il4-qtox-1.15.0
checking for references to /build in /nix/store/5wi6xf41dfkrhxa7vdd1kpjkvz4n5il4-qtox-1.15.0...
postPatchMkspecs
postPatchMkspecs
/nix/store/5wi6xf41dfkrhxa7vdd1kpjkvz4n5il4-qtox-1.15.0

Superseeded by #39147


Starting from the second round, the first object will be fetched twice

Description
Starting from the second round, the first object will be fetched twice
Code
// go version: 1.18
package main

import (
	"fmt"
	"net/url"

	roundrobin "github.com/thegeekyasian/round-robin-go"
)

func main() {
	rr, _ := roundrobin.New(
		&url.URL{Host: "<IP_ADDRESS>"},
		&url.URL{Host: "<IP_ADDRESS>"},
		&url.URL{Host: "<IP_ADDRESS>"},
		&url.URL{Host: "<IP_ADDRESS>"},
	)

	for i := 0; i < 20; i++ {
		fmt.Println(rr.Next().Host)
	}
}

// output
<IP_ADDRESS>
<IP_ADDRESS>
<IP_ADDRESS>
<IP_ADDRESS>
<IP_ADDRESS>
<IP_ADDRESS>
<IP_ADDRESS>
<IP_ADDRESS>
<IP_ADDRESS>
<IP_ADDRESS>
<IP_ADDRESS>
Why？
when the next field is greater than the length of the object, the first object will be fetched and next will be reset to 0. The next time the Next method is called, next field will be 1, so the first object will be fetched.
// Next returns the next object.
func (r *RoundRobin[O]) Next() *O {
	n := atomic.AddUint32(&r.next, 1)

	if int(n) > len(r.objects) {
		atomic.StoreUint32(&r.next, 0) // reset next field
		n = 1
	}
	return r.objects[(int(n)-1)%len(r.objects)]
}

@superbear Thank you for raising this issue with your PR.
Closing this, in favor of #4


feat(tactic/fin_cases): a tactic to case bash on fin n

No documentation yet. If we want to merge this, perhaps should add an interactive mode with a parser to aim at particular hypotheses.
Make sure you have:

[X] for tactics:

[ ] added or adapted documentation in tactics.md
[X] write an example of use of the new feature in tactics.lean

Oops --- no, this is not what I wanted: I don't understand numerals in Lean
and went with the first thing that accepted 3 : nat and rejected n : nat! I
will switch out for expr.is_numeral now.
On Mon, Sep 17, 2018 at 8:51 PM Rob Lewis<EMAIL_ADDRESS>wrote:

@robertylewis commented on this pull request.
In tactic/fin_cases.lean
https://github.com/leanprover/mathlib/pull/352#discussion_r218024455:

@@ -0,0 +1,42 @@
+/-
+Copyright (c) 2018 Scott Morrison. All rights reserved.
+Released under Apache 2.0 license as described in the file LICENSE.
+Author: Scott Morrison

+Case bashing on fin n, for explicit numerals n.
+-/
+import tactic.linarith
+
+namespace tactic
+
+meta def is_numeral : expr → bool
Are you sure this is what you intended? This will accept bit0 (1+1) as a
numeral and reject one. I think it would be better to use expr.is_numeral
from core.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/leanprover/mathlib/pull/352#pullrequestreview-155868766,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAdLBIg4f5BqN432zioRYnaWh_QYDWYUks5ub36YgaJpZM4Wq3Gd
.

Again, the guard is not necessary, eval_expr will fail. You should just add a error message at the eval_expr line.

eval_expr will succeed if it's any computable ground nat, it isn't restricted to numerals.
But it might be better to use expr.to_nat from tactic/basic instead of eval_expr. Both should be more or less instant in this case, but to_nat is simpler and isn't a tactic. And it will fail if n isn't a numeral, so you really can remove the guard in this case.

Why should we be fixed on numerals?
Why shouldn't we support 1 * 2  + 1?

or more likely something like succ 2

Fair point. I'd worry about eval_expr trying too hard to normalize something it shouldn't bother with, but that probably counts as user error here.

Thanks for the suggestions: I've removed the unnecessary guard.
On Mon, Sep 17, 2018 at 10:12 PM Rob Lewis<EMAIL_ADDRESS>wrote:

Fair point. I'd worry about eval_expr trying too hard to normalize
something it shouldn't bother with, but that probably counts as user error
here.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/leanprover/mathlib/pull/352#issuecomment-421989535,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAdLBCnaYgN0954sJkB4zVwnuPKfgdqmks5ub5GrgaJpZM4Wq3Gd
.

I've just added a parser, so you can specify which hypothesis you'd like to perform cases on, and some documentation.
It also tries to clear the useless "bound" hypotheses.
I think this is ready to merge.

I think this is again "ready to merge".

@johoelzl This looks good to me.


Clearer errors for no design column fully matching sample columns

It would be helpful to specify what column in the design matrix is closest to matching, and how many columns it got right.

I close this for now, as this is not a critical feature.


Convert linebreak from CRLF to LF

Problem
My IDE complain that a few files using CRLF linebreak
Change overview
Convert CRLF to LF
File examples/ota-requestor-app/p6/matter-psoc6-mcuboot-bootloader.hex also use CRLF, but it is a firmware file, so I'm not sure if it should be converted. Skipped this file.
Testing
Let CI verify it.

We got 4 'gradlew.bat', 2 with LF, 2 with CRLF
% file ./examples/tv-app/android/App/gradlew.bat ./examples/tv-casting-app/android/App/gradlew.bat ./src/android/CHIPTool/gradlew.bat ./src/android/CHIPTest/gradlew.bat
./examples/tv-app/android/App/gradlew.bat:         ASCII text
./examples/tv-casting-app/android/App/gradlew.bat: DOS batch file, ASCII text, with CRLF line terminators
./src/android/CHIPTool/gradlew.bat:                DOS batch file, ASCII text, with CRLF line terminators
./src/android/CHIPTest/gradlew.bat:                ASCII text

It should be consistent about what to use.

We got 4 'gradlew.bat', 2 with LF, 2 with CRLF
% file ./examples/tv-app/android/App/gradlew.bat ./examples/tv-casting-app/android/App/gradlew.bat ./src/android/CHIPTool/gradlew.bat ./src/android/CHIPTest/gradlew.bat
./examples/tv-app/android/App/gradlew.bat:         ASCII text
./examples/tv-casting-app/android/App/gradlew.bat: DOS batch file, ASCII text, with CRLF line terminators
./src/android/CHIPTool/gradlew.bat:                DOS batch file, ASCII text, with CRLF line terminators
./src/android/CHIPTest/gradlew.bat:                ASCII text

It should be consistent about what to use.

That is very surprising to me. I wonder if this was somehow changed by mistake - I seem to remember gradle bits being a script/autogen.
In any case, PR makes things metter, so merging. Thank you for taking the time to update and go through these.


Floorsense.at_location() error parsing response

I've deployed the latest floorsense driver to placeos-dev and the new features work except for at_location("2","D.01") which currently returns
{
    "error": "request failed",
    "sys_id": "sys-GAg-Vlc~-LM",
    "module_name": "Floorsense",
    "index": 1,
    "message": "module raised: Expected BeginObject but was BeginArray at line 1, column 10\n  parsing Floorsense::User at line 1, column 9\n  parsing Floorsense::UserResponse#info at line 1, column 2 (JSON::SerializableError)",
    "backtrace": [
        "/usr/share/crystal/src/json/serialization.cr:159:7 in 'initialize:__pull_for_json_serializable'",
        "repositories/drivers/drivers/floorsense/models.cr:209:5 in 'new_from_json_pull_parser'",
        "repositories/drivers/drivers/floorsense/models.cr:209:5 in 'new'",
        "/usr/share/crystal/src/json/from_json.cr:13:3 in 'from_json'",
        "repositories/drivers/drivers/floorsense/desks.cr:166:29 in 'at_location'",
        "repositories/drivers/drivers/floorsense/desks.cr:11:1 in '->'",
        "/usr/share/crystal/src/primitives.cr:255:3 in 'execute'",
        "repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:128:5 in 'execute'",
        "repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:150:18 in 'process'",
        "repositories/drivers/lib/placeos-driver/src/placeos-driver/driver_manager.cr:138:9 in '->'",
        "/usr/share/crystal/src/primitives.cr:255:3 in 'run'",
        "/usr/share/crystal/src/fiber.cr:92:34 in '->'",
        "???"
    ]
}

https://github.com/PlaceOS/drivers/blob/66b2c0146223694b057e929e006560f69d134811/drivers/floorsense/models.cr#L208-L221
Weird cause their docs don't state that the response would be an array: https://apiguide.smartalock.com/#1f50cf99-1932-450c-87ca-15bf7f043e51

@w-le pushed an update if you can try again
I also added a debug statement so we can see the response data in case my fix doesn't work as it was a complete guess given the docs


Normalize F# file/assembly/package versions

This is a longer-lead item to make F# versions more like Roslyn versions, which also embed the build number and commit hash into their binaries.

@brettfo Milestone/severity?

@brettfo is this still valid to be open now that we embed the build and commit hash?

I think we can call this complete.


Crash report - stackwalked trace (v3)

Another crash report. Still no new for the old ones (https://github.com/ariya/phantomjs/issues/11431). I don't even know if posting this is useful at all !!!!
(this is Phantomjs-1.9.1-linux-x86_64)
Operating system: Linux
0.0.0 Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1 x86_64
CPU: amd64
family 6 model 23 stepping 10
2 CPUs
Crash reason:  SIGABRT
Crash address: 0x3e800004d10
Thread 0 (crashed)
0  libc-2.13.so + 0x32475
rbx = 0x000000000459ae10   r12 = 0x000000000459a690
r13 = 0x000000000459ade0   r14 = 0x0000000004783130
r15 = 0x000000000477bcd0   rip = 0x00007f279c384475
rsp = 0x00007fff0d942fa8   rbp = 0x000000000459ae28
Found by: given as instruction pointer in context
1  libc-2.13.so + 0x356ef
rip = 0x00007f279c3876f0   rsp = 0x00007fff0d942fb0
Found by: stack scanning
2  ld-2.13.so + 0x55f
rip = 0x00007f279d979560   rsp = 0x00007fff0d942fd0
Found by: stack scanning
3  libc-2.13.so + 0x6b9f
rip = 0x00007f279c358ba0   rsp = 0x00007fff0d942fe8
Found by: stack scanning
4  libm-2.13.so + 0x281fff
rip = 0x00007f279cb74000   rsp = 0x00007fff0d943038
Found by: stack scanning
5  ld-2.13.so + 0xd9f1
rip = 0x00007f279d9869f2   rsp = 0x00007fff0d943040
Found by: stack scanning
6  libstdc++.so.6.0.17 + 0x6589c
rip = 0x00007f279cbd989d   rsp = 0x00007fff0d9430e0
Found by: stack scanning
7  libpthread-2.13.so + 0xe12c
rip = 0x00007f279ce8912d   rsp = 0x00007fff0d9430f0
Found by: stack scanning
8  libstdc++.so.6.0.17 + 0x63995
rip = 0x00007f279cbd7996   rsp = 0x00007fff0d943110
Found by: stack scanning
9  libstdc++.so.6.0.17 + 0x639c2
rip = 0x00007f279cbd79c3   rsp = 0x00007fff0d943120
Found by: stack scanning
10  libstdc++.so.6.0.17 + 0x644de
rip = 0x00007f279cbd84df   rsp = 0x00007fff0d943130
Found by: stack scanning
11  phantomjs!QCoreApplication::postEvent [qcoreapplication.cpp : 1392 + 0x8]
rip = 0x0000000001cdebcc   rsp = 0x00007fff0d943140
Found by: stack scanning
12  phantomjs!QMetaMethod::invoke [qmetaobject.cpp : 1703 + 0x5a]
rbx = 0x0000000004783130   r12 = 0x00007fff0d9437e0
r13 = 0x000000000000000b   r14 = 0x0000000000000000
r15 = 0x000000000477bcd0   rip = 0x0000000001ce8b09
rsp = 0x00007fff0d9431f0   rbp = 0x0000000000000001
Found by: call frame info
13  phantomjs!QMetaObject::invokeMethod [qmetaobject.cpp : 1179 + 0x1ba]
rbx = 0x000000000000000f   r12 = 0x0000000000000000
r13 = 0x000000000477bcd0   r14 = 0x00007fff0d943560
r15 = 0x0000000000000000   rip = 0x0000000001ce99de
rsp = 0x00007fff0d943440   rbp = 0x00007fff0d943780
Found by: call frame info
14  phantomjs!QNetworkConfigurationManagerPrivate::enablePolling [qobjectdefs.h : 434 + 0xc3]
rbx = 0x000000000477bcf0   r12 = 0x000000000477bcf1
r13 = 0x00007fff0d943b80   r14 = 0x0000000004599ef0
r15 = 0x0000000004599f30   rip = 0x0000000001b4e59d
rsp = 0x00007fff0d943840   rbp = 0x000000000477bcd0
Found by: call frame info
15  phantomjs!QNetworkConfigurationManager::QNetworkConfigurationManager [qnetworkconfigmanager.cpp : 243 + 0x7]
rbx = 0x000000000477bcd0   r12 = 0x00007f279afd0270
r13 = 0x00007fff0d943b80   r14 = 0x0000000004599ef0
r15 = 0x0000000004599f30   rip = 0x0000000001b4aa29
rsp = 0x00007fff0d9439b0   rbp = 0x000000000458b3a0
Found by: call frame info
16  phantomjs!WebCore::NetworkStateNotifierPrivate::NetworkStateNotifierPrivate [NetworkStateNotifierQt.cpp : 34 + 0x2a]
rbx = 0x000000000458b3a0   r12 = 0x00007f279afd0270
r13 = 0x00007fff0d943b80   r14 = 0x0000000004599ef0
r15 = 0x0000000004599f30   rip = 0x0000000000b57e36
rsp = 0x00007fff0d9439d0   rbp = 0x0000000004593f90
Found by: call frame info
17  phantomjs!WebCore::NetworkStateNotifier::NetworkStateNotifier [NetworkStateNotifierQt.cpp : 79 + 0x17]
rbx = 0x00007f279afd0270   r12 = 0x0000000004599e20
r13 = 0x00007fff0d943b80   r14 = 0x0000000004599ef0
r15 = 0x0000000004599f30   rip = 0x0000000000b57ed4
rsp = 0x00007fff0d9439f0   rbp = 0x0000000004593f90
Found by: call frame info
18  phantomjs!WebCore::networkStateNotifier [NetworkStateNotifier.cpp : 37 + 0x7]
rbx = 0x00007f279afd0270   r12 = 0x0000000004599e20
r13 = 0x00007fff0d943b80   r14 = 0x0000000004599ef0
r15 = 0x0000000004599f30   rip = 0x0000000000975e0c
rsp = 0x00007fff0d943a10   rbp = 0x0000000004599e20
Found by: call frame info
19  phantomjs!WebCore::Page::Page [Page.cpp : 170 + 0x4]
rbx = 0xbff0000000000000   r12 = 0x0000000004599e20
r13 = 0x00007fff0d943b80   r14 = 0x0000000004599ef0
r15 = 0x0000000004599f30   rip = 0x00000000008fff9d
rsp = 0x00007fff0d943a30   rbp = 0x0000000004599e20
Found by: call frame info
20  phantomjs!QWebPagePrivate::QWebPagePrivate [qwebpage.cpp : 349 + 0x17]
rbx = 0x0000000004594db0   r12 = 0x00000000047809f0
r13 = 0x00007fff0d943b80   r14 = 0x0000000004594dd8
r15 = 0x0000000004594e58   rip = 0x000000000048d51f
rsp = 0x00007fff0d943b50   rbp = 0x0000000004599e20
Found by: call frame info
21  phantomjs!QWebPage::QWebPage [qwebpage.cpp : 1970 + 0x2b]
rbx = 0x0000000004594db0   r12 = 0x00000000047809f0
r13 = 0x000000000459c6c0   r14 = 0x00007fff0d944320
r15 = 0x0000000000000000   rip = 0x00000000004903c5
rsp = 0x00007fff0d943c30   rbp = 0x0000000004595150
Found by: call frame info
22  phantomjs!WebPage::WebPage [webpage.cpp : 96 + 0xa]
rbx = 0x0000000004595150   r12 = 0x000000000459c720
r13 = 0x000000000459c6c0   r14 = 0x00007fff0d944320
r15 = 0x0000000000000000   rip = 0x0000000000418267
rsp = 0x00007fff0d943c50   rbp = 0x00000000047809f0
Found by: call frame info
23  phantomjs!Phantom::init [phantom.cpp : 102 + 0x40]
rbx = 0x00000000047809f0   r12 = 0x000000000459c720
r13 = 0x000000000459c6c0   r14 = 0x00007fff0d944320
r15 = 0x0000000000000000   rip = 0x0000000000409bf3
rsp = 0x00007fff0d943db0   rbp = 0x00007fff0d944020
Found by: call frame info
24  phantomjs!Phantom::instance [phantom.cpp : 154 + 0x4]
rbx = 0x00007fff0d944430   r12 = 0x00007fff0d9443b0
r13 = 0x00007fff0d944578   r14 = 0x00007fff0d944320
r15 = 0x0000000000000000   rip = 0x000000000040b576
rsp = 0x00007fff0d9442f0   rbp = 0x000000000459c6c0
Found by: call frame info
25  phantomjs!main [main.cpp : 117 + 0x4]
rbx = 0x00007fff0d944430   r12 = 0x00007fff0d9443b0
r13 = 0x00007fff0d944578   r14 = 0x00007fff0d944320
r15 = 0x0000000000000000   rip = 0x0000000000427c9e
rsp = 0x00007fff0d944310   rbp = 0x00007fff0d944548
Found by: call frame info
26  libc-2.13.so + 0x1eeac
rbx = 0x0000000000000000   r12 = 0x0000000000407cc0
r13 = 0x00007fff0d944540   r14 = 0x0000000000000000
r15 = 0x0000000000000000   rip = 0x00007f279c370ead
rsp = 0x00007fff0d944470   rbp = 0x0000000000000000
Found by: call frame info
27  phantomjs + 0x27a5f
rip = 0x0000000000427a60   rsp = 0x00007fff0d944490
Found by: stack scanning
Thread 1
0  libpthread-2.13.so + 0xb2d4
rbx = 0x0000000002ade208   r12 = 0x0000000002ad0160
r13 = 0x00007f279b8cd9c0   r14 = 0x00007f279db99040
r15 = 0x0000000000000003   rip = 0x00007f279ce862d4
rsp = 0x00007f279b8cce10   rbp = 0x0000000000000000
Found by: given as instruction pointer in context
1  phantomjs!WTF::TCMalloc_PageHeap::scavengerThread [FastMalloc.cpp : 2495 + 0x7]
rip = 0x00000000004ddafc   rsp = 0x00007f279b8cce40
Found by: stack scanning
2  phantomjs!WTF::TCMalloc_PageHeap::runScavengerThread [FastMalloc.cpp : 1618 + 0x4]
rbx = 0x0000000000000000   r12 = 0x00007f279ce8c1a0
r13 = 0x00007f279b8cd9c0   r14 = 0x00007f279db99040
r15 = 0x0000000000000003   rip = 0x00000000004ddc99
rsp = 0x00007f279b8ccec0   rbp = 0x0000000000000000
Found by: call frame info
3  libpthread-2.13.so + 0x6b4f
rbx = 0x0000000000000000   r12 = 0x00007f279ce8c1a0
r13 = 0x00007f279b8cd9c0   r14 = 0x00007f279db99040
r15 = 0x0000000000000003   rip = 0x00007f279ce81b50
rsp = 0x00007f279b8cced0   rbp = 0x0000000000000000
Found by: call frame info
4  libpthread-2.13.so + 0x1119f
rip = 0x00007f279ce8c1a0   rsp = 0x00007f279b8ccf78
Found by: stack scanning
5  libc-2.13.so + 0xdaa7c
rip = 0x00007f279c42ca7d   rsp = 0x00007f279b8ccfe0
Found by: stack scanning
Thread 2
0  libc-2.13.so + 0xd72f9
rbx = 0x0000000004598d00   r12 = 0xfffffffffff0bdc0
r13 = 0x0000000004544ab0   r14 = 0x000000000459ae28
r15 = 0x0000000004783130   rip = 0x00007f279c4292f9
rsp = 0x00007f279afcb498   rbp = 0x0000000000000000
Found by: given as instruction pointer in context
1  phantomjs!QMutexPrivate::wait [qmutex_unix.cpp : 99 + 0x22]
rip = 0x0000000001be1de3   rsp = 0x00007f279afcb4a0
Found by: stack scanning
2  phantomjs!QMutex::lock [qmutex.cpp : 164 + 0xc]
rbx = 0x0000000004598d00   r12 = 0x0000000000000000
rip = 0x0000000001bddf7c   rsp = 0x00007f279afcb4f0
rbp = 0x00007f279afcc700
Found by: call frame info
3  phantomjs!QNetworkConfigurationManagerPrivate::startPolling [qmutex.h : 188 + 0x7]
rbx = 0x000000000477bcf0   r12 = 0x0000000000000000
rip = 0x0000000001b4c548   rsp = 0x00007f279afcb510
rbp = 0x000000000477bcd0
Found by: call frame info
4  phantomjs!QNetworkConfigurationManagerPrivate::qt_static_metacall [moc_qnetworkconfigmanager_p.cpp : 85 + 0x4]
rbx = 0x000000000477bcd0   r12 = 0x0000000004783130
r13 = 0x0000000004544ab0   rip = 0x0000000001ba86a6
rsp = 0x00007f279afcb560   rbp = 0x0000000000000000
Found by: call frame info
5  phantomjs!QObject::event [qobject.cpp : 1191 + 0x8]
rbx = 0x000000000477bcd0   r12 = 0x0000000004783130
r13 = 0x0000000004544ab0   rip = 0x0000000001cefc08
rsp = 0x00007f279afcb5a0   rbp = 0x0000000000000000
Found by: call frame info
6  phantomjs!QApplicationPrivate::notify_helper [qapplication.cpp : 4562 + 0xc]
rbx = 0x00007fff0d9443b0   r12 = 0x0000000004783130
r13 = 0x0000000004544ab0   rip = 0x00000000015decaf
rsp = 0x00007f279afcb740   rbp = 0x000000000477bcd0
Found by: call frame info
7  phantomjs!QApplication::notify [qapplication.cpp : 4423 + 0x17]
rbx = 0x00007fff0d9443b0   r12 = 0x0000000004783130
r13 = 0x00007fff0d9443b0   rip = 0x00000000015e793b
rsp = 0x00007f279afcb770   rbp = 0x000000000477bcd0
Found by: call frame info
8  phantomjs!QCoreApplication::notifyInternal [qcoreapplication.cpp : 946 + 0x2]
rbx = 0x000000000459ade0   r12 = 0x0000000004783130
r13 = 0x00007fff0d9443b0   r14 = 0x000000000459ae28
r15 = 0x000000000459ae1c   rip = 0x0000000001cde3b4
rsp = 0x00007f279afcbc40   rbp = 0x000000000477bcd0
Found by: call frame info
9  phantomjs!QCoreApplicationPrivate::sendPostedEvents [qcoreapplication.h : 231 + 0x1f]
rbx = 0x0000000004783130   r12 = 0x000000000459ade0
r13 = 0x000000000477bcd0   r14 = 0x000000000459ae28
r15 = 0x000000000459ae1c   rip = 0x0000000001cdf314
rsp = 0x00007f279afcbc90   rbp = 0x00000000045e8a60
Found by: call frame info
10  phantomjs!QEventDispatcherUNIX::processEvents [qeventdispatcher_unix.cpp : 909 + 0xc]
rbx = 0x0000000004595910   r12 = 0x00007f279afcbda0
r13 = 0x0000000004597540   r14 = 0x0000000000000000
r15 = 0x0000000004788f28   rip = 0x0000000001d08003
rsp = 0x00007f279afcbd50   rbp = 0x000000000459db90
Found by: call frame info
11  phantomjs!QEventLoop::processEvents [qeventloop.cpp : 149 + 0x1]
rbx = 0x0000000004595910   r12 = 0x00007f279afcbe30
r13 = 0x00007f279afcbe40   r14 = 0x0000000004542230
r15 = 0x0000000004788f28   rip = 0x0000000001cdd495
rsp = 0x00007f279afcbda0   rbp = 0x00007f279afcbde0
Found by: call frame info
12  phantomjs!QEventLoop::exec [qeventloop.cpp : 200 + 0x4]
rbx = 0x0000000004595910   r12 = 0x00007f279afcbe30
r13 = 0x00007f279afcbe40   r14 = 0x0000000004542230
r15 = 0x0000000004788f28   rip = 0x0000000001cdd8f8
rsp = 0x00007f279afcbdd0   rbp = 0x00007fff0d9443b0
Found by: call frame info
13  phantomjs!QThread::exec [qthread.cpp : 542 + 0xc]
rbx = 0x0000000004788ea0   r12 = 0x0000000004788f28
r13 = 0x0000000000000001   r14 = 0x00007f279db99040
r15 = 0x0000000000000003   rip = 0x0000000001bdfdd6
rsp = 0x00007f279afcbe30   rbp = 0x0000000004788f28
Found by: call frame info
14  phantomjs!QThreadPrivate::start [qthread_unix.cpp : 338 + 0x9]
rbx = 0x0000000004788f28   r12 = 0x000000000459ade0
r13 = 0x0000000000000001   r14 = 0x00007f279db99040
r15 = 0x0000000000000003   rip = 0x0000000001be2ca2
rsp = 0x00007f279afcbe80   rbp = 0x000000000457e940
Found by: call frame info
15  libpthread-2.13.so + 0x6b4f
rbx = 0x0000000000000000   r12 = 0x00007fff0d943890
r13 = 0x00007f279afcc9c0   r14 = 0x00007f279db99040
r15 = 0x0000000000000003   rip = 0x00007f279ce81b50
rsp = 0x00007f279afcbed0   rbp = 0x0000000000000000
Found by: call frame info
Loaded modules:
0x00400000 - 0x026e7fff  phantomjs  ???  (main)
0x7f279b8ce000 - 0x7f279bb2cfff  libssl.so.1.0.0  ???
0x7f279bb2d000 - 0x7f279bf0cfff  libcrypto.so.1.0.0  ???
0x7f279bf11000 - 0x7f279c13afff  libexpat.so.1.6.0  ???
0x7f279c13b000 - 0x7f279c351fff  libz.so.1.2.7  ???
0x7f279c352000 - 0x7f279c6d6fff  libc-2.13.so  ???
0x7f279c6dc000 - 0x7f279c8f1fff  libgcc_s.so.1  ???
0x7f279c8f2000 - 0x7f279cb73fff  libm-2.13.so  ???
0x7f279cb74000 - 0x7f279ce65fff  libstdc++.so.6.0.17  ???
0x7f279ce7b000 - 0x7f279d092fff  libpthread-2.13.so  ???
0x7f279d097000 - 0x7f279d29efff  librt-2.13.so  ???
0x7f279d29f000 - 0x7f279d4a2fff  libdl-2.13.so  ???
0x7f279d4a3000 - 0x7f279d6d9fff  libfontconfig.so.1.5.0  ???
0x7f279d6da000 - 0x7f279d978fff  libfreetype.so.6.8.1  ???
0x7f279d979000 - 0x7f279d998fff  ld-2.13.so  ???
0x7f279da13000 - 0x7f279db89fff  locale-archive  ???
0x7f279db92000 - 0x7f279db95fff  6d41288fd70b0be22e8c3a91e032eec0-le64.cache-3  ???
0x7fff0d9b5000 - 0x7fff0d9b5fff  linux-gate.so  ???

Please upgrade to PhantomJS 2.0. 1.9.x is no longer supported, and known to have many crasher bugs that are fixed in 2.0.


Removed Imaging from Diagnostic Imaging, added num, fixed publication…

Fixing issues #91, #89, #72, #67, #76, #77

Looks great. Will merge and close out redundant PR #94


Video is not rendering using the django-embed-video

When i go for specific course for the specific course for the module of a course the video is not rendering .

Video rendering done and all the file system working .