feat(scalars): support scalar out of the box

This adds built in support the listed scalars using the graphql-scalars library.
Table Summary

Scalar
Description
Database Type

GraphbackTime
A time string at UTC, such as 10:15:30Z, compliant with the full-time format outlined in section 5.6 of the RFC 3339 profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.
time

GraphbackDate
A date string, such as 2007-12-03, compliant with the full-date format outlined in section 5.6 of the RFC 3339 profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.
date

GraphbackDateTime
A date-time string at UTC, such as 2007-12-03T10:15:30Z, compliant with the date-time format outlined in section 5.6 of the RFC 3339 profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.
datetime

GraphbackObjectID
A field whose value conforms with the standard mongodb object ID as described here: https://docs.mongodb.com/manual/reference/method/ObjectId/#ObjectId. You will need to have the mongodb package installed in order to use this
varchar(24)

GraphbackJSONObject
The JSONObject scalar type represents JSON objects as specified by ECMA-404.
json

GraphbackJSON
The JSON scalar type represents JSON values as specified by ECMA-404.
json

GraphbackTimestamp
The javascript Date as integer. Type represents date and time as number of milliseconds from start of UNIX epoch.
timestamp

Progress:

[x] modify graphql migrations to take into account the added scalars
[x] Unit and IT tests
[x] Directly deserialize GraphbackObjectID into Mongo ObjectID instead of a string
[x] Documentation
[x] Release notes

I have tested this change with frontend stack we are building.
Amazing feature. We really need it to define what types of scalars we support (as we cannot support any scalar sadly)!
I would love dropping some alpha release once we merge this!

A agreed. We might probably want to have docs PR separately as it might mean a lot of work.

Really nice stuff :smile:
My main concern is how long the embedded scalar names are, especially because the user also has to add a scalar definition to their model. This can be tricky to type out and slow. Other than creating an alias suffix like GBJSONObject I don't see any other way though, and the current naming is probably more clear.

Really nice stuff
My main concern is how long the embedded scalar names are, especially because the user also has to add a scalar definition to their model. This can be tricky to type out and slow. Other than creating an alias suffix like GBJSONObject I don't see any other way though, and the current naming is probably more clear.

The more clear the better. I am planning to work on the documentation to list them so that it will be a matter of copying them from our website and posting them in the model file. Less error prone for the user.

@wtrocki @craicoverflow I've added some documentations. Let me know what you think.

Docs look good!
Filtering of GraphbackJSONInput does not work for Postgres. What is the long term plan here? Do you see us being able to get some sort of operator mapping on JSON fields to work? Maybe we should remove this filter until such time we have it in place. I have not tested it in Mongo, does it work there? If so this can be kept in but documented that it only works for Mongo.
query {
  findNotes(filter: {
    test: {eq: "{\"hello\": 1}"}
  }) {
    items {
      id
      test
    }
  }
}

select \"id\", \"test\" from \"note\" where \"test\" = $1 - operator does not exist: json = unknown

Docs look good!
Filtering of GraphbackJSONInput does not work for Postgres. What is the long term plan here? Do you see us being able to get some sort of operator mapping on JSON fields to work? Maybe we should remove this filter until such time we have it in place. I have not tested it in Mongo, does it work there? If so this can be kept in but documented that it only works for Mongo.
query {
  findNotes(filter: {
    test: {eq: "{\"hello\": 1}"}
  }) {
    items {
      id
      test
    }
  }
}

select \"id\", \"test\" from \"note\" where \"test\" = $1 - operator does not exist: json = unknown

I think we should remove this filtering, until we are able to have this mapping in. Good catch!

Docs look good!

Thanks!

Filtering of GraphbackJSONInput does not work for Postgres. What is the long term plan here? Do you see us being able to get some sort of operator mapping on JSON fields to work? Maybe we should remove this filter until such time we have it in place. I have not tested it in Mongo, does it work there? If so this can be kept in but documented that it only works for Mongo.
query {
  findNotes(filter: {
    test: {eq: "{\"hello\": 1}"}
  }) {
    items {
      id
      test
    }
  }
}

select \"id\", \"test\" from \"note\" where \"test\" = $1 - operator does not exist: json = unknown

I've disabled the feature for now. I've done json queries for pg, and getting the corresponding query from the filter should be doable but that will required a bit of infrastructural work: see https://github.com/aerogear/graphback/pull/1620#discussion_r450074824 where we initially chatted about this. With that in mind, I have opened https://github.com/aerogear/graphback/issues/1761

@craicoverflow I just pushed new changes to disable JSON filtering. Do you mind checking? Once that is good, we should be able to merge this one.

Verfied. Want to share this with external parties for feedback and try it out with the datastore. Amazing job @machi1990


Fix activation heights

The confusion comes from the facts that if I do bitcoin-cli getblockchainfo | jq .softforks the other numbers (388381, 419328, 481824) matches exactly, so I think it's right to have 363725 but you are right this change alone would be wrong and we should change all the operators to >= instead of >. (also it's nice to search by the constant in the codebase and have a match)
{
  "bip34": {
    "type": "buried",
    "active": true,
    "height": 227931
  },
  "bip66": {
    "type": "buried",
    "active": true,
    "height": 363725
  },
  "bip65": {
    "type": "buried",
    "active": true,
    "height": 388381
  },
  "csv": {
    "type": "buried",
    "active": true,
    "height": 419328
  },
  "segwit": {
    "type": "buried",
    "active": true,
    "height": 481824
  }
}

Also, about the p2sh/witness height check, should it be revisited since in bitcoin core the policy changed in https://github.com/bitcoin/bitcoin/pull/11739 ?
Also, it would be nice to have this method parametrized over the network

tested on mainnet blockchain with https://github.com/RCasatta/blocks_iterator/blob/c659cda025d01add36b794294e1f8c3626d4d08f/examples/verify.rs
while without this change it fails on tx 6a26d2ecb67f27d1fa5524763b49029d7106e91e3cc05743073461a719776192

I think the PR title can also be changed to reflect the fix of more weights than just BIP66 :)

What other ACKs are needed to get this merged?

What other ACKs are needed to get this merged?

I am not sure, citing most active contributors of this repo @apoelstra @stevenroose @elichai @TheBlueMatt to see if they can help

I expect we also need taproot activation height here for now

This is an old bugfix PR, I think taproot activation height could go in another PR

This is an old bugfix PR, I think taproot activation height could go in another PR

I agree it should. Let's keep the PR(s) focused.
‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
Le mardi 18 janvier 2022 à 10:38 AM, Riccardo Casatta @.***> a écrit :

What other ACKs are needed to get this merged?

I am not sure, citing most active contributors of this repo @.(https://github.com/apoelstra) @.(https://github.com/stevenroose) @.(https://github.com/elichai) @.(https://github.com/TheBlueMatt) to see if they can help

I expect we also need taproot activation height here for now

This is an old bugfix PR, I think taproot activation height could go in another PR
—
Reply to this email directly, view it on GitHub, or unsubscribe.
Triage notifications on the go with GitHub Mobile for iOS or Android.
You are receiving this because you commented.Message ID: @.***>

Friendly bump  @apoelstra @stevenroose @elichai @TheBlueMatt

You can ignore the AppVeyor CI fail @RCasatta , I removed the config file but the job is still running, I don't know why. @TheBlueMatt the linked AppVeyor URL hints that this may be running in an account controlled by you, do you have any idea how to disable AppVeyor please? @apoelstra  has already checked the GitHub settings to no avail. Thanks
https://ci.appveyor.com/project/TheBlueMatt/rust-bitcoinconsensus/builds/43572566

Rebased and force pushed

lol, I had to approve your CI run @RCasatta, felt silly because you have been around here a lot longer than me :)


command not found in echo_info on line 171

id: fabric-crashlytics-beta-deploy
version: 2.3.1
collection: https://github.com/bitrise-io/bitrise-steplib.git
toolkit: bash

It appears that the use of backticks in the echo cmd on line 171 are trying to execute, the following is appearing in the build log:
Submitting DSYM...
/var/folders/6q/XXXX/step_src/step.sh: line 171: GoogleService-Info.plist: command not found
/var/folders/6q/XXXX/step_src/step.sh: line 171: Fabric:: command not found

Hey @pabdavis , could you send us the build log file of this particular build? :)

@Roland-Bak - here's a cut version of the build log file - the message occurs on every build that includes the step - the log contains the initial bitrise info, this step output and summary.  I've cut other non-relevant steps out of the log.
26acc66628a372cd.log

Thanks for the infor, @pabdavis !
Seems like you just need to use quotes, if you reference a non executable file in backticks it will fail to execute. 🙂

@Roland-Bak thanks, yes, I just had not had a chance to create a PR and test the necessary changes for the step.

@pabdavis A new release is available with the fix. (2.3.2: https://github.com/bitrise-steplib/steps-fabric-crashlytics-beta-deploy/releases/tag/2.3.2)


this.Command["user"] might not always be set

We should error if user is not set on pushormessage call
https://github.com/Imgur/incus/blob/master/message.go#L126

does this mean you can only websocket to certain users atm?

No, it means the pushormessage feature needs a specific user. The basis of this feature is if the user is on a web browser, then incus will route the message to the browser. If they are not online on the browser, it will route the message to the user's phone.

ok I see, makes sense


List somehow all projects that depend on a particular package

I am in charge of 46 packages published on https://tatin.dev.
When I publish a new version of a project that a significant number of those 46 projects depend on, I would like to have a user command that allows me to list all such installation folders.
That would be very helpful, obviously.

Wrong project: this needs to go into Tatin


Feedback: Multiline commands are inconsistent

Version
0.4.0
Describe your experience
I've created a few steps with multiline command strings.
        new CircleCI.commands.Run({
            command: `blah
blah` }))

Some use the literal style | indicator and some use the chomping > indicator. What determines that and is it controllable?

We discovered the issue was related to the string formatting used in the YAML library we were using. We have upgraded the YAML library and changed the string "type" to BLOCK_LITERAL. Changes will be in #64 shortly and included in the next update. Thank you 🙇

Changes are present here with new tests: https://github.com/CircleCI-Public/circleci-config-sdk-ts/pull/64/commits/f8ba48255d45c0c1034689e792f16bede8cbe6f6
PLAIN actually did end up being a better option as far as we can tell so far, but we have found additional options which seem to influence line length.  Tested and added 👍
Will leave this open until the branch is merged for visibility.


User host

As requested #459

Awesome! Thanks, @onaforeignshore!
Couple of items:

Would you mind re-filing against next?
We need to get these segments added to the README so that users know about them
Can you also add them to the CHANGELOG?


Remove IRGenModule::emitFieldDescriptors

When compiling for the JIT, the compiler is inserting pointers to field descriptors at the end of the field descriptor section (as it does for the type section). This breaks iterating over the field descriptors, and seems to be a leftover when the architecture was different. This PR removes those insertions.

@swift-ci smoke test

Do you mind adding a test case? You can either inspect the IR emitted in JIT mode, or just use immediate mode to execute some code that would otherwise crash without your fix.

@slavapestov not sure if this test is good enough, I'm just checking that we don't emit two type metadata tables (which was happening before). Let me know if there's a way to write a better test!

@swift-ci smoke test

seems to be a leftover when the architecture was different.

Are the field descriptors entirely unused now? If they don't need to be emitted, then it looks like the field can be removed entirely:

https://github.com/apple/swift/blob/7123d2614b5f222d03b3762cb110d27a9dd98e24/lib/IRGen/GenReflection.cpp#L1438-L1441
https://github.com/apple/swift/blob/29176fc32ae0b5c0fddbb432287a8c0cba7d9054/lib/IRGen/IRGenModule.h#L1156-L1157
https://github.com/apple/swift/blob/1b8cc91ef3909e288951cea3fbed7315d9eb2e69/lib/IRGen/GenDecl.cpp#L589

@swift-ci smoke test


Make command summary better

https://sheehui.github.io/tp/UserGuide.html

Sickkkk. can we merge @sheehui ?


Update image and copy on link preview

When users post the link in things like Discord, the preview should have a representative image and copy.
Let's use this copy: "Instantly simulate real-world Lightning network activity"
Please use this as aesthetic inspiration, but not the image itself:

CC @carlaKC

@Emmanuel-Develops would you be able to pick this up?

@Emmanuel-Develops would you be able to pick this up?

yeah sure!

I drew up something quick on figma. The image, description and title is tied to this preview link:
https://sim-44sgf2y0n-btc-knowledge-base.vercel.app/
I'm a bit conflicted on how the image looks in small previews
if stephan gets some free time perhaps he could draw up one on figma
cc: @aassoiants

closed by https://github.com/bitcoin-dev-project/sim-ln-website/pull/1


Add Windows SDK 8.1

Tool information

Tool name: Microsoft Windows SDK
Tool license:
Add or update? Update
Desired version: 8.1
Approximate size: 0.98 GB
If this is an add request:

Brief description of tool: Windows Software Development Toolkit
URL for tool's homepage: https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/

Area for Triage:

Question, Bug, or Feature?:

Virtual environments affected

[ ] macOS 10.15
[ ] Ubuntu 16.04 LTS
[ ] Ubuntu 18.04 LTS
[ ] Windows Server 2016 R2
[x] Windows Server 2019

Can this tool be installed during the build?
Possibly, with admin rights and a restart.
Tool installation time in runtime

Are you willing to submit a PR?
Yes. It existed before: https://github.com/actions/virtual-environments/blob/master/images/win/scripts/Installers/Windows2016/Install-VS2017.ps1#L61

@jamesmcguirepro , Could you please share the approximate size of this SDK?
Also I see that Windows 8.1 SDK is officially deprecated in VS 2019.

The Windows 8.1 SDK is no longer available in the Visual Studio installer. Please upgrade your C++ projects to the latest Windows 10 SDK. If you have a hard dependency on 8.1, you can download it from the Windows SDK archive.

@maxim-lobanov
It's listed as 0.98 GB on my local machine's Uninstall Programs list

All SKUs of Windows 8.1 have left mainstream support. Only extended support is available for this version of Windows.
Azure Pipelines has green lit the addition of this SDK to their image
https://github.com/Microsoft/azure-pipelines-image-generation/commit/2b478e34162f61738bf10d02bc2e11a56ec1223c
You can install just the desktop/.NET SDK features (no tooling) via:
sdksetup.exe /features OptionId.WindowsDesktopSoftwareDevelopmentKit OptionId.NetFxSoftwareDevelopmentKit /quiet
The SDK footprint is about 505MB, calculated from a clean machine install via:

C:\Program Files (x86)\Windows Kits\8.1 @ 490MB
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A @ 15MB

Hi @jamesmcguirepro, considering that it can be installed on runtime and it's a pretty old version, we won't install it by default in the images. Thanks for the suggestion though.

So IIUC the steps for getting Windows SDK 8.1 on windows-latest would be to:

Download https://go.microsoft.com/fwlink/p/?LinkId=323507
Extract to C:\temp
Run C:\temp\sdksetup.exe /features OptionId.WindowsDesktopSoftwareDevelopmentKit OptionId.NetFxSoftwareDevelopmentKit /quiet

@abergmeier Yep, specifically this should do:
- name: Install Windows 8.1 SDK
  shell: powershell
  run: |
    Invoke-WebRequest -Method Get -Uri https://go.microsoft.com/fwlink/p/?LinkId=323507 -OutFile sdksetup.exe -UseBasicParsing
    Start-Process -Wait sdksetup.exe -ArgumentList "/q", "/norestart", "/features", "OptionId.WindowsDesktopSoftwareDevelopmentKit", "OptionId.NetFxSoftwareDevelopmentKit"

That is what I tried and Invoke-WebRequest fails with:
Response status code does not indicate success: 301 (Moved Permanently).

What works for me is:
    - name: Download and install Windows SDK
      run: |
        import subprocess
        import urllib.request
        urllib.request.urlretrieve("https://go.microsoft.com/fwlink/p/?LinkId=323507", "sdksetup.exe")
        subprocess.run(["sdksetup.exe", "/q", "/norestart", "/features", "OptionId.WindowsDesktopSoftwareDevelopmentKit", "OptionId.NetFxSoftwareDevelopmentKit"], check=True, capture_output=True)
      shell: python

If you use PowerShell Core, you'll run into questionable semantics around HTTP 3xx status codes (see PowerShell/4534), hence the shell: powershell instead 😉 But looks like you got there with Python instead.

NB: MS SDK 8.1 is the default SDK you get when you install Visual Studio 2015 SP3 (even on a Windows 10 machine), and VS2015 itself is supported until 2025. So maybe there is an argument for providing it until VS2015 goes out of support?
Or at least providing an action to install it when needed.
The powershell example above works, but after a quick download it takes several minutes to install. Does anyone have an action or workflow recipe for caching the actual installation (or even know if that's possible - not sure if there are registry aspects needed in addition to the files themselves)?

You can also install the SDK using an older version of vs_buildtools.exe. This is handy if you also need to install an older version of MSVC.
In this example, I use v15 of vs_buildtools.exe to install platform tools v140 (VS 2015) and the windows 8.1 SDK.
    - name: Install MSVC 2015 (v140) and Windows 8.1 SDK
      shell: powershell
      run: |
        $VS_BTOOLS_EXE="vs_buildtools.exe"
        $VS_BTOOLS_URI="https://aka.ms/vs/15/release/vs_buildtools.exe"
        Invoke-WebRequest -Uri $VS_BTOOLS_URI -OutFile $VS_BTOOLS_EXE
        Start-Process -FilePath ./vs_BuildTools.exe -ArgumentList `
        "--add", "Microsoft.VisualStudio.Component.VC.140", `
        "--add", "Microsoft.VisualStudio.Component.Windows81SDK", `
        "--quiet", "--norestart", "--force", "--wait" -Wait -PassThru

(I based the example on this StackOverflow answer)


Unable to Use Mem0 with Ollama Locally: Facing Errors with Qdrant and GraphRag Configurations

🐛 Describe the bug
##First sample is for Qdrant server and ollama
import os
import subprocess
from collections import deque
from mem0 import Memory
Configuration for Mem0 and Ollama
config = {
"vector_store": {
"provider": "qdrant",
"config": {
"collection_name": "test",
"host": "localhost",
"port": 6333,
"embedding_model_dims": 768,  # Match this to your local model's embedding dimensions
},
},
"llm": {
"provider": "ollama",
"config": {
"model": "llama3.2:3b-instruct-q4_K_M",
"temperature": 0,
"max_tokens": 8000,
"ollama_base_url": "http://localhost:11434",  # Make sure Ollama is running at this URL
},
},
"embedder": {
"provider": "ollama",
"config": {
"model": "nomic-embed-text:latest",
"ollama_base_url": "http://localhost:11434",
},
},
"version": "v1.1"
}
m = Memory.from_config(config)
Add a memory
m.add("I'm visiting Paris", user_id="john")
m.add("I'm listening to music", user_id="john")
m.add("I'm trying to learn French", user_id="john")
m.add("I'm going to the beach", user_id="john")
m.add("I'm going to the gym", user_id="john")
Retrieve memories
memories = m.get_all(user_id="john")
print(memories)
##Above code is giving error as """ERROR:root:Error in new_memories_with_actions: 'event'"""
##Second sample is for graphrag and ollama
from mem0 import Memory
config = {
"llm": {
"provider": "ollama",
"config": {
"model": "llama3.2:3b-instruct-q4_K_M",
"temperature": 0,
"max_tokens": 8000,
"ollama_base_url": "http://localhost:11434",  # Make sure Ollama is running at this URL,
# "api_key": "",
},
},
"graph_store": {
"provider": "neo4j",
"config": {
"url": "neo4j+s://170d45e6.databases.neo4j.io",
"username": "neo4j",
"password": "F8plXttQXj19K4YoVdJyIHGRUdmEKXvIt47ff9v6dP4"
    },
    "llm": {
    "provider": "ollama",
    "config": {
        "model": "llama3.2:3b-instruct-q4_K_M",
        "temperature": 0,
        "max_tokens": 8000,
        "ollama_base_url": "http://localhost:11434",  # Make sure Ollama is running at this URL
        # "api_key": "",
    },
},
},
"version": "v1.1"

}
m = Memory.from_config(config_dict=config)
m.add("I like pizza", user_id="alice")
m.get_all(user_id="alice")
m.search("tell me my name.", user_id="alice")
##Above sample giving error as """openai.OpenAIError: The api_key client option must be set either by passing api_key to the client or by setting the OPENAI_API_KEY environment variable
"""

Solution for Qdrant and Ollama Integration

Corrected Configuration for Qdrant and Ollama:

import os
import subprocess
from mem0 import Memory

# Ensure the path exists
os.makedirs("./qdrant_data", exist_ok=True)

config = {
    "vector_store": {
        "provider": "qdrant",
        "config": {
            "collection_name": "test_collection",
            "path": "./qdrant_data",  # Local persistent storage
            "host": "localhost",
            "port": 6333,
            "embedding_model_dims": 768,  # Verified dimension for nomic-embed-text
        },
    },
    "llm": {
        "provider": "ollama",
        "config": {
            "model": "llama3:latest",  # Updated to a more reliable model
            "temperature": 0,
            "max_tokens": 8000,
            "ollama_base_url": "http://localhost:11434",
        },
    },
    "embedder": {
        "provider": "ollama",
        "config": {
            "model": "nomic-embed-text:latest",
            "ollama_base_url": "http://localhost:11434",
        },
    },
}

# Proper Memory initialization
m = Memory.from_config(config)

# Adding memories with proper metadata
m.add("I'm visiting Paris", user_id="john", metadata={"type": "travel"})
m.add("I'm listening to music", user_id="john", metadata={"type": "activity"})

# Retrieve memories
memories = m.get_all(user_id="john")
print(memories)

Solution for GraphRAG and Neo4j Integration

Corrected Configuration for GraphRAG with Ollama:

from mem0 import Memory

config = {
    "llm": {
        "provider": "ollama",
        "config": {
            "model": "llama3:latest",  # Updated model name
            "temperature": 0,
            "max_tokens": 8000,
            "ollama_base_url": "http://localhost:11434",
        },
    },
    "graph_store": {
        "provider": "neo4j",
        "config": {
            "url": "neo4j+s://your-neo4j-instance.databases.neo4j.io",
            "username": "neo4j",
            # IMPORTANT: Use environment variables for sensitive credentials
            "password": os.getenv("NEO4J_PASSWORD")
        }
    },
    "version": "v1.1"
}

# Initialize Memory
m = Memory.from_config(config)

# Add memory with user context
m.add("I like pizza", user_id="alice")

# Retrieve and search memories
memories = m.get_all(user_id="alice")
search_result = m.search("tell me my name.", user_id="alice")

Key Recommendations:

For Qdrant:

Use a local path for persistent storage
Ensure correct embedding model dimensions
Add metadata to memories for better tracking

For GraphRAG and Neo4j:

NEVER hardcode passwords (use environment variables)
Use the latest Ollama models
Verify Neo4j connection details

General Troubleshooting:

Confirm Ollama is running (ollama serve)
Verify model availability (ollama list)
Check Qdrant and Neo4j services
Set logging to DEBUG for more insights

Specific Error Resolutions:

"ERROR:root:Error in new_memories_with_actions: 'event'":

Add explicit metadata
Ensure consistent path and permissions
Verify Qdrant configuration

"OpenAI API key error":

Remove OpenAI-specific configurations
Use Ollama as the primary provider
Set up local LLM entirely through Ollama

Let me know if any of that works. If there's any other data you con provide I can probably help you troubleshoot further.

It has added two memories, wont go further

Hi there! I understand you're having issues with Mem0 when using it with Ollama locally. Let me help you resolve these problems.
The issues you're experiencing can be broken down into two main problems:

Error with new_memories_with_actions: 'event'
OpenAI API key error in the GraphRAG configuration

Here's how to fix these issues:

First, let's correct the Qdrant configuration:

import os
from mem0 import Memory

# Ensure qdrant directory exists
os.makedirs("./qdrant_data", exist_ok=True)

config = {
    "vector_store": {
        "provider": "qdrant",
        "config": {
            "collection_name": "test_collection",
            "path": "./qdrant_data",  # Add local storage path
            "host": "localhost",
            "port": 6333,
            "embedding_model_dims": 384  # Correct dimension for nomic-embed-text
        },
    },
    "llm": {
        "provider": "ollama",
        "config": {
            "model": "llama2",  # Use a stable model
            "temperature": 0,
            "max_tokens": 8000,
            "ollama_base_url": "http://localhost:11434",
        },
    },
    "embedder": {
        "provider": "ollama",
        "config": {
            "model": "nomic-embed-text",
            "ollama_base_url": "http://localhost:11434",
        },
    },
    "version": "v1.1"
}

# Initialize Memory
m = Memory.from_config(config)

# Add memories with proper metadata
m.add("I'm visiting Paris", user_id="john", metadata={"type": "event", "category": "travel"})

For the GraphRAG configuration, remove OpenAI-specific settings:

config = {
    "llm": {
        "provider": "ollama",
        "config": {
            "model": "llama2",
            "temperature": 0,
            "max_tokens": 8000,
            "ollama_base_url": "http://localhost:11434",
        },
    },
    "graph_store": {
        "provider": "neo4j",
        "config": {
            "url": "neo4j://localhost:7687",  # Use local Neo4j or your actual URL
            "username": "neo4j",
            "password": os.getenv("NEO4J_PASSWORD")  # Use environment variable
        }
    },
    "version": "v1.1"
}

Key Points to Check:

Make sure Ollama is running:

ollama serve

Verify model availability:

ollama list

Pull required models:

ollama pull llama2
ollama pull nomic-embed-text

Ensure Qdrant is running and accessible at localhost:6333

Common Issues and Solutions:

If memories aren't being added: Make sure the proper metadata is included and the embedding dimensions match your model
If you get OpenAI errors: Remove any OpenAI-specific configurations and ensure you're using Ollama consistently
If storage issues persist: Check that the Qdrant data directory has proper permissions

Let me know if you need any clarification or run into other issues!

Didn't work

Provided a quick fix if the prompt is too long for the model to follow in #2043


[Bug] No longer able to add slots in dialog

From the latest commit:
When building a dialog, the dialog form appears with one slot, labelled Slot rather than Slot 0.
It is possible to add a control in that slot, but Ctrl-A doesn't work when adding more slots.

Well, actually, you can add a sizer or a single control to this. Similar as with e.g. a frame.
This is almost the same as with revision 0.9.x but there the SLOT was not shown and so it was clear that a sizer had to be added. ("Almost" because in 0.9 it had to be a sizer, not something else.)
I need to check how to make this clearer, e.g. with a checkbox "Add sizer".

Ah yes. I've added a sizer, and very easy to add a number of slots to that. As you have said, maybe a checkbox "Add sizer" when the dialog is crreated would be good, but this is fine now I know.

OK, I have updated the dialog with "Add sizer". Also, the tooltip help is better now and the information is also displayed on the Properties tab.
Thanks a lot for using and testing the master branch.

Dietmar,
Thanks for changing this. I’ll continue to regularly clone the the master branch,
Thanks for all your work on this,
David.
From: Dietmar Schwertberger<EMAIL_ADDRESS>Sent: 11 July 2020 01:15
To: wxGlade/wxGlade<EMAIL_ADDRESS>Cc: davidkreynolds<EMAIL_ADDRESS>Author<EMAIL_ADDRESS>Subject: Re: [wxGlade/wxGlade] [Bug] No longer able to add slots in dialog (#411)
OK, I have updated the dialog with "Add sizer". Also, the tooltip help is better now and the information is also displayed on the Properties tab.
Thanks a lot for using and testing the master branch.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub https://github.com/wxGlade/wxGlade/issues/411#issuecomment-656946550 , or unsubscribe https://github.com/notifications/unsubscribe-auth/AD4CGCB3S6KKNVBHSZXGDATR26VJHANCNFSM4OWV5KAQ .  https://github.com/notifications/beacon/AD4CGCBCVNWL5M4WZGRSP63R26VJHA5CNFSM4OWV5KA2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOE4UDK5Q.gif


Feature request: Add camera to bubble level

Need to experiment with how this can be used and what benefits it would provide.

Given the bubble level is designed for determining if a tent site is flat, I will not be adding this. I know this may be useful for people who are using this to hang photos / similar, but that's not a supported use case of TS.


snack bar: change background color

I use snack-bar to show notifications. I want to change background color when the response is: error (background: red) or success(background : green).
Code:
let config = new MdSnackBarConfig();
config.duration = 500;
snackBarRef = this.snackBar.open("Message", "", config);
snackBarRef.afterOpened().subscribe(()=>{ });
snackBarRef.afterDismissed().subscribe(()=>{ });
I tried to use:
let snackContainer = document.getElementById("cdk-overlay-0");
snackContainer.firstElementChild.setAttribute("style","background-color:red");
but the snack-bar disappear.

+1, I tried lots of css selectors and couldnt get any luck which sucked a bit.

This was added with https://github.com/angular/material2/pull/2804 which will be in the next release.


python test timeout: _face_interface_test.MultiCallableInvokerFutureInvocationAsynchronousEventServiceTest

https://grpc-testing.appspot.com/job/gRPC_master/15549/config=dbg,language=python,platform=macos/testReport/junit/(root)/tests/py_test__face_interface_test_MultiCallableInvokerFutureInvocationAsynchronousEventServiceTest/

Seen again here, along with three more friends.

This seem to be fixed by #5763


Remove Rafael Cenzano

I have graducated from high school

Congrats!! 🎓
Best of luck beyond high school 🚀


Add support for mongodb

NO.  Let's close this issue.
https://restheart.org/

or more properly describe what we want to accomplish perhaps in a "user story" sentence or two.
Maybe an integration WITH RESTHeart is something feasible, but then what are we solving or making better, simpler, etc.
Need a user story here on this issue.

Essentially transpile the same rSQL and convert to Mongodb filters..may be no joins.

Duplicate #315


Restarting a game doesn't reset back to Wave 1

Resetting the game causes the wave to increment, but only up to the number of preset waves + 1.

Confirmed to be related to the first branch of the if statement in getWave() on line 180 of scripts/sketch.js. Evaluating only the contents of the else branch seems to fix the problem.

It seems like the nextWave() function is somehow being repeatedly called, which causes the wave to increment several times.

This has now been fixed with the new random enemy waves! Hurray! 🎉


Add jupiter-cpi as supported crate

Jupiter is one of the top Solana protocol.
https://github.com/jup-ag/jupiter-cpi
Thank you.

Thanks for bringing up the issue. This is similar to https://github.com/solana-playground/solana-playground/issues/223#issuecomment-2041460957, but upgrading the playground Anchor 0.30.0 is a bit challenging. We might just add the CPI crates for 0.29.0 in the meantime before we can upgrade.

Thanks for bringing up the issue. This is similar to #223 (comment), but upgrading the playground Anchor 0.30.0 is a bit challenging. We might just add the CPI crates for 0.29.0 in the meantime before we can upgrade.

Thanks for the anwser. That would be great to add it in the mean time indeed! Thanks again.


Add sbat-tool test

Codecov Report

Merging #33 (461687d) into main (dd7c3ac) will increase coverage by 4.42%.
The diff coverage is 85.00%.

@@            Coverage Diff             @@
##             main      #33      +/-   ##
==========================================
+ Coverage   88.68%   93.10%   +4.42%
==========================================
  Files          10       10
  Lines         592      609      +17
==========================================
+ Hits          525      567      +42
+ Misses         67       42      -25

Impacted Files
Coverage Δ

sbat-tool/src/main.rs
80.34% <85.00%> (+28.34%)
:arrow_up:


"watch intro video" link is broken on https://fastht.ml/, it links to https://fastht.ml/#

I have been looking forward for a framework like this, pure python but allows more customization than streamlit and gradio. Thanks so much for creating the project!
When I click the watch intro , nothing happens. then I realize the href is probably wrong. See the attached screenshot.

Video link uses JS to open in an iframe.


Unify feature type detection

PR Checklist

[X] This comment contains a description of changes (with reason)
[X] Referenced issue is linked (closes #701)
[X] If you've fixed a bug or added code that should be tested, add tests!
[X] Documentation in docs is updated

Description of changes

ehrapy now fully relies on ep.ad.infer_feature_types whenever a distinction between categorical and numerical features is needed.
The feature types are inferred automatically when not done manually by the user.
Feature/Encoding types stored previously in adata.var["ehrapy_column_type"] were removed.
Improved date detection in the ep.ad.infer_feature_types method: All dates stored in any ISO-format as a String are not automatically detected as dates.

Discussion points

The encoding method stores data in adata.uns. With the new feature type detection, we could remove that now. The only reason why I kept it is because it is used to find out if the adata is already encoded or not, and, depending on that, the behavior of the encoding method changes. I could manually test that instead by just checking that all features are numerical. However, that would be more computationally expensive than simply checking if a specific key in adata.uns is present.
When loading data via the dataloader, we have the option to automatically encode them (encoded=True). Because the encoding relies on feature types, those will automatically be inferred whenever data are loaded. I think automatically encoding them is a very convenient feature, so I guess we want to keep this behavior, but I still want to confirm that you are aware of and fine with this behavior.
Related to the point above, we could also pre-define the correct feature types for the dataset offered by ehrapy, which would be really convenient for the users but not so pleasant for us to do. Just wanted to raise this as an idea and hear what you think about that.
Should we offer a convenient function to correct feature type annotations? Something like ep.ad.set_feature_type(["feature1", "feature2", "feature3"], "categorical"), where three features that were detected incorrectly would be corrected to the feature type "categorical"?

ToDos

[x] Add more specific warnings for tricky cases when inferring feature types
[x] Resolve ToDos in the code
[x] Don't save feature type information several times (specifically the encoding information in adata.uns, as described above)
[x] Store everything encoding related currently stored in adata.uns in adata.var or remove it
[x] Pre-safe all feature types in all ehrapy dataloader
[x] Add method to switch feature types easily and reference it in the warning

undo_encoding Does this also need to be removed from the docs?

I removed it from usage.md and looked for other usages. Is there another place I need to delete it from?

For the release notes, it'd be great if we had a function which takes the old feature annotations and moves them to the right places. We would tell people to run that when moving versions. Is this even necessary when it will run our new functions anyways? It might just reannotate the features with the right slots then, right?

The changes shouldn't cause any function to fail, as ep.ad.infer_feature_types will run automatically when feature types are not present. The only noticeable change might be that certain features are detected differently now. For instance, previously, a column with 0/1 values would usually be detected as numeric, whereas now it is categorical. Consequently, analysis results could differ with the new release. Still, I would vote against having a method that transfers the old feature type annotations, as they are not more reliable than the new ones. Also, several methods previously handled this differently and stored the annotations inconsistently, so there isn't really just one old feature type annotation.

I removed it from usage.md and looked for other usages. Is there another place I need to delete it from?

No, I just probably missed it. Thanks!
OK concerning the "transfer method"


avoid illegible ticks when the size of the domain exceeds x times the number of ticks

http://localhost:8008/?test=mobyDickFaceted has approximately 8 times the number of autoticks (26 letters vs 3.3 autoticks), and it's acceptable because it's single letters (there's even a bit of space left).

With a threshold at 10, and setting the height at the ultimate point before this kicks in, it's really become illegible.

With a threshold at 8, it's just barely begun to be illegible.

With a threshold at 5, it's packed, but still legible.

closes #74

needs an update with the new tickSpacing option


Serverside Crash

https://hastebin.com/elugesurem.sql
Made sure I had both SuperCore and Heavy Inventories on the server files, it wouldn't start and kept going in a crash loop.

This was caused by an oversight on my part. The problem has been fixed just not released yet. Should be out very soon.


Crash on server start (com.pg85.otg.forge.OTGWorldType.getBiomeProvider)

When I start server with 1.10.2 biome bundle map, the server crash.
crash report :
`Description: Exception in server tick loop
java.lang.NoSuchMethodError: net.minecraft.world.WorldSettings.func_77166_b()Lnet/minecraft/world/WorldSettings;
at com.pg85.otg.forge.OTGWorldType.getBiomeProvider(OTGWorldType.java:70)
at net.minecraft.world.WorldProvider.func_76572_b(WorldProvider.java:58)
at net.minecraft.world.WorldProvider.func_76558_a(WorldProvider.java:40)
at net.minecraft.world.WorldServer.(WorldServer.java:116)
at net.minecraft.server.MinecraftServer.func_71247_a(MinecraftServer.java:298)
at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:270)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:484)
at java.lang.Thread.run(Unknown Source)`

This is reproduced with OpenTerrainGenerator-1.12.2 - v6.
Issue is due to the mod calling the client side only method WorldSettings::enableCommands() on a server.

fix?

Did anyone ever fix this?

Same issue as well with sponge.
net.minecraft.world.WorldSettings.func_77166_b()Lnet/minecraft/world/WorldSettings

It's an easy fix, not sure when PG will have time to implement

Hey, thanks for reporting. Should be fixed with v7, you can grab a dev build from the OTG Discord at /openterraingen. Cheers.


⚠ Bofrost.lu has degraded performance

In decbd3d, Bofrost.lu (https://www.bofrost.lu) experienced degraded performance:

HTTP code: 200
Response time: 2018 ms

Resolved: Bofrost.lu performance has improved in 625c85c after 8 minutes.


remove call to String#sum, fixes #8

Fixes #8, see comments there.

resolved with #11. can be closed.


Depend directly on swc crates

Description
I'm profiling compile time difference of https://github.com/swc-project/swc/discussions/7911
Testing Instructions
Closes WEB-1499

Profile result
Original compile time:  2m 05s
New compile time: 2m 2s

Closing as it didn't have enough impact


imply oneway=yes for trunk_link, primary_link, secondary_link and tertia...

...ry_link
fixes #106

closing for now, seems the osm standard is not to imply oneway for trunk_link and lower


Toggle buffer-bar visibility to hide/ unhide it from the window.

Ability  to use a keybinding to hide the entire buffer bar like so:
BEFORE

AFTER

Create a keybinding for :set showtabline=..., that should work :)


VERSION constant cannot find version file in v9.0.0

👓 What did you see?
Building cucumber-ruby from source for Homebrew. Running the application returns the following:
/opt/homebrew/Cellar/cucumber-ruby/9.0.0/libexec/gems/cucumber-9.0.0/lib/cucumber/platform.rb:10:in `read': No such file or directory @ rb_sysopen - /opt/homebrew/Cellar/cucumber-ruby/9.0.0/libexec/gems/cucumber-9.0.0/VERSION (Errno::ENOENT)

✅ What did you expect to see?
The application does not crash.
📦 Which tool/library version are you using?
Cucumber v9.0.0 build with Ruby 3.2 for Homebrew
🔬 How could we reproduce it?

Steps to reproduce the behavior:

Check out this PR: https://github.com/Homebrew/homebrew-core/pull/141026
Run brew install --build-from-source --verbose cucumber-ruby
After the build completes, run cucumber
Error appears

📚 Any additional context?
Relates to https://github.com/Homebrew/homebrew-core/pull/141026

This text was originally generated from a template, then edited by hand. You can modify the template here.

I see same issue, after doing a bundle update(from cucumber 8 -> 9)
I just reproduced it in irb, to reduce confusion from my test stuff
Basically owned up irb and
require 'bundler/setup'
require 'cucumber/rake/task'

This was on Rube 3.1.2
That actually is the first require my stuff is doing of cucumber. Did the order of require's possibly change?

I am experiencing the same issue with a bundle install in a docker container.
Any workaround except setting a Gemfile.lock for the older verison?

This was the first release I did using the new methodology. I will triage this today but it might not be fixed until Monday.

I've renamed the issue as it's not directly finding the file (The location has to be set owing to our release toolset).
Can you try this branch please. It "should" fix things.
gem 'cucumber', git: 'https://github.com/cucumber/cucumber-ruby.git', branch: 'hotfix/sep_1'

Confirmed that the branch works.

I can not set this up, but it looks like it is problem with my environment and not your fix.. So i look forward to a patch-release..

A fix will be pushed out today at some point. I'll leave this open just incase other people visit.

Confirming that v9.0.1 resolved the issue for us on the Homebrew side. Thanks!


Add a post filter to pick pending single file downloads

I usually have a long list of files to download which takes hours, perhaps due to load balancing on the source end; only one animated file can be downloaded at a time.
Nonetheless, I cannot search the results without them, thus I usually end up browsing the same files over and over again. This wastes a lot of my time and I still skip many worthy media which remain in the background with all the glitter.
So please add a filter which can perhaps setup a md5 list of the pending downloads and filter/limit the search results. Perhaps like:
grabber:InDownloadQueue

Indeed, I see where you're coming from with this suggestion, and it would indeed be doable by adding it to the Grabber filters, such as grabber:inDownloadQueue.
The issue is that this information is technically hard to fetch in the code where the "grabber" token is computed. I'll see what I can do.


Fix build with Python 3 + pull in changes from raldridge11's fork

Hi, the changes look great!
It seems that there are some merge conflicts with your branch, so if you don't mind, could you do an interactive rebase on the latest master (removing the merge commit) and then force-push the result to your review branch. (which, as a side-effect, will automatically update this PR)

I've rebased onto the current master, so should not have any merge issues now.
Let me know if you really want me to change the python-config part in the Makefile.

I still think it's better to leave out that particular commit. However, I went ahead and committed the rest of this PR. Thanks a lot for contributing! :)


[WIP] feat(translation): Init markdown translation.

Add translation pkg to goplus community.
Ref issue: https://github.com/goplus/community/issues/31

TestTranslateMarkdown test result.

# Heading

## This is a secondary title

This is an ordinary text.

This is a paragraph*Bold font*Gets or sets the text of the.

This is a paragraph**Bold font**Gets or sets the text of the.

This is a paragraph***Rough italics***Gets or sets the text of the.

This is a paragraph`Inline code`.

This is a block of code:

```go
func main() {
        fmt.Println("Hello, World!")
}
```

Here's a list:

- List Item 1
- List Item 2
        - List item 2.1
        - Table item 2.2
- List Item 3

This is an ordered list:

1. List Item 1
2. List Item 2
        1. List item 2.1
        2. Table item 2.2
3. List Item 3

This is a reference:

> This is a quote.

Here is an indented code block:

        func main() {
                fmt.Println("Hello, World!")
        }

This is a paragraph[Link](https://www.example.com)

This is a paragraph![Image](https://www.example.com/image.jpg)

Support long markdown translation(Over 5000 characters)

Translation result:

=== RUN   TestTranslateMarkdown

# Heading

## This is a secondary title

This is an ordinary text.

This is a paragraph*Bold font*Gets or sets the text of the.

This is a paragraph**Bold font**Gets or sets the text of the.

This is a paragraph***Rough italics***Gets or sets the text of the.

This is a paragraph`Inline code`.

This is a block of code:

```go
func main() {
	fmt.Println("Hello, World!")
}
```

Here's a list:

- List Item 1
- List Item 2
	- List item 2.1
	- Table item 2.2
- List Item 3

This is an ordered list:

1. List Item 1
2. List Item 2
	1. List item 2.1
	2. Table item 2.2
3. List Item 3

This is a reference:

> This is a quote.

Here is an indented code block:

	func main() {
		fmt.Println("Hello, World!")
	}

Xu Shiwei: Design and implementation of Go + v1. x, the first phase of Go + open class
Original Seven Niuyun Technical Team Seven Niuyun Technical Team 2021-11-12 17:03
On October 15th, Qi Niuyun hosted "Go + Together! Go + 1.0 Conference and Launching Ceremony of Go + Developer Foundation were grandly held in Shanghai.

In order to maintain close communication with Go + developers and industry practitioners, and jointly promote and exchange the iterative development of Go +, the Go + core development team specially planned a series of live sharing of "Go + Open Class". The theme of the first issue was "Design and Implementation of Go + v1. x", and the sharing guest was Xu Shiwei, CEO of Seven Niuyun and inventor of Go +.

This article is based on the live broadcast content. Click on the end of the article to read the original text and view the full video playback.

Live preview:

At 19:00 on November 13th (Saturday), the second issue of Go + Open Class officially started! Xu Shiwei, CEO of Qiniuyun and inventor of Go + language, will share "import process and module management of Go +". Click the button to make an appointment for live broadcast! Scan the code to enter the live exchange group and participate in the extraction of Go + official periphery ~

Today's sharing is the first lecture series on "Design and Implementation" after Go + 1.0, which mainly shares two parts:

- Go + Overall Architecture
- How to add functionality to Go +

The first part mainly shares how to realize the overall architecture of Go +; The second part is to talk with you about how to become a contributor to Go + and how to add new functions to Go +.

I. Go + Overall Architecture

The code of Go + is much simpler than that of Go. I have previously shared three ways of writing Hello World of Go + in the knowledge planet "Go + Open Class":

The simplest way is "imperative", which is more like code on the command line.

According to my observation, when children understand programming statements, the threshold of "imperative" statements is the lowest, and even more acceptable than function calls. Therefore, although I struggled for a while, I decided to add "imperative" grammar to further lower the threshold and facilitate children to understand.

What I want to share today is what happens behind grammar. The following figure is the overall architecture diagram of Go +. Let's take Hello world as an example to see what happens during execution.

First, look at the overall architecture diagram on the left. The starting point is the source code of Go +, and the end point may be two: if you are running an executable file, the end point may be a software, and the other may be a Package.

In this process, we actually experienced several intermediate products, and the part in the graphic box above is the description of intermediate products, such as Go + Source, Go + Token, Go + AST (Abstract Syntax Tree), Go DOM Writer and so on.

Among them, the "DOM Writer" module in the cloud framework is not a concrete product. In simple words, you can "fill things" into it, and then you can generate Go AST, which can be converted into Go + code. Finally, it is packaged as a package or executable program through the command line program of Go +.

The overall process is roughly like this.

The arrows in the figure are marked with many blue characters, which represent the modules needed to really accomplish related things. On the right is the name of the key module. These names may seem familiar to everyone, and it may be easier for people who know the compilation principle to understand them. Let's explain them one by one.

1. Token & Scanner

The key concepts involved in the first step are Token and Scanner.

Token is a concept in compiling principle, which is similar to the concept of "word" in natural language. Source code is actually a byte stream, which is a string of text. Through a process similar to lexical analysis, the byte stream is converted into a stream of "words", which is called Token stream.

This process is often called "lexical analysis", or "lex" process, in compilation principles. In the code, we often call this module Scanner, which is actually the process of lexical analysis.

Usually, when we write our own code, we don't need to do lexical analysis by ourselves, but Parser is responsible for calling it. So this is actually a basic process, turning the text into words.

For example, "if" of an if statement is a word, and the integer "100" is a word. It is the concept of Token to cut into words with certain grammatical meanings like this.

Understanding the Token flow makes it very easy to understand the first step.

2. AST & Parser

The key concept involved in the second step is AST & Parser.

The process of this step is the process of grammatical analysis, and the upper level of morphology must be grammar, where the logic is similar to natural language.

The full name of AST is abstract syntax tree, which is the DOM of language. The result of our syntax analysis is a syntax tree, which corresponds to a structured article in natural language, that is, DOM tree. DOM model is a classic model in text processing.

By analogy, common documents that we often come into contact with, such as XML and json, also have their own DOM, which is essentially the same as languages having their own AST. Therefore, AST is actually a DOM, which meets the needs of our understanding of syntax structure.

Parser is actually grammar analysis, which is responsible for transforming token flow or word flow into grammar tree, that is, having an understanding of grammar.

These two processes, lexical parsing and syntax parsing, are very standard in compiling principles.

Let's take a look at how Parser is used.

Parser is used in the same way as Go in Go +:

fset: It is mainly used to record the relationship between file offset and line: col, and it is used to locate the prompt when syntax errors occur, such as which row and which column the errors appear in;

path: The most important parameter is the directory where the source code is located;

filter: filter file use, can pass nil. This parameter is not important and is used to filter out files in the directory that we don't want to deal with;

mode: Some flags that control the Parser process, which can be simply passed 0;

The above is the input related way, so you can see that the most important thing is the directory where the source code is located. Among the parameters related to the output, the first parameter is the most important:

pkgs: The resulting AST. Because there may be multiple pkgs in a directory, pkgs is a map;
first: The first error that occurs when Parser goes wrong.

3. cl & gox

The next stage is the narrow compilation process, which involves the cl & gox modules. We usually call the whole process compilation, which shows that this is the most critical process.

The essence of compilation is semantic analysis, which is responsible for transforming Go + AST into a call to gox DOM Writer. Here is a complexity brought about by Go compatibility-the derivation of types. For example, it is very difficult to deduce what kind of variable "variable a" belongs to in semantic analysis. This is also the biggest difference between Go + 1.0 and Go + 0.7-in the new version, we introduced the gox module, which is responsible for generating the abstract syntax tree (AST) of Go.

This part is extracted as a separate module because semantic analysis in Go has a key point, that is, "deriving variable types" mentioned above, which is a very complicated process, so we have built-in automatic derivation mechanism for variable types in gox, a DOM Writer component.

The Go + 0.7 version actually does automatic derivation of types in the compiler, which makes the compiler very complicated. After the new version optimizes this mechanism, it will be much easier to add functions to Go +, which makes the compiler's work very simple.

The compiler inputs the abstract syntax tree of Go + and outputs the DOM Writer of Go, and this component generated by Go is actually to generate the abstract syntax tree of Go. Therefore, we can see that the result of cl + gox is to transform Go + AST into Go AST, which essentially realizes the transformation of data format.

Let's make an analogy. Friends who know the invention history of C + + may know that the earliest compiler of C + + is called C-front, which is the front end of C. This version of the C + + compiler is to convert C + + into C, and then compile by C's compiler. At present, the working principle of Go + is very similar to C-front, which is very similar to a Go-front. Based on this pattern, we reuse the tool chain of Go language.

Let's look at how the compiler is used.

The cl procedure has three input parameters:

pkgPath: The target to compile, the import path of Go + pkg, that is, what the path name looks like when this package is referenced, which is a very important information in the compilation process;
pkg: AST of the target Go + pkg to compile;
conf: Configuration for compilation. The simplest thing is to pass nil, which enables the default configuration.

There are two parameters in the output:

p: Components of the generated gox DOM Writer. At this time, the returned component is not empty, but its interface has been called by cl to complete the format conversion and has been filled with data;
err: Returns all compilation errors if an error occurs during compilation. Note that unlike the previous parser procedure, parser returns only the first error because it is compatible with Go semantics, while the cl procedure returns all errors.

gox can be simply divided into two parts:

The first part is used to fill cl with data and realize format conversion;

The second part is used to generate Go AST/Source.

The function interface in the first part is very complex, so it is necessary to create a package, in which a function or type, variable or constant is created. After creating the function, it is necessary to write code through API. Therefore, there are a large number of interfaces in the format conversion part, which can basically constitute a complete DOM tree generation process, which is why we call gox module DOM Writer component, because most of its API is for generating DOM.

The second part is how to generate the abstract syntax tree of Go, or how to generate the source code of Go after filling the data.

The first function, ASTFile, is to generate Go AST, a very simple function call. Its first parameter is the gox DOM Writer instance. The second parameter is more interesting. You know that a directory often contains multiple packages, most commonly a normal code package and a package that generates test code. The second parameter is to determine what kind of syntax tree we want to generate, and then generate it.

The second function, WriteFile, is a simpler way to generate Go's source code file, with the first parameter, which is a file name, than just now. We use this file name to generate the source code of Go.

Once you have Go's source code or abstract syntax tree, you can call Go Tools to compile. For example, we can go run, go install, and of course you can go build.

Of course, at the beginning of Go + release, we said that we are dual-engine, and we support both static compilation and dynamic interpretation execution.

At present, Go + has implemented a dual-engine system, but the maturity of the two engines is temporarily different. Statically compiled engine engineering completion is very high, and only a limited number of Go functions are not supported for the time being.

But Go + 's interpreter is not yet very mature, and it is certainly much better than the interpreter engine we showed at last year's press conference. The current Go + interpreter adopts an open architecture, which supports a large number of Go parsers as the underlying engine. For example, use the Go parser made by the Go + team itself.

At present, the parser method of Go + is relatively simple, which converts the source code of Go + into the abstract syntax tree of Go +, then becomes the abstract syntax tree of Go, and finally executes it through the parser of Go.

At present, the completeness of Go interpreters in the market, including ourselves, is not particularly high, and we will further improve them in the future, especially when doing enhancement in the field of data science.

These are the core processes of the overall framework of Go +. Let's sum up the following picture:

It is a series of the whole content. As you can see, the whole core process is still very simple.

First, new a FlieSet, which is just the need for an error prompt. The real first step is the second line, which is the Parser procedure. We pass a "." that is, the current directory to Parser, and when Parser finishes, it gets pkgGops, which is a list of packages.

Let's assume that we are concerned with the main package, and we take out the Go + AST of the main package and pass it to the compiler for compilation.

So the third line is the compilation process. The compilation call is cl.NewPackage, and we pass in the abstract syntax tree of Go +, and finally get an instance of DOM Writer of Go. We call this instance for WriteFile, and we can generate the source code of Go. Finally, call "go run" and you can execute it.

The macro framework of Go + is roughly like this. Understanding the code on this page can basically connect the whole process in series.

2. How to add functionality to Go +

Next, we will analyze how to understand the architecture of Go + from the perspective of how to add functions to Go +. In this section, we will share which modules are usually involved and how to modify them.

1. Add syntax to Go +

Let's make a hypothesis: If we want to implement the so-called "trinocular operator" in C language, which modules do we need to modify? Usually we need to make a few judgments:

In the first step, we need to determine whether we have changed the abstract syntax tree of Go +. Of course, there will be functions that can be added without modifying the abstract syntax tree, but generally speaking, a new function often needs to modify the abstract syntax tree. For example, to implement trinocular operators, it is necessary to add a node of the abstract syntax tree to express the new language.

Modifying AST usually modifies two parts: abstract syntax tree and syntax parsing. The two are closely related because pasrser is the component responsible for generating the abstract syntax tree.

So the first thing we need to do when adding functionality is modify the ast module to add an abstract syntax tree node to it. Still taking the trinomial operator as an example, we need to add a node of the trinomial operator expression.

In the second step, after you have a new abstract syntax tree, you need to modify the parser module to escape the text of the trinocular operator into an abstract syntax tree.

The third step is to modify the cl module. The cl module is responsible for converting the new trinocular operator expression into a call to the DOM Writer component gox to generate an abstract syntax tree for Go. Because the trinocular operator is an expression, we are modifying the cl/expr.go file in the compiler. If a statement is added, it is usually the cl/stmt. go file that is modified.

Let's look at the specific contents to be modified in each module.
First, let's look at what we want to add to the ast module.

In the picture above, you can see "Cond? X: Y "is an abstract syntax tree with one-to-one text correspondence, which is very easy to understand. There are three very simple functions that the expression needs to implement in Go + AST, representing the starting point and ending point of the expression, and an empty function indicating that this is an expression node.

The second part is to modify the parser, that is, the parsing module. Syntax analysis is responsible for transforming token sequence into nodes of abstract syntax tree. This process is relatively personalized and does not have much common relationship. The location of link jump is the location of the code modified by trinocular operators. If you are interested, you can try to change it.

The third part is modifying the compiler. The first step in modifying the compiler is not to change it immediately, but to think in mind what the AST node of the added functionality would look like to convert to Go code. The blue annotation in the above figure is the trinocular operator, and the result of its final transformation I made a possible implementation, which is a call to a closure.

What are the difficulties in implementing this closure? It is the return value type "T" of closure. What type of T is cannot be judged by syntax alone, but by semantics. As we mentioned earlier, the type derivation is done through the DOM Writer component gox, and you can see how to derive the return value "T" with this component.

If we use the compiler, that is, the cl module, to derive the return value "T", the compiler code will be much more complicated, while the compiler code of Go + v1. x version is very concise, because we free the work of type derivation from the compiler, so its code is basically close to the feeling of parsing only.

The overall structure of the code in the above figure is very simple, and the only difficulty is how to generate "T".

The above figure is part of the compiler code finally edited. Among them, the code for compiling trinocular operator expressions is very short, basically only about ten lines.

Let's see how it is realized. First, in the first line, we define an automatic variable, that is, a variable whose type needs to be deduced automatically.

In the second step, we new a closure. The argument list for this closure is empty, so the first argument is nil; There is only one return value, so we create a Tuple to pass in the variable just defined; Because this closure is non-indefinite, the third parameter is false; BodyStart is the body of the function that starts the closure, starting to write the code.

The latter DOM is very simple, but you may find it strange: Why compile the expression before returning? Anyone who has studied compilation principles will know a concept-inverse Polish expression, which is the expression used by DOM, with parameters before operators.

Return has a parameter "1" to Return only one expression, and the last "end" to indicate the end of the closure. "call (0)" corresponds to the parentheses in the compiler modification section, indicating that the closure was called directly without passing parameters.

It's almost such a concept. On the whole, there is nothing particularly difficult to understand.

The reason why gox is very important is that when the compiler translates the abstract syntax tree of Go + and finally turns it into truly understandable code, it needs the help of gox DOM Writer.

If you want to contribute code to Go + and understand and implement the functional development of Go +, you need to understand the gox module very well, because basically the whole modification process is related to gox.

2. Write test cases

As you can see, it is very easy to add functions to Go + after having these functions and features. Of course, we attach great importance to engineering, and we must consider the test case after completing the function.

The abstract syntax tree, that is, the ast module part, basically does not need to be tested, because it only defines the data structure and has little code;

The parser module needs to be tested to see if it correctly transforms the Go + code into the desired abstract code tree.

The cl module needs to test whether the Go + code is correctly converted into the desired Go code.

Let's explain them one by one.

First, let's look at how to test the parser module. For parsing, in fact, we basically don't need to write test code, but add test cases to our prepared test framework. I think this is a point where Go + has done a good job in productivity optimization.

There is a _ under gop/parserThe testdata directory, which is full of test cases, and each test case is a directory. Let's still take the trinomial expression as an example. The directory can be named "ternary". There are two files in each test case directory-the first file has the suffix. gop, that is, the code you wrote, and you can take whatever file name you want, such as ternary.gop for trinocular operators. The other file name must be fixed as parser.expect, and its content is the result of the expected abstract syntax tree dump into text, which is used to verify whether our converted code is correct.

We have prepared three test cases for lambda expressions, so we can take a look at them and basically use them ourselves.

Of course, who executes the test cases? It's actually the function TestFromTestdata. But there is a problem here. This function tests a batch of test cases. When we find that there is something wrong with the code we added and want to debug it, we need to modify the TestFromTestdata function, and change its first line "sel: =" "" to "sel: =" ternary "" or other directory names of test cases we set, so that we can only execute the test cases we added.

Next is how to test the cl module, which is the semantic analysis part. This part is simpler than the parser part.

You basically just need to find compile_ in the compiler directoryTest. Go file, add a test function in it, such as TestTernaryExpr. The code of this function is also very simple. Call the gopClTest function and give you the code you want Go + and the code you want to generate Go.

Finally, we summarize the complete process of adding functions to Go +.

The first step is to fork Go + code first, and then clone your fork code repository to develop locally.

The first step of development suggests that you create a new function branch, and then modify the code and pass the test, then you can submit the code and submit the pull request to Go +.

The whole process of adding functionality to Go + is probably like this.

Through the complete introduction of the above added functions, I would like to finally summarize the key contents:

Adding new features is usually modifying gop/ast, gop/parser and gop/cl modules
The most complex cl process is much easier when you add new functionality to Go +, thanks to gox DOM Writer's powerful type auto-derivation and Go AST generation capabilities

These two points are very important for the subsequent iterative development of Go +.

III. Exercises & Contact Information

Finally, leave some exercises for interested friends. You are also welcome to share the obstacles encountered during the practice, so that we can further simplify the process.

1. Basic exercises
Implement the trinocular operator (cond? expr1: expr2)

2. Advanced exercises

Special note: Realize the practice of trinocular operators we do not need to submit pull request, Go + temporarily no plans to add this function. But it can be used as a good exercise to practice and test.

We will also help you solve the problems encountered in the training process. Contact information is as follows:

1. Go + User Group (WeChat Group): You can ask questions directly in the group and @ me, I will answer them directly in the community;
2. Go + Open Class (Knowledge Planet): PPT and text content of this speech will be synchronized in Knowledge Planet. Welcome to ask questions and exchange on it.

This is a paragraph[Link](https://www.example.com)

This is a paragraph![Image](https://www.example.com/image.jpg)

--- PASS: TestTranslateMarkdown (0.70s)
PASS
ok  	github.com/goplus/community/translation	1.006s


Reject joining worker that uses reserved name

Previously, when a joining worker used the name of an
existing worker, it caused the target worker of the join
to crash.
Note that depending on how we decide to approach #1128, this could close that one as well.  See my comment there.
Closes #1170.

We shouldn't merge this until after the 0.19.3 switch PR merge is done, at which point I think this will merge smoothly, but I'm not certain.

How can we have an automated test for this?

At the evil joining worker we should see:
Shutting down early: Proposed worker name is already reserved by the cluster

At the contacted worker:
Worker trying to join the cluster is using a name that's already been reserved

I'm thinking that this is good as short term but, we should open an issue to discuss how to handle name collisions. In a large, automated system, this could really suck. I think that reverting to a new randomly generating name and trying again seems like a good approach.

@SeanTAllen Yeah we should open a separate issue, since it's not straightforward.  If you run the same command line again after worker failure, you'll be surprised to find that it tries to recover as a different worker (the one whose name was already reserved).

@SeanTAllen I've opened that separate issue and rebased this against master.  This is now 0.19.3 ready.


Update Payload to be a trait alias of http_body::Body

This changes Payload to be a trait alias of http_body::Body and seals Payload so that the only way to implement it is via http_body::Body. content_length was also removed in favor of the more flexible size hint api in http body.
If we're all happy with this I can cut a release of http body and push the cargo.toml change.
cc @seanmonstar @carllerche
Signed-off-by: Lucio Franco<EMAIL_ADDRESS>

Looks good. I notice using the SizeHint is a little trickier... Would a set_exact and exact() -> Option which just handles setting/getting the lower and upper for us be helpful?

@seanmonstar yeah, I was thinking the same, will update http body then this PR.

With https://github.com/hyperium/http-body/pull/14 merged, this can just use set_exact and exact instead.

@seanmonstar ok I applied the changes, and I think this is ready to go.


Question: are backlinks to note subheaders also updated during the refactor?

If there are existent backlinks to the extracted subheader (like so [[Intial Note#Extracted subheader]]) are they updated accordingly with the refactoring?
Couldn't find the info in the documentation.

Seems backlinks to the original note are not updated with refactor -- which for me causes serious problems, as backlinks are as a result broken upon refactoring.
Given that it is rather long notes which need to be refactored, it's quite crippling to break all the backlinks.
(*ie the longest notes are the most likely to have collected backlinks - as a result, the notes most in need of refactoring can't be refactored...)
Anyone have any ideas for work-arounds?

It's been a while.
Were there any updates on this?

Is this extension being maintained? The lack of refactoring backlinks to extracted headers makes this extension far less useful.


Revises generation script for Package.swift

Issue #
N/A
Description of changes
The current Package.swift is quite large with each of the client SDKs listed as products and targets. These can be read from the release directory. The version details can also be placed into the new template with the generate script. This update makes it much simpler.
This update also moves the source files for AWSClientRuntime to the default location so that the path does not have to be set. Xcode was also not showing this code because that directory also contains it's own Package.swift and it causes it to be hidden in Xcode's file navigator panel. With these changes these source files are now accessible via search and the file navigator.
There is also support for reading in filter.json which is optional. If it is defined it will limit which clients are defined as targets and products in Package.swift which prevents Xcode from indexing any code which is not a part of a target. The result is an improved developer experience. Previously nearly 5 million lines of code would be indexed which slows down the Mac which has opened this package.
Conventional Commits

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

A new branch from main is coming which will be pushed by @atierian so that the CI/CD tasks can run successfully.


Adding c:\tmp as needed to pass Kubernetes tests

What this PR does / why we need it:
These two test cases will fail on Windows due to a missing path. Since people may want to run conformance or other tests on a cluster, we should create the path to avoid failure.

Kubernetes e2e suite.[sig-storage] HostPath should support r/w [NodeConformance]
Kubernetes e2e suite.[sig-storage] HostPath should support subPath [NodeConformance]

Error: Error response from daemon: invalid volume specification: 'c:/tmp:c:/test-volume': invalid mount config for type "bind": bind source path does not exist: c:\tmp

cc @jsturtevant @adelina-t

Yeah, this is useful. I usually add this as part of a preprovision extension, but if it's in acs-engine, that's even better.

/lgtm


Fix warning error in infra/iam destroy output

Before this change, a warning message from the destroy command would
print something like:
msg="WARNING: error during destroy, will retry" error="[{},{},{}]"

With this PR, the actual error message is printed out

/lgtm


DO NOT MERGE Make Linking async

Observations:

Expected: Reaching more makes linking / analysis slower.
Expected: Async makes linking faster.
Unexpected: Reaching more makes emitter slower.
Unexpected: Async makes emitter slower.

Last two points probably need investigation.

Updated

OK. I'll go forward with this and try to address the TODO separately.

Updated.


Track USA 341 in real time./>0793681519<\Track SKYNET 1B in real time from Satellite

(Track USA 341 in real time from Satellite app.
https://souravanand.in/sat.html?id=55139]"app_gogle play
"

(Track USA 341 in real time from Satellite app.
r/31.820/64.569/100.0 https://souravanand.in/sat.html?id=55139]"app_gogle play
"


Minor Bug: Status Bar stops at 27.9%

Status bar stops at 27.9% when creating the database from both sources at once (Mozilla and OpenCell ID).
For me this occured when I had the additional info expanded.
The database creation of course continues, its only the status bar that hangs.
Also theres no further log entries.
Also the log says the file length is "959637849" but the line below where it says somethin like "parsed entries" stops at "40664020" not sure if the length and number of entries is simly a different thing or this is also a bug?
Edit: Also the status bar resumes at 50% when the second source is downloaded and then works with no issues till the end

I have handed off this project to @devee. The new official repository for this work is a now at https://gitlab.com/deveee/Local-GSM-Backend.
If this is still an issue, please open it on the new repository with the new maintainer.

I have handed off this project to @devee. The new official repository for this work is a now at https://gitlab.com/deveee/Local-GSM-Backend.
If this is still an issue, please open it on the new repository with the new maintainer.


fix: update connect

This includes the new logic, where the user has to have the extension installed.
Also in the future if you need to check for the extension, we have import { isStacksWalletInstalled } from '@stacks/connect'

@hstove can you rebase?

@hstove can you rebase?


Requesting a EntityAI

Hi so I notice that there's an NMS class EntityAIBreakDoor but no SpongeAPI counterpart....is this something that is going to be available? reason I ask is part of what I want to do is utilize the AttackLivingAITask and when say a Zombie finds a wall blocking them from getting to the Player inside...they're able to break the door down...or blocks down...or whatever is configured....can this be done?

We will wait for zidane to implement pathfinder, then you can write one AI on your own.

@Zidane Have you already got work in progress for exposing the path finder, or do you think that is low hanging fruit someone else can pick up on?

@ryantheleach @liach Pathfinder or not the Vanilla AI task could still be exposed.

Hmmmm what does that mean?

Zidane said on irc that I may just try exposing the path finder in the api. For now, @Cleardragonf you can use forge mods to access mcp to modify ais.

awesome please let me know once it's exposed? 🗡

@Cleardragonf You can take a look at #1758 to see if it fulfills your need.


Import of OFFCHAIN_ATTESTATION_VERSION and Offchain seems not to be working atm

Can be tested by trying
import { OFFCHAIN_ATTESTATION_VERSION, Offchain  } from "@ethereum-attestation-service/eas-sdk"

as recommended here:
https://github.com/ethereum-attestation-service/eas-sdk#verify-an-offchain-attestation

@slavik0329: once this is fixed, I can further improve https://deno.land/x/ethereum_attestation_service
If you want the deno module in your org, let me know. I can transfer it if you wish.
Btw. Deno is cool. You might give it a chance.

https://github.com/ethereum-attestation-service/eas-sdk#verify-an-offchain-attestation

The README.md was updated here: 8177f39dd1b38814954242813975ab2487b58cdd. Please use OffChainAttestationVersion instead.
What issue are you having with importing Offchain?

https://github.com/ethereum-attestation-service/eas-sdk#verify-an-offchain-attestation

The README.md was updated here: 8177f39. Please use OffChainAttestationVersion instead.

Thank You. Will try it.

What issue are you having with importing Offchain?
... does not export ... called Offchain. Will look into it later again. Maybe due to strict typescript checks...

@lbeder: have you also planned to introduce:
Interchain Attestations
This would be amazing imo - especially in times when the numbers of layer 2s grow like weed. :)

@lbeder: have you also planned to introduce:
Interchain Attestations
This would be amazing imo - especially in times when the numbers of layer 2s grow like weed. :)

Yeah. The EAS could facilitate reliable cross chain communications... This would boost many cool projects like Interchain Investment DAOs, Freedom Enterprises etc.

Attestations could be like:
Contract on Chain X has the following state at block.timestamp ...

OffChainAttestationVersion

https://github.com/ethereum-attestation-service/eas-sdk#verify-an-offchain-attestation

The README.md was updated here: 8177f39. Please use OffChainAttestationVersion instead.

@lbeder The commit you have mentioned is about something else imo.
I confirm the error persists with "OffChainAttestationVersion" atm. Error message: The requested module 'npm:@ethereum-attestation-service/eas-sdk' does not provide an export named 'OffChainAttestationVersion'

What issue are you having with importing Offchain?
same with "Offchain":
The requested module 'npm:@ethereum-attestation-service/eas-sdk' does not provide an export named 'Offchain'

Everything else in the sdk seems to work perfectly fine with deno ... :+1:

OffChainAttestationVersion

https://github.com/ethereum-attestation-service/eas-sdk#verify-an-offchain-attestation

The README.md was updated here: 8177f39. Please use OffChainAttestationVersion instead.

@lbeder The commit you have mentioned is about something else imo. I confirm the error persists with "OffChainAttestationVersion" atm. Error message: The requested module 'npm:@ethereum-attestation-service/eas-sdk' does not provide an export named 'OffChainAttestationVersion'

What issue are you having with importing Offchain?
same with "Offchain":
The requested module 'npm:@ethereum-attestation-service/eas-sdk' does not provide an export named 'Offchain'

Everything else in the sdk seems to work perfectly fine with deno ... 👍

I've published a new version that fixes the lowercase typo (it should be OffchainAttestationVersion instead of OffChainAttestationVersion). Please check it out.
I'm not familiar with the Deno module, but I'd suggest to continue the discussion about in our telegram group.

thanks - currently the only error which still exists imo is:

Offchain

thanks - currently the only error which still exists imo is:

while https://github.com/monique-baumann/deno-eas/blob/main/src/deno-eas.ts#L1
We might also look into it on Wednesday. If we find a solution we'll share it.
Thank you for the EAS ...

This doesn't seem to be an issue with the SDK itself, but rather how it's being (re)built by an external framework


Editor 6 OS X — ALT + Delete not deleting whole words anymore

Gitbook Editor used to delete a whole word when using ALT+Delete.Now it's doing nothing.
Only CMD+Delete does that
About 99% of the apps out there incl all browsers are going with this:
ALT+Delete: Delete whole word
CMD+Delete: Delete whole line
I suggest sticking to those standards.
Please add it to next hotfix :)

Also not working in raw mode :)

It'll be fixed in today release: ALT+Delete will now also delete the whole word.
On mac the follow will be equivalent:
Ctrl-H = Backspace
Alt-Backspace = Cmd-Backspace
Ctrl-D = Delete
Ctrl-Alt-Backspace = Cmd-Delete
Alt-Delete = Cmd-Delete
Alt-D = Cmd-Delete

Fixed in 6.0.3


[Bug] Have .test.env properly reflect needed env for feedback

Types of changes
What types of changes does your code introduce?
Put an x in the boxes that apply.

[ ] Bugfix (non-breaking change which fixes an issue).
[ ] New feature (non-breaking change which adds functionality).
[ ] Breaking change (fix or feature that would cause existing functionality not to work as expected).
[ ] Documentation Update (if none of the other choices applies).

Proposed changes
Describe your changes here and explain why we should accept this pull request. If it fixes a bug or resolves a feature
request, be sure to link to that issue.
Checklist
Put an x in the boxes that apply.

[ ] I have read and followed the CONTRIBUTING.md
doc.
[ ] Lint and unit tests pass locally with my changes.
[ ] I have added the necessary documentation (if appropriate).

Additional context
Add any other context or screenshots here.

Close in favor of #93


fix for issue 1206

This change is

Reviewed 1 of 1 files at r1.
Review status: all files reviewed at latest revision, all discussions resolved.

Comments from Reviewable

Comments from Reviewable


Ai Bodyguard Unit stance.

Hi All!
we all know that Ai"s starting melee troops units (bodyguards) are usually have idle stance and not reacting to anything, i think changing their stance to Aggressive or Defensive stance would be appropriate since their main job is to defend Lord and not stand idle when enemy swarm comes to kill HIM =D.
its just immersion improving stuff that i think needs to be adressed.

Iirc, the starting units count to the defensive unit groups. If there are spots for the corresponding units in the AIV, the AI will send units to these spots (and they will do their intended thing). Starting units, which have no spot in the AIV will stay and chill on the keep. I think @Krarilotus once madet his observation, can you confirm?
So I see two possible ways to fix this:

fix the aiv? (one could fix this problem by just set a unit spot to the campfire)
fix this ingame: each (melee-) starting unit without a aiv spot needs to be set to aggressive. The aiv spots are actually known, but setting the unit stance I have no idea...

yes, starting troops are acting according to set-up in AIV, (except  Swordsman, Pikeman and few other troops that will not go to pointed defensive positions that is set in AIV, AFAIR) its bugged i believe.
possible solution is to set starting troops to defensive or aggressive stance trough scripting (aggressive is preferable, since they count and definitely look like  lords personal bodyguards., they should React more aggressively to any potential threat that comes near lord. :)

So I guess fixing https://github.com/Sh0wdown/UnofficialCrusaderPatch/issues/318 might also fix this issue. Just as a cross reference for the future...

I think defensive stance would be better than aggrressive, so they cant be drawn away from the lord easier. Couple this with #642 and i think its much more effective


Dockerfile builder

Updates #57
Updates #178
Very early experimental pass at a builder for Docker images based on a Dockerfile in the user repo.

[x] Build the image
[x] Push to ghcr.io
[ ] Generate & sign provenance
[ ] Save to tlog
[ ] Upload provenance to registry
[ ] Some basic docs

Closing this in favor of having an ecosystem builder that uses the BYOB framework


For sending PM's how do I fill in the captcha ID/answer for the parameters?

Hi!
I'm learning how to use the Reddit API as I'm new to these kind of JSON type API's in general, but I was curious how to retrieve the Captcha ID/Answer?
For example, I have this code set up, and left the captcha id/answer with blank strings since I didn't know how to use them:
        try
        {
            reddit.ComposePrivateMessage(Subject_textbox.Text, Body_textbox.Text, To_textbox.Text, "", "");

        }

        catch (RedditException ex)
        {

            Console.WriteLine("exception: {0}", ex.Message);
            MessageBox.Show(ex.Message, "Captcha Required!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;

        }

If anything, how would I request the captcha ID and store its "question" into a variable so the user can look at it in my app and submit an answer to it in another variable?

I'm not an expert, but I think you need to implement ICaptchaSolver. You can find the default implementation here: https://github.com/SirCmpwn/RedditSharp/blob/84e04cea351e10539b14f05b4948f091dcdc90d6/RedditSharp/ConsoleCaptchaSolver.cs
Once you've implemented it, I think you can just set the CaptchaSolver property on your Reddit object.

Could you give me an example of how this would work? That's what I'm stumbled on.

Firstly, you make a class that implements ICaptchaSolver:
public class MyCaptchaSolver : ICaptchaSolver

and you implement its HandleCaptcha method:
public CaptchaResponse HandleCaptcha(Captcha captcha)
{
    //use the captcha object to solve it somehow
    return //some sort of CaptchaResponse
}

and then make a new instance of that and set it to be your Reddit object's CaptchaSolver:
reddit.CaptchaSolver = new MyCaptchaSolver();


OpenCensus Span creation does not support kind keyword used in Distributed Tracing policy

Package Name: azure.core, azure-core-tracing-opencensus
Package Version: 1.14.0, 1.0.0b7
Operating System: Ubuntu 18.04.5 LTS (Bionic Beaver)
Python Version: Python 3.7.10

Describe the bug
DistributedTracingPolicy fails with error:
Unable to start network span: start_span() got an unexpected keyword argument 'kind'
Policy creates a span using keyword kind=:
This is passed onto azure.core.tracing.ext.opencensus_span.OpenCensusSpan , which calls opencensus.trace.tracer.Tracer.start_span with that same kind keyword argument.
However, that last start_span call does not support the kind argument
To Reproduce

set AZURE_TRACING_ENABLED=TRUE  and AZURE_SDK_TRACING_IMPLEMENTATION=OPENCENSUS environment variables
import opencensus
create an azure resource

Expected behavior
Traces to be created and exported for ARM calls

Thanks for opening this issue, we'll investigate as soon as possible.

@helsaawy Thanks for the issue - it'll be fixed in this PR https://github.com/Azure/azure-sdk-for-python/pull/19548


Export Excel files?

Do you have any plans to add an export feature to generate and write Excel files?

Sorry for getting back to you so late.
Right now I don't. The OpenXL standard is very complex.

Thanks for your reply. I've solved it with csv format.


Python 3.9 compability fixes

I've made some changes in order to be able to use the library under Python 3.9.

I try to use the code, but it shows an error of type "410" in Meletimeter.


Analysis can't tell an uninitialized variable may not be initialized

The following code passes luau-analyze, because it thinks that foo is a string, even though foo never gets initialized when ran, and causes an error trying to concatenate with nil
local foo
if false then
    foo = "World!"
end
print("Hello " .. foo)

The equivalent code in TypeScript or Rust's analysis does not pass:

Two notes:

We currently don't track conditions of known value during analysis for the purpose of uninitialized variable detection or other uses. So if false above behaves as if it was if math.random() < 0.5. I'm not sure this is useful?
We have attempted to implement a rigorous detection of possibly-uninitialized values (unlike the current analysis that detects definitely-uninitialized values). Unfortunately, this found no bugs in real-world code based on our corpus, and produced a fair number of false positives associated with complex logic. Thus we ended up not shipping this, as our threshold for new analysis passes is such that the true reports must outweigh false positives significantly to be included.

I'm not sure we should act on this given the above.

The equivalent TypeScript example to the code I was referring in pt2 is this:
let foo, bar;
if (Math.random() < 0.5) {
    foo = "bar";
    bar = true;
}

if (bar) {
    console.log(foo.length);
}

which produces a false positive. This is a simpler example and we had some that have more involved logic in real-world code.


Fix if statement to use equal to operator instead of assignment opera…

…tor.
Fix if statement to use Double equals (==)  instead of Single equal  (=) which would overwrite the value of $_GET['name'] variable.

[x] I have read freeCodeCamp's contribution guidelines.
[x] My pull request has a descriptive title (not a vague title like Update index.md)
[x] My pull request targets the master branch of freeCodeCamp.
[x] None of my changes are plagiarized from another source without proper attribution.
[x] My article does not contain shortened URLs or affiliate links.

If your pull request closes a GitHub issue, replace the XXXXX below with the issue number.
Closes #XXXXX

@dhirajkanchan
Thank you for your contribution


risor: 0.10.0 -> 0.11.0

Diff: https://github.com/risor-io/risor/compare/v0.10.0...v0.11.0
Changelog: https://github.com/risor-io/risor/releases/tag/v0.11.0
Description of changes

Things done

Built on platform(s)

[x] x86_64-linux
[x] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[x] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[x] Tested basic functionality of all binary files (usually in ./result/bin/)
23.11 Release Notes (or backporting 23.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

Result of nixpkgs-review pr 247772 run on x86_64-linux 1

1 package built:

risor


Updates for OSS Policy

Changed Header to Community Plus and removed local CODE_OF_CONDUCT.md

Looks like this work has already been done.


Initial authentication token (used for checkout window) is not saved between IDE sessions

Open an authentication window (e.g. by choosing the VCS | Checkout from Version Control | Azure DevOps Git main menu item).
Log into the Azure DevOps.
Close the IDE.
Start the IDE again and click the same menu item.

Users are reporting (here and here) that earlier the credentials were preserved between IDE run sessions, and now they are definitely erased between them.

Actually, it never worked from the initial checkout window. It was explicitly decide to not save the access tokens (as opposed to the personal access tokens) that are used to retireve the repository list in the initial checkout window. So, this is not a bug but intended behavior (see this code).
Every other authentication session (according to my knowledge) should be properly saved. For now, we have no known cases when the authentication is not saved between IDE sessions.

Hello Everyone ! I have the similary problem.
When I push or when I go to AzureDEVOPS WorkItens the plug-in need the autentication. If i close and reopen Intellij autentication will be replaced.
But if i go on Terminal and run Git Push don't need authentication.
On My e-mail i receive many messages about get personal access token. Unfortunately plug-in request authentication at firs-time push after reopen intellij
This is a same Issue or other ? sorry for my english

@kiaratto, could you please check if the IDE is able to persist passwords (or other secret information)? Check your Settings | Apparance & Behavior | System Settings | Passwords page: what does it say?


'-s' option is processed before prerunmodifier is called

As per Robot Framework User Guide Version 6.0.2, Section 3.5.8 Programmatic modification of test data:

Pre-run modifiers are executed before other configuration affecting the executed test suite and test cases. Most importantly, options related to selecting test cases are processed after modifiers, making it possible to use options like --include also with possible dynamically added tests.

But I see a deviation from the above statement. It looks like that robotframework processes -s option before prerunmodifier, as opposed to the sequence mentioned in the guide.
This is a simple Modifier, just prints the visited suites:
from robot.api import SuiteVisitor
from robot.api import logger

class Issue(SuiteVisitor):

    def start_suite(self, suite):
        logger.warn("Suite={}".format(suite.name))

And this is the test suite structure:
prerunmodifierissue
|-- Issue.py
`-- TC
    |-- A
    |   `-- A1
    |       `-- asuite.robot
    `-- B
        `-- B1
            `-- bsuite.robot

When tests are executed with just one test case selected via -t option, the prerunmodifier is called for both suites - A1 and B1
$ robot --prerunmodifier Issue.py -t TC.B.B1.bsuite.Test_B TC
Suite=TC
Suite=A
Suite=A1
Suite=Asuite
Suite=B
Suite=B1
Suite=Bsuite

However, when executing tests with just one suite selected via -s option, prerunmodifier is called only for that suite.
Which means robot does preprocesses -s option before calling modifier; contrary to what the user guide suggests.
$ robot --prerunmodifier Issue.py -s TC.B.B1.Bsuite TC
Suite=TC
Suite=B
Suite=B1
Suite=Bsuite

Is this the expected behviour?

This seems to be caused by --suite (i.e. -s) affecting which files are parsed. Non-matching files are not parsed at all, so those suites cannot be seen by model my modifiers either. Incidentally this has just been changed (#4688) and behavior with RF 6.1 ought to be different. Could you test that? RF 6.1 rc 1 is out and the final release ia planned for next Monday.

Thanks @pekkaklarck , I tested this with 6.1 rc 1, working as expected. Both the suites are seen by modifier. You can close this one.

Thanks for testing! It also sounds like changing the behavior was a good idea. I guess can consider this issue a duplicate of #4688.