How to add testTargets from local swift package to targets in Xcodegen?

I have a swift package named Lib having a testTarget name LibTests. And I also have iOS target name MyApp which wants to use LibTests as one of its testTargets scheme. If I were using Xcode UI to manipulate xcodeproj directly. I can go to MyApp's test scheme and add LibTests there. But I wonder how can I do the same with Xcodegen.
I have my project.yml defined like this. It doesn't work. LibTests doesn't get included in MyApp test targets.
packages:
  Lib:
    path: Lib

targets:
  MyApp:
    type: application
    platform: iOS
    scheme:
      testTargets:
      - package: Lib
        product: LibTests

Thanks in advance.

Hi, @BeerPoldet.
The format that you write is not supported. Yours wrote format is for Package dependency but not for testTargets.
The correct format for testTargets is in described here, please check it.

@freddi-kit Is there other way I can specify testTargets that's from SwiftPM?.  Doing as below doesn't work either as LibTests isn't target that defined in my project.yml but exported from SwiftPM.
packages:
  Lib:
    path: Lib

targets:
  MyApp:
    type: application
    platform: iOS
    scheme:
      testTargets:
      - LibTests

Do you have suggestion for other workarounds?

I'm checking, please wait for a moment.

can you provide me the detail of Lib's package.swift?

Here you go. I redacted some of the irrelevant bits.
// swift-tools-version:5.3
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
  name: "Lib",
  platforms: [.iOS(.v14)],
  products: [...],
  targets: [
    ...,
    .testTarget(
      name: "LibTests",
      dependencies: []
    )
  ]
)

Thank you

Sorry, I cannot create an Xcode project which referring spm's inside test as test target even not using Xcodegen.
Could you help to give me some information about your project?  Some project tree and scheme pictures are okay.

I created a sample project that demonstrates this issue. here https://github.com/BeerPoldet/MyAppXcodegen
As I referred to the point that I can add MyLibTests to MyApp scheme through Xcode UI. eg.

Thank you! let me check detail

Sorry for late. I'm currently working on it and it requires other library fixing. But please note that operation is ongoing

Great! I appreciate your effort in adding this. I have been invested a bit in learning Xcodeproj the ruby program that xcodegen uses underlying. But I also don't find a way to create TestableReference if I can remember that has BuildableReference to a target which does not define in xcodrproj code.
Sorry for splitting a lot of nonsense stuff. Anyway, thank you. God bless.

What you said makes sence! BuildableReference is one of in problem and we need to fix it.
FYI: https://github.com/tuist/XcodeProj/pull/605

If you want to challenge to add it to xcodegen, your contribution is welcome 😄
But we need to wait for tuist/XcodeProj#605 at least

I have the same issue now. My xcodegen version is the 2.27.0 but I stills havig the issue.

I also have this problem, I have a local SPM package that is included in the main iOS project and I can't figure out how to link the SPM package's tests with the main app, or have them run independently.

Hi! @freddi-kit I just try that structure but it stills trhowing me the same error.
My project.yml is now like this:
name: SampleApp #Replace this for the name of your test App

## options section ##

options:
  createIntermediateGroups: true
  bundleIdPrefix: com.pomelo
  groupSortPosition: top
  generateEmptyDirectories: true

## packages section ##

packages:
  MyLibrary:
    path: ./MyLibrary

## targets section ##

targets:
  SampleApp:
    type: application
    platform: iOS
    deploymentTarget: "12.4"
    sources: [SampleApp]
    scheme:
      build:
        targets:
          SampleApp: all
      testTargets:
      - MyLibrary/MyLibraryTests
    postCompileScripts:
    - script: |
        # check if directory exists then add it to path
        if [ -d ~/.mint/bin ]; then
            echo "Adding ~/.mint/bin to PATH"
            export PATH=~/.mint/bin:$PATH
        else
          echo "~/.mint/bin folder is missing"
        fi

        # check if swiftlint tool can be found.
        if [ $(command -v swiftlint) ]; then
          swiftlint
        else
          echo "Swiftlint tool is missing, try running `sh initial-setup.sh` or run `mint bootstrap --link`"
          exit 1
        fi
      name: Swiftlint
    dependencies:
    - package: MyLibrary

testTargets:
 - package: MyLibrary/MyLibraryTests

Hi, how is it possible to do the same with ,xcodeproject?
if it is an SPM that works: - package: MyLibrary/MyLibraryTests
if it is a projectRefence we should use -project? - project: MyLibrary/MyLibraryTests
but it doesn't work


typings.d.ts declares module:{id:string} conflicting with node

If using node in the same project as the CLI the declaration of declare var module:{id:string}; in src/typings.d.ts causes a type error.

You should use a separate typings file for node, since you don't want to mix node and browser typings.

@hansl. I don't see how to do it...   Developing an Angular2 app w client and server , I have the following file structure
myaoo
|.  client
| src
|__ app
|__
|. typings.d.ts
L_.server
| app.js


error: failed to connect to redis server

I statically compiled the unbound-master by myself. From the -vvvv debug window, I saw that the redis server could not be found.
My redis configuration is below,
cachedb:
    backend: "redis"
    #redis-server-host: <IP_ADDRESS>
    #redis-server-port: 6379
    redis-server-path: "/tmp/redis.sock"
    redis-timeout: 5000
    redis-expire-records: no

./unbound -c /usr/local/sbin/static_unbound/etc/unbound/unbound.conf -dd -vvvv
[1687795308] unbound[5403:0] notice: Start of unbound 1.17.2.
[1687795308] unbound[5403:0] debug: creating udp4 socket <IP_ADDRESS> 5356
[1687795308] unbound[5403:0] debug: creating tcp4 socket <IP_ADDRESS> 5356
[1687795308] unbound[5403:0] debug: creating udp4 socket <IP_ADDRESS> 5356
[1687795308] unbound[5403:0] debug: creating tcp4 socket <IP_ADDRESS> 5356
[1687795308] unbound[5403:0] debug: creating udp4 socket <IP_ADDRESS> 5356
[1687795308] unbound[5403:0] debug: creating tcp4 socket <IP_ADDRESS> 5356
[1687795308] unbound[5403:0] debug: creating udp4 socket <IP_ADDRESS> 5356
[1687795308] unbound[5403:0] debug: creating tcp4 socket <IP_ADDRESS> 5356
[1687795308] unbound[5403:0] warning: unbound is already running as pid 947.
[1687795308] unbound[5403:0] debug: chdir to /usr/local/sbin/static_unbound/etc/unbound
[1687795308] unbound[5403:0] debug: chroot to /usr/local/sbin/static_unbound/etc/unbound
[1687795308] unbound[5403:0] debug: drop user privileges, run as root
[1687795308] unbound[5403:0] debug: switching log to stderr
[1687795308] unbound[5403:0] debug: module config: "subnetcache validator cachedb iterator"
[1687795308] unbound[5403:0] notice: init module 0: subnetcache
[1687795308] unbound[5403:0] debug: send-client-subnet: ::0/0
[1687795308] unbound[5403:0] debug: send-client-subnet: <IP_ADDRESS>/0
[1687795308] unbound[5403:0] debug: subnetcache: option registered (8)
[1687795308] unbound[5403:0] notice: init module 1: validator
[1687795308] unbound[5403:0] debug: validator nsec3cfg keysz 1024 mxiter 150
[1687795308] unbound[5403:0] debug: validator nsec3cfg keysz 2048 mxiter 150
[1687795308] unbound[5403:0] debug: validator nsec3cfg keysz 4096 mxiter 150
[1687795308] unbound[5403:0] notice: init module 2: cachedb
[1687795308] unbound[5403:0] debug: redis_init
[1687795308] unbound[5403:0] error: failed to connect to redis server: No such file or directory
[1687795308] unbound[5403:0] error: failed to connect to redis server: No such file or directory
[1687795308] unbound[5403:0] error: failed to connect to redis server: No such file or directory
[1687795308] unbound[5403:0] error: failed to connect to redis server: No such file or directory

NOT sure, just trying to help here...
you have log lines:
[1687795308] unbound[5403:0] debug: chdir to /usr/local/sbin/static_unbound/etc/unbound
[1687795308] unbound[5403:0] debug: chroot to /usr/local/sbin/static_unbound/etc/unbound

which, according to what I know about chroot, for unbound the root (/) is now "/usr/local/sbin/static_unbound/etc/unbound"
This means, the folder "/usr/local/sbin/static_unbound/etc/unbound/test" needs to be referred to (in an unbound configuration file) as "/test".
since you use redis-server-path: "/tmp/redis.sock", and this path doesn't exist for chrooted unbound, the message
[1687795308] unbound[5403:0] error: failed to connect to redis server: No such file or directory

is thus perfectly normal (due to the usage of chroot).

NOT sure, just trying to help here... you have log lines:
[1687795308] unbound[5403:0] debug: chdir to /usr/local/sbin/static_unbound/etc/unbound
[1687795308] unbound[5403:0] debug: chroot to /usr/local/sbin/static_unbound/etc/unbound

which, according to what I know about chroot, for unbound the root (/) is now "/usr/local/sbin/static_unbound/etc/unbound" This means, the folder "/usr/local/sbin/static_unbound/etc/unbound/test" needs to be referred to (in an unbound configuration file) as "/test".
since you use redis-server-path: "/tmp/redis.sock", and this path doesn't exist for chrooted unbound, the message
[1687795308] unbound[5403:0] error: failed to connect to redis server: No such file or directory

is thus perfectly normal (due to the usage of chroot).

I installed the latest unbound 1.18.0 and got the same error
:/usr/local/sbin# unbound -c /usr/local/etc/unbound/unbound.conf -dd -vvvv
[1695565597] unbound[1814288:0] notice: Start of unbound 1.18.0.
[1695565597] unbound[1814288:0] debug: increased limit(open files) from 1024 to 10264
[1695565597] unbound[1814288:0] debug: creating udp4 socket <IP_ADDRESS> 5353
[1695565597] unbound[1814288:0] debug: creating tcp4 socket <IP_ADDRESS> 5353
[1695565597] unbound[1814288:0] debug: creating udp4 socket <IP_ADDRESS> 5353
[1695565597] unbound[1814288:0] debug: creating tcp4 socket <IP_ADDRESS> 5353
[1695565597] unbound[1814288:0] debug: creating udp4 socket <IP_ADDRESS> 5353
[1695565597] unbound[1814288:0] debug: creating tcp4 socket <IP_ADDRESS> 5353
[1695565597] unbound[1814288:0] debug: creating udp4 socket <IP_ADDRESS> 5353
[1695565597] unbound[1814288:0] debug: creating tcp4 socket <IP_ADDRESS> 5353
[1695565597] unbound[1814288:0] debug: chdir to /usr/local/etc/unbound
[1695565597] unbound[1814288:0] debug: chroot to /usr/local/etc/unbound
[1695565597] unbound[1814288:0] debug: drop user privileges, run as root
[1695565597] unbound[1814288:0] debug: switching log to stderr
[1695565597] unbound[1814288:0] debug: module config: "subnetcache validator cachedb iterator"
[1695565597] unbound[1814288:0] notice: init module 0: subnetcache
[1695565597] unbound[1814288:0] debug: send-client-subnet: ::0/0
[1695565597] unbound[1814288:0] debug: send-client-subnet: <IP_ADDRESS>/0
[1695565597] unbound[1814288:0] debug: subnetcache: option registered (8)
[1695565597] unbound[1814288:0] notice: init module 1: validator
[1695565597] unbound[1814288:0] debug: validator nsec3cfg keysz 1024 mxiter 150
[1695565597] unbound[1814288:0] debug: validator nsec3cfg keysz 2048 mxiter 150
[1695565597] unbound[1814288:0] debug: validator nsec3cfg keysz 4096 mxiter 150
[1695565597] unbound[1814288:0] notice: init module 2: cachedb
[1695565597] unbound[1814288:0] notice: Redis initialization
[1695565597] unbound[1814288:0] error: failed to connect to redis server: No such file or directory
[1695565597] unbound[1814288:0] error: failed to connect to redis server: No such file or directory
[1695565597] unbound[1814288:0] error: failed to connect to redis server: No such file or directory
[1695565597] unbound[1814288:0] error: failed to connect to redis server: No such file or directory

in order for unbound to see the redis.sock file, it needs to be below /usr/local/sbin/static_unbound/etc/unbound
e.g. /usr/local/sbin/static_unbound/etc/unbound/redis.sock. The chrooted config than needs to be redis-server-path: "/redis.sock"

in order for unbound to see the redis.sock file, it needs to be below /usr/local/sbin/static_unbound/etc/unbound e.g. /usr/local/sbin/static_unbound/etc/unbound/redis.sock. The chrooted config than needs to be redis-server-path: "/redis.sock"

I'll give it a try, thank you

in order for unbound to see the redis.sock file, it needs to be below /usr/local/sbin/static_unbound/etc/unbound e.g. /usr/local/sbin/static_unbound/etc/unbound/redis.sock. The chrooted config than needs to be redis-server-path: "/redis.sock"

Same error report

permissions on the file or / and folder?

permissions on the file or / and folder?

777

Same issue here, symlinking returned "too many levels of symbolic links", so I disabled the chroot feature.
It successfully connected, but I rollbacked this config to keep unbound sandboxed. (I failed to write a systemd service file which runs unbound as non-root user)
Bind-mounting the socket file before the chroot will be needed.


[release/1.7] remotes/docker: Add MountedFrom and Exists push status

Backport https://github.com/containerd/containerd/pull/8330
This makes it possible to check whether content didn't actually need to be pushed to the remote registry and was cross-repo mounted or already existed.
(cherry picked from commit dfc7590d5a49d0cbd3151e5a53bf5c677acb0477)

/ok-to-test


Dark mode for mitmweb

Love the web ui, but the all white / really bright interface is not the best on the eyes in the evenings.
See also: https://postwoman.io

Thanks for the suggestion! I'm happy to merge a PR that adds dark-mode CSS depending on system settings, but it's nothing I see one of the core team spend time on in at the moment.

Just my 2 cents for anyone that wants to tackle this: I've made good experiences using CSS variables and @media (prefers-color-scheme: dark). Optionally you can force an overwrite of the media query using a class added via JavaScript (and maybe persisted in localStorage for extra swag).
:root {
  --text: #000;
  --background-default: #fff;
}

@media (prefers-color-scheme: dark) {
  :root {
    --text: #fff;
    --background-default: #222;
  }
}

body {
  color: var(--text);
  background: var(--background-default);
}

Trying to figure out how to toggle the theme. I'm missing something on the server-side, (See: https://github.com/mitmproxy/mitmproxy/issues/3925)

Trying to figure out how to toggle the theme. I'm missing something on the server-side, (See: #3925)

I personally don't think the server needs to be involved at all. Toggling is something that happens in the browser. If persistence is needed it can be done via localStorage. Or is there a use-case that requires server interaction that I'm missing?

How can I execute a function based on the SETTINGS_UPDATE action?

The localStorage part is fine, I can easily read/write values there. But I don't know where in js to do that.


Add building in every commit

git clone git@github.com:tmrlvi/kaspa-miner.git

fatal: Could not read from remote repository.

How can I fix this? Macbook Pro Terminal.

git clone git@github.com:tmrlvi/kaspa-miner.git

Cloning into 'kaspa-miner'...
<EMAIL_ADDRESS>Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
// How can I fix this on Macbook Pro Terminal?


⚠ Bofrost.fr has degraded performance

In 0a89205, Bofrost.fr (https://www.bofrost.fr) experienced degraded performance:

HTTP code: 200
Response time: 2499 ms

Resolved: Bofrost.fr performance has improved in baf7aca.


fix to 'header_separator' requiring an extra space

The HTTP spec does not require this extra space and, therefore, it causes problems even with properly typed code - when on web export.

Mmmhhh.. I think we will need to trim the values, either in C++ or JS

@quendera Is this something you can implement?
Or do you want to do it @Faless?

Superseded by #46728


Packager to move downloaded plugin from Unavailable to deactivated state

Packager plugin should change the state of the downloaded plugin from "Unavailable" to "deactivated" on successful download of the RDM package

Blackduck scan failure details
Summary: 0 violations, 0 files pending approval, 1 file pending identification.

Protex Server Path: /home/blackduck/github/ThunderInterfaces/94/rdkcentral/ThunderInterfaces

Commit: c853531c8be1d14f942ec239918d5b5e57e9f24d

Report detail: gist

Blackduck scan failure details
Summary: 0 violations, 0 files pending approval, 1 file pending identification.

Protex Server Path: /home/blackduck/github/ThunderInterfaces/94/rdkcentral/ThunderInterfaces

Commit: c853531c8be1d14f942ec239918d5b5e57e9f24d

Report detail: gist

Blackduck scan failure details
Summary: 0 violations, 0 files pending approval, 1 file pending identification.

Protex Server Path: /home/blackduck/github/ThunderInterfaces/94/rdkcentral/ThunderInterfaces

Commit: c853531c8be1d14f942ec239918d5b5e57e9f24d

Report detail: gist

Blackduck scan failure details
Summary: 0 violations, 0 files pending approval, 1 file pending identification.

Protex Server Path: /home/blackduck/github/ThunderInterfaces/94/rdkcentral/ThunderInterfaces

Commit: c853531c8be1d14f942ec239918d5b5e57e9f24d

Report detail: gist

Closed due to inactivity, please restore if still needed.


LLM.c in google colab

For those poor in GPUs, Google Colab can be an easy alternative to run and experiment with llm.c. Below is a sample notebook that allowed me to train the fp32 code. Only make sure to select the GPU runtime.
https://colab.research.google.com/drive/1pFCqlGkfJiIr1HLTgaMh4i5OtiY7P96P?usp=sharing

Cool thanks!


the double quotation of special marks is invalid with lubuntu 18

I usually use double quotation of special marks to jump to position where last exited current buffer.
However, the double quotation of special marks is invalid with lubuntu 18.
After I reopen the vim with same file, use marks command to list all marks,
the double quotation always show line one as the last line .
vim --version
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Apr 10 2018 21:31:58)
Included patches: 1-1453
lsb_release -d
Description:    Ubuntu 18.04.1 LTS

sorry, I am not sure I get what you are saying. Can you please show  a minimal example of what you do, what you see and what you expect? Thanks

Hi @chrisbra ,
Thank you for your attention.
The special marks like double quotation can help us remember the last line number when I close the vim.
Thus, if this function was work well, I could use '" or `" to jump to line of when I close the vim.
This function can not work in the lubutnu18, even I update the system.

yes I understood that. Please provide a minimal example that shows the issue.

that is not a minimal reproducing example and I cannot reproduce this. Please come up with a reproducible example starting from vim --clean. It might have also been fixed in between. Please try with the latest Vim version, before opening issues.

patch 8.1.0034 looks related.

closing, assuming patch 8.1.0034 fixed it. If this is not fixed, please open a new issue with clear steps to reproduce. Thanks.


Train on responses only does not seem to work for Mistral format

Trying to finetune Mistral Small
from unsloth.chat_templates import train_on_responses_only
trainer = train_on_responses_only(
    trainer,
    instruction_part = "[INST]",
    response_part = "[/INST]",
)

however, I see this warning
For example, are you sure you used `train_on_responses_only` correctly?
Or did you mask our tokens incorrectly? Maybe this is intended?

And sanity check fails
space = tokenizer(" ", add_special_tokens = False).input_ids[0]
tokenizer.decode([space if x == -100 else x for x in trainer.train_dataset[0]["labels"]])

returns an empty string

@LostRuins Apologies I think I might have solved the issue! It seems like edge case of just a singular token [INST] / [/INST] as ids 3 and 4 did not get tokenized correctly, and so it tokenized it as simply [0]. I accounted for this edge case now!! Apologies on the slowness!
from unsloth.chat_templates import train_on_responses_only
trainer = train_on_responses_only(
    trainer,
    instruction_part = "[INST]",
    response_part = "[/INST]",
)

tokenizes:

to

For local machines, please update Unsloth-Zoo to the nightly branch via pip uninstall unsloth-zoo -y && pip install --upgrade --no-cache-dir git+https://github.com/unslothai/unsloth-zoo.git@nightly
@Erland366 You can close the other issue since I just fixed it!

Hi @danielhanchen , thanks for helping, after trying the nightly branch Mistral format seems to be fine, however, I think there are still boundary masking issues, especially visible when using Alpaca format.
Here's an example that can hopefully help reproduce it. Also tested on Mistral Small.
print(dataset['text'][0])
This is my fun little AI chat demo

### Instruction:
What color is apple</s>

### Response:
Apple is red</s>

### Instruction:
What about pear?</s>

### Response:
Pear is green</s>

Now testing the masking
space = tokenizer(" ", add_special_tokens = False).input_ids[0]
from unsloth.chat_templates import train_on_responses_only
trainer = train_on_responses_only(
    trainer,
    instruction_part = "### Instruction:\n",
    response_part = "### Response:\n",
)
tokenizer.decode([space if x == -100 else x for x in trainer.train_dataset[0]["labels"]])

                                                                              \nApple is red</s>\n\n###                                                                                \nPear is green</s>

As you can see, the most glaring issue is the presence of the leaked ### token, as well as the unmasked newline before the response. Please try it and see if you're able to reproduce this, I'd be happy to assist in testing.

I have a suspicion that might help debug this:
There are multiple tokenizations for the sequence ### in Mistral Small. In particular, a standalone ### tokenizes to token ID 28100, howevever adding a newline \n### tokenizes to token ID 1542, a completely different token.
This means that ### Instruction will use the ID 28100 version, while within the actual prompt you are likely to encounter the ID 1542 version after a newline, unless its adjacent to another character e.g. </s>### in which case it will still be ID 28100.
Hopefully this can be resolved automatically. If not, may I suggest you allow us to specify multiple instruction_part so that the tuners can add all the "variants" necessary for proper masking after token merges.
Btw if you wanna chat to clarify, I am @concedo in the unsloth discord, that might be faster.

it would be awesome, if we can just pass the "input_ids", "attention_masks" and "label_ids" directly in the dataset, will solve all these issues, axolotl has this feature.


Generic block in DownloadOutcome

Describe the feature
Make generic over block type, so that generic can be passed to SealedBlockWithSenders.
https://github.com/paradigmxyz/reth/blob/c7c84f2d3fc59cbec2288f6a097dc029c9fb0375/crates/engine/tree/src/download.rs#L39-L51
Additional context
No response

🙋🏽♂

May I be assigned to this?


connect_*: allow callbacks of non-static lifetime

As far as I can tell the 'static lifetime for the function arguments of all connect_* functions (e.g. DrawingArea::connect_draw(…)) is not really needed. Having a non-static lifetime would make it possible to use closures or methods on non-static objects as callbacks.
For reference: http://stackoverflow.com/questions/35651279/error-closure-may-outlive-the-current-function-but-it-will-not-outlive-it

This has been discussed in #263, in particular consider the basic example
let button = gtk::Button::new();
button.connect_clicked(|_| { /* this closure outlives any 'a */ });
mem::forget(button);

If you come up with a specific way to solve this please share it.


QLPlugin Metadata File

Should QuickLook.Plugin.Metadata.config be included since this is required for a plugin to install?

No, it shouldn't. The real file will be generated by update-version.ps1 at
compile time. This script is invoked from Quickly ok.Common build events.
On Wed, 5 Sep 2018, 06:09 jeremyhart<EMAIL_ADDRESS>wrote:

Should QuickLook.Plugin.Metadata.config be included since this is required
for a plugin to install?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/QL-Win/QuickLook.Plugin.HelloWorld/issues/1, or mute
the thread
https://github.com/notifications/unsubscribe-auth/ABnBJ5oHOE9LTAb0NJqkCpLCxFxGPMNCks5uX0B6gaJpZM4WaG5f
.

Typo: ... by QuickLook.Common ...
On Wed, 5 Sep 2018, 09:52 Paddy Xu<EMAIL_ADDRESS>wrote:

No, it shouldn't. The real file will be generated by update-version.ps1 at
compile time. This script is invoked from Quickly ok.Common build events.
On Wed, 5 Sep 2018, 06:09 jeremyhart<EMAIL_ADDRESS>wrote:

Should QuickLook.Plugin.Metadata.config be included since this is
required for a plugin to install?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/QL-Win/QuickLook.Plugin.HelloWorld/issues/1, or mute
the thread
https://github.com/notifications/unsubscribe-auth/ABnBJ5oHOE9LTAb0NJqkCpLCxFxGPMNCks5uX0B6gaJpZM4WaG5f
.


Interest in using Pandas TA as a TA Library?

Hello @tudorelu,
I came across your Github account through another user and saw that you are creating an Algo Trading System and posting via YouTube. Awesome!
I noticed that you are using pyti for TA but it seems to have gone stale nearly two years ago. I was wondering if you would be interested in trying and incorporating Pandas TA into your project? It is built to be compatible with Pandas as an DataFrame extension, correlated with TA Lib (for common indicators), other popular indicators like TTM Squeeze and Trend, and much more! Also check out some Examples for implementation and features.
Thanks for your time,
Kevin Johnson

Hi @twopirllc, this sounds interesting I'll have a look!

@tudorelu,
If you have any questions, let me know.
KJ

Definitely - just had a thought, wanted to see your take on it... you know with real time trading sometimes you want to compute an indicator value only for the last Candle for example - because you already computed it for the previous ones. How many indicators in your library would have that capability, or should most of them be rewritten to allow for that? (I imagine a lot of devs would like to have this ability in a TA library..)

@tudorelu,
Excellent question.

I imagine a lot of devs would like to have this ability in a TA library..

No doubt!
Yet, in my experience of both creating indicators and reverse engineering them from TA Lib, Trading View, et al, it is not possible for many indicators.
In fact it was a discussion on my repo as well. It's the first Pinned Issue: How to utilize this Framework for live ticks #87. Unfortunately, I haven't had much chance to personally address this issue more. Hopefully soon! 🤞
Brokers, Charting Software, and Web Platforms
Traditional Broker Platforms like Trade Station, Think or Swim, Interactive Brokers as well as  specialty charting platforms like MultiCharts, Sierra Charts et al are a mix of C, C++, C#, and Java typically. I have not found anything online yet on how any of them do it, but it's unlikely a concern considering their choice of language.
For the web trading platform Trading View, this is how they handle the Execution of Pine Script
More specifically:

Requirements or Limitations
I suppose it really depends on your requirements or limitations.
If the requirement is truly HFT, microseconds trading with a dedicated machine as close to the exchange as possible, then Python is obviously not the choice. However if it is tick data, then you should be fine in many cases with performant hardware. Lastly for 1 minute and higher time frames, I wouldn't be concerned.
For instance, I am running a 2013 Mac Book Pro with 4G RAM, 4 Cores. When using Pandas TA, I can process over a hundred different indicators in about 4secs with ohlcv data containing 700 rows. However in reality, one would have a small sample of indicators to use and it takes my machine microseconds.
For example, when I used this subset of indicators (max period of 200) with 700 bars I got around 50 ms (or 0.05 secs) to process them. When I take 210 bars, 10 extra bars for buffer, I get around 30 ms (or 0.03 secs). Even with my hardware limitation, TA speed bottlenecks are trivial.

But if you have a small portfolio to live track and calculate as a scanner list, of course it may take marginally longer to process them in a blocking manner.

How many indicators in your library would have that capability, or should most of them be rewritten to allow for that?

So in my opinion, I don't think it is necessary to rewrite the few that may benefit. Even with older hardware, TA is pretty fast.
Apologies if this was overkill...
KJ

Definitely not an overkill, really thanks for the detailed explanation. It
put me at ease with respect to the speed of calculation / perceived
bottleneck as I haven't tested their speed myself.
I imagine that a well thought out algorithm can perform without issues in
the current scenario, with a small number of pairs - however you're right,
if you want to compute hundreds of indicators on dozens of pairs every
minute - it will take longer than a minute :P so rewriting some of them in
a recursive fashion to compute 'in real time' - at least for the indicators
that it is possible - might be a use case for python, slightly different
than the HFT algo which I totally agree that python wouldn't be the
language for.
Again thanks for this answer and your effort of converting TA-lib to python

I am almost certainly using this library for pyjuque as I wanted to
change pyti for a long time - I might even give it a try to update some
indicators to real-time!

On Mon, Sep 7, 2020 at 9:19 AM Kevin Johnson<EMAIL_ADDRESS>wrote:

@tudorelu https://github.com/tudorelu,
Excellent question.
I imagine a lot of devs would like to have this ability in a TA library..
No doubt!
Yet, in my experience of both creating indicators and reverse engineering
them from TA Lib
https://sourceforge.net/p/ta-lib/code/HEAD/tree/trunk/ta-lib/c/src/ta_func/,
Trading View, et al, it is not possible for many indicators.
In fact it was a discussion on my repo as well. It's the first Pinned
Issue: How to utilize this Framework for live ticks #87
https://github.com/twopirllc/pandas-ta/issues/87. Unfortunately, I
haven't had much chance to personally address this issue more. Hopefully
soon! 🤞
Brokers, Charting Software, and Web Platforms
Traditional Broker Platforms like Trade Station, Think or Swim,
Interactive Brokers as well as specialty charting platforms like
MultiCharts, Sierra Charts et al are a mix of C, C++, C#, and Java
typically. I have not found anything online yet on how any of them do it,
but it's unlikely a concern considering their choice of language.
For the web trading platform Trading View, this is how they handle the Execution
of Pine Script
https://www.tradingview.com/pine-script-docs/en/v4/Quickstart_guide.html#execution-model-of-pine-scripts
More specifically:
[image: Screen Shot 2020-09-06 at 9 05 07 AM]
https://user-images.githubusercontent.com/18198392/92333600-b0502300-f03b-11ea-9884-1613392b8a12.png
Requirements or Limitations
I suppose it really depends on your requirements or limitations.
If the requirement is truly HFT, microseconds trading with a dedicated
machine as close to the exchange as possible, then Python is obviously not
the choice. However if it is tick data, then you should be fine in many
cases with performant hardware. Lastly for 1 minute and higher time frames,
I wouldn't be concerned.
For instance, I am running a 2013 Mac Book Pro with 4G RAM, 4 Cores. When
using Pandas TA, I can process over a hundred different indicators in
about 4secs with ohlcv data containing 700 rows. However in reality, one
would have a small sample of indicators to use and it takes my machine
microseconds.
For example, when I used this subset of indicators (max period of 200)
with 700 bars I got around 50 ms (or 0.05 secs) to process them. When I
take 210 bars, 10 extra bars for buffer, I get around 30 ms (or 0.03 secs).
Even with my hardware limitation, TA speed bottlenecks are trivial.
[image: Screen Shot 2020-09-06 at 9 24 35 AM]
https://user-images.githubusercontent.com/18198392/92336172-9ff77280-f052-11ea-9048-c39ccce67bac.png
But if you have a small portfolio to live track and calculate as a scanner
list, of course it may take marginally longer to process them in a blocking
manner.
How many indicators in your library would have that capability, or should
most of them be rewritten to allow for that?
So in my opinion, I don't think it is necessary to rewrite the few that
may benefit. Even with older hardware, TA is pretty fast.
Apologies if this was overkill...
KJ
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/tudorelu/pyjuque/issues/5#issuecomment-687930786, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/ACNIYPGYJUS2T2KO2J75PRDSEQKH3ANCNFSM4QTJDQLQ
.

@tudorelu,

Definitely not an overkill, really thanks for the detailed explanation. It
put me at ease with respect to the speed of calculation / perceived
bottleneck as I haven't tested their speed myself.

Cool.

So rewriting some of them in a recursive fashion to compute 'in real time' - at least for the indicators that it is possible - might be a use case for python

Yeah.

I imagine that a well thought out algorithm can perform without issues in
the current scenario, with a small number of pairs - however you're right,
if you want to compute hundreds of indicators on dozens of pairs every
minute

Right. I am also building out a Watchlist Class that manages a group of tickers and fetches data from AlphaVantage (currently), and processes TA assigned to it. It's a work in progress with the goal to add more data sources, brokers, and an event loop for live or simulation.

Again thanks for this answer and your effort of converting TA-lib to python

I am almost certainly using this library for pyjuque as I wanted to
change pyti for a long time - I might even give it a try to update some
indicators to real-time!

Thanks! Yeah, TA Lib also does not easily install some systems. So I made Pandas TA to have the same level of accuracy as TA Lib, ease of use, and compatibility with the Python Data Science / ML / FinTech ecosystem. I have other cool features in mind to add. I just need to make time to program them. Looking forward to what you produce.
Thanks,
KJ

hi all nice guy!
do you know this project?
https://github.com/freqtrade/freqtrade
Maybe you can take some ispiration from.

another interesting source is 👍
https://towardsdatascience.com/how-to-create-a-fully-automated-ai-based-trading-system-with-python-708503c1a907
https://www.freqtrade.io/en/latest/strategy-customization/
https://github.com/ccxt/ccxt
https://www.shrimpy.io/demo

import ccxt
from datetime import datetime
import plotly.graph_objects as go
collect the candlestick data from Binance
binance = ccxt.binance()
trading_pair = 'LTC/BTC'
candles = binance.fetch_ohlcv(trading_pair, '1h')
dates = []
open_data = []
high_data = []
low_data = []
close_data = []
format the data to match the charting library
for candle in candles:
dates.append(datetime.fromtimestamp(candle[0] / 1000.0).strftime('%Y-%m-%d %H:%M:%S.%f'))
open_data.append(candle[1])
high_data.append(candle[2])
low_data.append(candle[3])
close_data.append(candle[4])
plot the candlesticks
fig = go.Figure(data=[go.Candlestick(x=dates,
open=open_data, high=high_data,
low=low_data, close=close_data)])
fig.show()

https://medium.com/coinmonks/python-scripts-for-ccxt-crypto-candlestick-ohlcv-charting-data-83926fa16a13

#this is for using dash for preview
import ccxt
from datetime import datetime
import plotly.graph_objects as go
import dash
import dash_core_components as dcc
import dash_html_components as html
collect the candlestick data from Binance
binance = ccxt.binance()
trading_pair = 'BTC/USDT'
candles = binance.fetch_ohlcv(trading_pair, '1m')
dates = []
open_data = []
high_data = []
low_data = []
close_data = []
format the data to match the charting library
for candle in candles:
dates.append(datetime.fromtimestamp(candle[0] / 1000.0).strftime('%Y-%m-%d %H:%M:%S.%f'))
open_data.append(candle[1])
high_data.append(candle[2])
low_data.append(candle[3])
close_data.append(candle[4])
plot the candlesticks
fig = go.Figure(data=[go.Candlestick(x=dates,
open=open_data, high=high_data,
low=low_data, close=close_data)])
app = dash.Dash()
app.layout = html.Div([
dcc.Graph(figure=fig),
dcc.Interval(
id='interval-component',
interval=1*1000, # in milliseconds
n_intervals=0
)
])
app.run_server(debug=True, use_reloader=True)
fig.show()

`import ccxt
from datetime import datetime
import plotly.graph_objects as go
import dash
import dash_core_components as dcc
import dash_html_components as html
collect the candlestick data from Binance
binance = ccxt.binance()
trading_pair = 'BTC/USDT'
candles = binance.fetch_ohlcv(trading_pair, '1m')
dates = []
open_data = []
high_data = []
low_data = []
close_data = []
format the data to match the charting library
for candle in candles:
dates.append(datetime.fromtimestamp(candle[0] / 1000.0).strftime('%Y-%m-%d %H:%M:%S.%f'))
open_data.append(candle[1])
high_data.append(candle[2])
low_data.append(candle[3])
close_data.append(candle[4])
plot the candlesticks
fig = go.Figure(data=[go.Candlestick(x=dates,
open=open_data, high=high_data,
low=low_data, close=close_data)])
app = dash.Dash()
app.layout = html.Div([
dcc.Graph(figure=fig),
dcc.Interval(
id='interval-component',
interval=1*1000, # in milliseconds
n_intervals=0
)
])
app.run_server(debug=True, use_reloader=True)
fig.show()
`


Adds Ternary Operator to Make Example Concise Issue #657

Created fix for #657 to make the code more concise based using @alexkrolick suggestion. I am still getting used to Github, so I hope providing this pull request does not overstep @kaycebasques oppotunity to resolve this issue.

I think it's a little ugly too but it's the way Prettier formats it.
https://github.com/reactjs/reactjs.org/blob/master/CONTRIBUTING.md#style

Darn, should have made that a const too

I reverted this. The use of if was intentional.
This is a guide for beginners. Beginners are confused by ternaries. Especially if they're introduced before proper if statements.
If you look at the context, right after the example there was a sentence:

While declaring a variable and using an if statement is a fine way to conditionally render a component, sometimes you might want to use a shorter syntax.

It lost its meaning after this change. Please always consider examples together with surrounding code.
There was also a CodePen for this example. The update wasn't synced to it so it was confusing to see them diverge.
Finally, we explain ternaries later in this document: https://reactjs.org/docs/conditional-rendering.html#inline-if-else-with-conditional-operator. So it's confusing we used one before we explained it, and also that we repeat it two times.

:( my bad, should have looked beyond the diff.

No problem, it can be hard to track all those things! Just explaining the reasoning so you have more context in the future :-) Don't hold off merging stuff in the future because of this.


Added Hangfire

Hey, we already have it in Queue category

Great then! It was strange to me that you don't have it.


[SPARK-10389][SQL][1.5] support order by non-attribute grouping expression on Aggregate

backport https://github.com/apache/spark/pull/8548 to 1.5

cc @marmbrus

Merged build triggered.

Merged build started.

Test build #43672 has started for   PR 9102 at commit ab2341a.

Test build #43672 has finished for   PR 9102 at commit ab2341a.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/43672/
Test PASSed.

LGTM


Languages: Add French

This is in progress, will be ready soon.

I'll be writing up a german translation soon :).

Completed, time to squash and merge


installed on python 3.4, but fails to run

If installed/run on python 3.4, it fails to work:
problem in noise.connection - ImportError: No module named 'typing'

(p) nmac,ttys022,~/github/noiseprotocol,549$python --version
Python 3.4.10

Either prevent installation on python 3.4, or add typing as a required dependency, as it appears that installing the pip module typing make things work.

https://packaging.python.org/guides/distributing-packages-using-setuptools/#python-requires
pip in version <9.0.0 will not prevent the installation of the package, if the python version does not meet requirements - maybe that was the case? I guess that you don't have that environment anymore (it's been a while...)

Went ahead and checked it myself:
 docker run -it python:3.4.10 /bin/sh
# python3 --version
Python 3.4.10
# pip --version
pip 19.0.3 from /usr/local/lib/python3.4/site-packages/pip (python 3.4)
# pip install noiseprotocol
DEPRECATION: Python 3.4 support has been deprecated. pip 19.1 will be the last one supporting it. Please upgrade your Python as Python 3.4 won't be maintained after March 2019 (cf PEP 429).
Collecting noiseprotocol
  Could not find a version that satisfies the requirement noiseprotocol (from versions: )
No matching distribution found for noiseprotocol
You are using pip version 19.0.3, however version 19.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

Bit more detailed:
Collecting noiseprotocol
  1 location(s) to search for versions of noiseprotocol:
  * https://pypi.org/simple/noiseprotocol/
  Getting page https://pypi.org/simple/noiseprotocol/
  Looking up "https://pypi.org/simple/noiseprotocol/" in the cache
  Request header has "max_age" as 0, cache bypassed
  Starting new HTTPS connection (1): pypi.org:443
  https://pypi.org:443 "GET /simple/noiseprotocol/ HTTP/1.1" 304 0
  Analyzing links from page https://pypi.org/simple/noiseprotocol/
    The package https://files.pythonhosted.org/packages/1f/e4/70bf5715e747d1d89f726532a82e2cfb9219fdc24768b400e390fbca1476/noiseprotocol-0.1.1.tar.gz#sha256=e9ba51a81ce3957ba10e76a1ce7558b560d12de4ae6970ee21eb739693d06dcd (from https://pypi.org/simple/noiseprotocol/) (requires-python:~=3.6) is incompatible with the python version in use. Acceptable python versions are: ~=3.6
    The package https://files.pythonhosted.org/packages/49/17/ef16239d996d0276112ac5aacb79befb460d9f6e37fba6b569ce59cb90e5/noiseprotocol-0.2.0.tar.gz#sha256=116b767dc129e560d8c45a49cf0cef809653a9d7daf840ef1a9f6a8f02e9d7bc (from https://pypi.org/simple/noiseprotocol/) (requires-python:~=3.5,~=3.6) is incompatible with the python version in use. Acceptable python versions are: ~=3.5,~=3.6
    The package https://files.pythonhosted.org/packages/fe/b3/d06d057cd8f14e4cb5f306cc8d7a997d9f4fd682d80146b98feb4774c3a9/noiseprotocol-0.2.1.tar.gz#sha256=8b55ec43e5f9ff678f410f6515b525c5e5128cdc138b198fb7ab47a3ce9ac654 (from https://pypi.org/simple/noiseprotocol/) (requires-python:~=3.5,~=3.6) is incompatible with the python version in use. Acceptable python versions are: ~=3.5,~=3.6
    The package https://files.pythonhosted.org/packages/07/15/32642efe23cabf3d72eaf57c9c0cba6d3f02e65f256cea8556f30aad55df/noiseprotocol-0.2.2-py3-none-any.whl#sha256=ac357cc12f1af8f5fe904e64caa7e9931850b61bfe72576f693c96bfc8eaa936 (from https://pypi.org/simple/noiseprotocol/) (requires-python:~=3.5) is incompatible with the python version in use. Acceptable python versions are: ~=3.5
    The package https://files.pythonhosted.org/packages/eb/03/dc3b25eaff29f01b2cedca9463c51d8d649f50281c482ba0fec363f90583/noiseprotocol-0.2.2.tar.gz#sha256=c4c2924640916d70f7337cee221d90d7421c0be2a68b78e936e22009d19017fb (from https://pypi.org/simple/noiseprotocol/) (requires-python:~=3.5) is incompatible with the python version in use. Acceptable python versions are: ~=3.5
    The package https://files.pythonhosted.org/packages/d3/2d/dd1ce1b31dd23c245fccf6cd63466b522eb3744f1c4b73e37baa90c1c3ad/noiseprotocol-0.3.0-py3-none-any.whl#sha256=4e04f19bf6a747e16e7208f1c55fe1e3d8c3558d3ab4ee9e9d4a2fa6a154db6d (from https://pypi.org/simple/noiseprotocol/) (requires-python:~=3.5) is incompatible with the python version in use. Acceptable python versions are: ~=3.5
    The package https://files.pythonhosted.org/packages/a7/4c/2e45c4aa9c1f8055e8b11f327dbf5b125cd0bf60a3c2881dd420c1d01f69/noiseprotocol-0.3.0.tar.gz#sha256=81152e93910ac10ab392492a68dd6d8b1549f2d6fec7f85776f3119665f29809 (from https://pypi.org/simple/noiseprotocol/) (requires-python:~=3.5) is incompatible with the python version in use. Acceptable python versions are: ~=3.5
    The package https://files.pythonhosted.org/packages/9d/e1/76e4694201d67b93a6f1644b2588b4a3d965419fe189416e3496cf415db5/noiseprotocol-0.3.1-py3-none-any.whl#sha256=2e1a603a38439636cf0ffd8b3e8b12cee27d368a28b41be7dbe568b2abb23111 (from https://pypi.org/simple/noiseprotocol/) (requires-python:~=3.5) is incompatible with the python version in use. Acceptable python versions are: ~=3.5
  Could not find a version that satisfies the requirement noiseprotocol (from versions: )


[Feature Request] Allow customizing gRPC max incoming message length

Is your feature request related to a problem? Please describe.

If users have large payloads (inputs, results, memos etc) the total size of call response may be larget than the default gRPC limitation for the incoming messages of 4mb
Describe the solution you'd like

Allow customizing this through a config option & increase the default from 4mb to 16mb or higher
Additional context

in UI v1 we've added an env variable TEMPORAL_GRPC_MAX_MESSAGE_LENGTH https://github.com/temporalio/ui-server/issues/new?assignees=&labels=enhancement&template=feature_request.md&title=[Feature+Request]+FILL_TITLE_HERE

increased the max receive message size to 64mb in https://github.com/temporalio/ui-server/pull/132. decided to not expose the config yet unless there is still a need


imageregistry pkg: WithStorage and Get Storage methods added + unit test

WithStorage and Get Storage methods added + unit test

@kononovn @trewest @achuzhoy PTAL

@kononovn @trewest @achuzhoy PTAL


feat: dynamically import vjs module and add minified bundle to dist

Before this PR:
Importing the vjs bundle was load-blocking for the rest of our code. There was no way to tell the browser to load it and our custom element dynamically.
After this PR:
We export a mini/ and esm/ ix-video.js module in dist/.
Also, the vjs bundle is imported dynamically, so it doesn't block the browser from loading the rest of the module.
While the majority of the code won't execute until after vjs module has loaded, it will have already been loaded. So the only bottleneck for execution becomes the player tech's bundle load time.
This opens the door for, in the future, allowing users to host their own bundle of the player that's more aggressively minified than what we can offer.
This also allows CDNs like unpckg to more aggressively bundle the split deps.

@sherwinski split this into #12 and #13. This allows us to tackle minification/UMD support separately from dynamic imports.

Closing this as this was split into two new PRs.


HG terminal border not changing

I'm currently trying to change the terminal border on focus on High Contrast default theme. Here is the settings I'm running:
"workbench.colorCustomizations": {
        "editorRuler.foreground": "#ffffff57",
        "[Default High Contrast]": {
            "terminal.ansiRed": "#ff6e67",
            "terminal.ansiBrightRed": "#ff6e67",
            "terminal.ansiBlue": "#caa9fa",
            "terminal.ansiBrightBlue": "#caa9fa",
            "terminal.border": "#ff0000"
        },
    },

While the text colors are getting updated to the right hex, the border of the terminal is still orange (like the default theme) instead of red. I believe terminal.border should be the right setting to play with.
Am I missing something or is it a bug ?
If it's not a bug, then it would be great to export a setting that allow users to modify this.

@commit-master  I think what you're looking for here is focusBorder. The terminal doesn't have it's own focus border color and instead uses the same color as the rest of the application. Does focusBorder give you what you're looking for?

Yes focusBorder is right, and it works under the HC theme:


Deployed docs not rendering anything correctly

Building locally with DocumenterVitepress.dev_docs("build", md_output_path = "") looks good

But deploying to github gives this (also, none of the links work):

See the live site here. I'm honestly stumped on this, I've tried to copy themake.jl  and documentation.yaml as closely as possible but nothing seems to be working.

My make.jl
using Documenter, DocumenterVitepress
using Sargassum
using CairoMakie

### VITEPRESS
makedocs(
    sitename = "Sargassum.jl",
    format = MarkdownVitepress(
        md_output_path = ".", # LOCAL ONLY
        build_vitepress = false, # LOCAL ONLY
        repo = "github.com/70Gage70/Sargassum.jl",
        devbranch = "master",
        devurl = "dev";
    ),
    modules = [Sargassum],
    warnonly = true,
    checkdocs=:all,
    draft=false,
    source="src",
    build="build",
    clean = false, # LOCAL ONLY
)

deploydocs(;
    repo = "github.com/70Gage70/Sargassum.jl",
    target = "build",
    versions = nothing,
    branch = "gh-pages",
    devbranch = "master",
    push_preview = true
)

My documentation.yaml
name: Documentation

on:
  push:
    branches:
      - main
      - master
    tags: ['*']
  pull_request:

  workflow_dispatch:

permissions:
  contents: write
  pages: write
  id-token: write
  actions: write

concurrency:
  group: pages
  cancel-in-progress: false

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Setup Julia
        uses: julia-actions/setup-julia@v1
      - name: Pull Julia cache
        uses: julia-actions/cache@v1
      - name: Install dependencies
        run: julia --project=docs -e 'using Pkg; Pkg.Registry.add("General"); Pkg.Registry.add(Pkg.RegistrySpec(url = "https://github.com/70Gage70/SargassumRegistry")); Pkg.develop(PackageSpec(path=pwd())); Pkg.instantiate(); using Sargassum; itps_default_construct(download = true)'
      - name: Build and deploy docs
        uses: julia-actions/julia-docdeploy@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # For authentication with GitHub Actions token
          DOCUMENTER_KEY: ${{ secrets.DOCUMENTER_KEY }} # For authentication with SSH deploy key
          GKSwstype: "100" # for Plots.jl plots (if you have them)
          JULIA_DEBUG: "Documenter"
          DATADEPS_ALWAYS_ACCEPT: true

The full repo is here.
It's strange because e.g. here we can see that the build is doing the right things (making the figures in @example blocks) but somehow the site itself is just broken.

You are passing build_vitepress=false to make.jl, if you delete that line it should work.

@asinghvi17 Sorry, I copied it wrong, I comment that link out in the live version. See here for my exact make.jl.

Hmm, you might need an https:// prefix to repo then

Apparently it works now, absolutely no clue what fixed it. I copied the make.jl of DimensionalData.jl exactly in this latest iteration. Maybe versions = nothing was the issue?

make.jl
using Documenter, DocumenterVitepress
using Sargassum
using CairoMakie

### VITEPRESS
makedocs(;
    sitename = "Sargassum.jl",
    authors = "Gage Bonner",
    modules = [Sargassum],
    checkdocs=:all,
    format = DocumenterVitepress.MarkdownVitepress(
        repo = "https://github.com/70Gage70/Sargassum.jl",
        # md_output_path = ".", # LOCAL ONLY
        # build_vitepress = false, # LOCAL ONLY
        devbranch = "master",
        devurl = "dev";
    ),
    draft = false,
    source = "src",
    build = "build",
    warnonly = true,
    # clean = true, # LOCAL ONLY
)

deploydocs(;
    repo = "https://github.com/70Gage70/Sargassum.jl",
    target = "build",
    # versions = nothing,
    branch = "gh-pages",
    devbranch = "master",
    push_preview = true
)


Can't use managed with async

Try this:
module Foo where
import Control.Concurrent.Async
import Control.Monad.Managed
import Control.Monad.Trans.Cont

background = managed . withAsync
background' = ContT . withAsync

background compiles; background' does not.  It seems that Async a is of the wrong kind.  Any suggested workarounds?  I could newtype the return type (something like newtype Async' = Async' (Async ())) but then I lose the polymorphism.  Thanks.  --Omari

It appears that the issue is the use of point-free style.  If you convert them to a point-ful version then they both work:
module Foo where
import Control.Concurrent.Async
import Control.Monad.Managed
import Control.Monad.Trans.Cont

background  io = managed (withAsync io)
background' io = ContT (withAsync io)

Would never have guessed that one.  Thank you very much.


Evaluate FID and KID

Compare results of FID and KID with results of StyleGAN repo's
Random A

FID
KID

MMEdit
10.145473300110936
0.0005655973800502423

StyleGAN
10.050122002713657
0.000571023121843541

AFHQ

todo

TODO

[ ] Prototyping InceptionV3 with style='StyleGAN'
[ ] Testing FID, KID and InceptionV3 modules

@KKIEEK 둘다 random seed 하고 돌린 거죠? 생각보다 꽤 차이가 있네요.  ndarray는 따로 disk에 저장하신 건가요?

대부분의 논문에서 FID 소수 둘째자리까지 표기하기 때문에 그 정도는 맞춰봐야 할 것 같습니다.

일단 한번 머지 해놓을게요 @nijkah

Codecov Report

Merging #3 (d281afc) into master (bd4a8a2) will increase coverage by 0.18%.
The diff coverage is 80.95%.

@@            Coverage Diff             @@
##           master       #3      +/-   ##
==========================================
+ Coverage   83.72%   83.90%   +0.18%
==========================================
  Files         226      226
  Lines       12958    12983      +25
  Branches     2015     2020       +5
==========================================
+ Hits        10849    10894      +45
+ Misses       1759     1734      -25
- Partials      350      355       +5

Flag
Coverage Δ

unittests
83.90% <80.95%> (+0.18%)
:arrow_up:

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

mmedit/core/evaluation/inception_utils.py
88.74% <69.23%> (-4.12%)
:arrow_down:

mmedit/core/evaluation/inceptions.py
95.00% <100.00%> (+51.66%)
:arrow_up:

mmedit/models/common/generation_model_utils.py
95.19% <0.00%> (-4.81%)
:arrow_down:

mmedit/datasets/pipelines/random_degradations.py
94.01% <0.00%> (ø)

...ls/components/stylegan2/generator_discriminator.py
90.96% <0.00%> (+1.20%)
:arrow_up:

:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more


Docker EOL - Report on usage of EOL annotated images

EOL annotations are being added to the buildtools docker images.  Once completed, the Docker EOL reporting infrastructure should incorporate the EOL annotations.  Any usage of an EOL annotated image should be reported as an EOL usage.  The primary scenarios in which this can occur is the following:

A pipeline is using a pinned/versioned tag that is out of date - e.g. almalinux-8-helix-amd64-20240724202313-cbf67da.  Using the pinned/versioned tags is not generally recommended.
Support for a particular image is removed from buildtools prior to the underlying OS reaching it's EOL.  To date, this rarely happens.

The rollout of EOL annotations in buildtools is complete.
Per @mthalman in https://github.com/dotnet/dnceng/issues/4350
The current data showing in the report is inaccurate because it does not take into account these annotations. For example, filtering the report to show tags containing windowsservercore-ltsc2022-helix-webassembly, you'll see a reference to the tag windowsservercore-ltsc2022-helix-webassembly-20240702174122-7aba2af by dotnet/runtime.
The report shows that it's not yet EOL.
But the actual image has been annotated with an EOL date:
$ oras discover mcr.microsoft.com/dotnet-buildtools/prereqs:windowsservercore-ltsc2022-helix-webassembly-20240702174122-7aba2af --format json
{
"manifests": [
{
"reference": "mcr.microsoft.com/dotnet-buildtools/prereqs@sha256:7aaf16098579c7f8c740f8223fd6ebdb6a4e688f4120decd1e016c36f45dab41",
"mediaType": "application/vnd.oci.image.manifest.v1+json",
"digest": "sha256:7aaf16098579c7f8c740f8223fd6ebdb6a4e688f4120decd1e016c36f45dab41",
"size": 783,
"annotations": {
"org.opencontainers.image.created": "2024-09-30T20:32:27Z",
"vnd.microsoft.artifact.lifecycle.end-of-life.date": "2024-08-02"
},
"artifactType": "application/vnd.microsoft.artifact.lifecycle"
}
]
}
The report should reflect this EOL date.


Make project titles consistent

In main page they are named
Liver Carcinogenicity
Breast Carcinogenicity
...
When inside a project, they are named
HEPG2
MCF10A
ADIPO
...
Let's use the main page naming everywhere.

Is this resolved? I see the search by "portal" which I'm not sure is needed.


Link to GitHub repo from ES6 Fiddle

I like it if a website has an “about” page telling me who created it and why. A link to the GitHub repo could fulfill that purpose.

Bit late to the party here @rauschma but this project was taken over by myself and moved to https://esfiddle.net
It's still very much under active development, but we've made a lot of changes. If you've got any ideas please suggest them here: https://github.com/esfiddle/esfiddle/issues
And of course, this issue was resolved by building this page: https://esfiddle.net/about - thanks for the idea 👍


Session does not persist with reactive front-ends like React / React Admin

Dear Alex!
Im using you SessionMiddleware, and for static fronts, like Swagger UI in FastAPI, works nice, the session (session_id) persists, but when I use a React frontend, the session is being regenerated everytime, so I cannot control it and persist data and so on.
Is there something that Im missing?
My desire is to, in someway, persist the session when the actions are performed from the same user agent (same browser i.e.). I confirm that, this behaviour exactly ocurrs with static ones but reactive ones is creating a new id (the middleware) in each request.
Thanks in advance!

Make sure:

your browser sends session cookie
the path is not restricted by cookie security rules
subdomain, if any, is not restricted by cookie security rules
check same_site rule


Horse archer  Archers and Crossbowmen attack BUG.

I understand that this topic has already been raised.
But this is a very unpleasant bug. Sorry.
I noticed that when Amir goes on the attack, he leaves the horse archers and does not attack
by them. It would be better if he killed the shooters on the walls than he waited for the wall to break .
All AI do the same except The Wazir. The Wazir immediately goes into battle with horse archers to clean the walls of the enemy.
Crossbowmen with archers also stand aside.

#104

I am 100% sure this issue already exists.

The bug you describe seems to be a pathfinding issue, and is often caused by the landscape on some maps I think, if there is an obstacle like rocks or a hill between the siege force gather point and the enemy castle being targeted, some units can get left behind.

No. This problem is constantly i encountered, even from the vanilla version of Stronghold Crusader

Well from my experience, I find it happens only on some maps, particularly those with more features on them between the enemy castles like hills, cliffs and rocks that can cause pathfinding issues.
And I [i]have[/i] found it has happened to Wazir too. The only Arabian AI that uses horse archers that it doesn't seem to happen to is Saladin, because he moves his horse archers around during sieges unlike other AIs.
Anyway, I hope it can be fixed eventually.

We will hope ....

The problem WHY they won't attack is, that they are meant to stay behind and act as kind of a backup / fallback unit. To protect the army while it is preparing. They won't move until the enemy keep is accessible
In the AICE (AI Character Editor) you'll be able to give the AI a ranged push unit..

In the AICE (AI Character Editor) you'll be able to give the AI a ranged push unit..

ok.


[Feature] New Design in accordance with CC Vocabulary

Problem
The current CC Resource Archive has an outdated visual setup that doesn't match the overall CC aesthetics.
Description

Figma Design Link
Additional context
Please Provide Feedback so I can improve it further
Implementation

[x] I would be interested in implementing this feature.

duplicate of #72 please move suggestions and discussion there :)


Fix Hikvision (motion) switch bug

Description:
The updated Hikvision 1.2 package breaks the camera switches. Reverting it to 0.4.
Related issue (if applicable): fixes #10440 #10606
Example entry for configuration.yaml (if applicable): Tested with
  - platform: hikvisioncam
    host: <IP_ADDRESS>
    name: PorchMotion
    username: !secret hikvision_username
    password: !secret hikvision_password

If the code does not interact with devices:

[x] Local tests with tox run successfully. Your PR cannot be merged unless tests pass

Hopefully, @mezz64 will get some time to update his pyhik to support turning motion on/off. Then, we can remove the hikvision library completely. For now, this fixes the bugs :)


Winix integration failing after reboot

Restarted HA this morning (had not noticed that there were any issues, but didnt check all integrations) and Winix refuses to start now.  I've manually reloaded and its continuing to try.  Perhaps its due to something unavailable on Winix site, but just wanted to post this here to get a head start on any possible issues with HA updates.
Getting the following message when it fails to load:
Unexpected error fetching WinixManager data
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 382, in _async_refresh
self.data = await self._async_update_data()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/winix/manager.py", line 89, in _async_update_data
await self.async_update()
File "/config/custom_components/winix/manager.py", line 120, in async_update
for device_wrapper in self._device_wrappers:
TypeError: 'NoneType' object is not iterable

What is your version?

Seeing the same thing on HA 2024.11.1 & Winix 1.1.8

What is your version?

Core 2024.11.1
Supervisor 2024.11.2
Operating System 13.2
Frontend 20241106.2
Winix 1.1.8

That exception indicates that we did not get device list from Winix. An error handling can be added but  there still won't be any devices. I have restarted a few times I tool 2024.11.1 but have not encountered this.

Same error also.

There is a fix to better handle the exception in 1.1.9. This does not address missing data from Winix end. You can reload the integration to see if new is being provided.

Enabling Debug mode on the integration might also show more relevant information.

Full log:
2024-11-10 08:33:21.864 DEBUG (MainThread) [custom_components.winix.helpers] Obtaining device list
2024-11-10 08:33:22.171 INFO (MainThread) [custom_components.winix.manager] No purifiers found
2024-11-10 08:33:22.172 INFO (MainThread) [custom_components.winix.manager] Updating devices
2024-11-10 08:33:22.172 ERROR (MainThread) [custom_components.winix.manager] Unexpected error fetching WinixManager data
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 382, in _async_refresh
    self.data = await self._async_update_data()
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/winix/manager.py", line 89, in _async_update_data
    await self.async_update()
  File "/config/custom_components/winix/manager.py", line 120, in async_update
    for device_wrapper in self._device_wrappers:
TypeError: 'NoneType' object is not iterable
2024-11-10 08:33:22.178 DEBUG (MainThread) [custom_components.winix.manager] Finished fetching WinixManager data in 0.006 seconds (success: False)

I'm not able to re-registered my C545s with the app either, seems like something is broken on the Winix end.

Same issue here. My air purifier was removed from the Winix app and trying to re-register it resulted in these messages:

You might want to post an issue on the app in App store. That might get their attention.

Updating to v1.1.9, re-registering my C545's, and restarting HA solved the issue for me.
For other experiencing device registration issues, I would agree with @iprak about contacting Winix. I am not sure how useful this will be for others, but the app prompted me to update my C545's to firmware v1.3.0.

Updating to v1.1.9, re-registering my C545's, and restarting HA solved the issue for me.
For other experiencing device registration issues, I would agree with @iprak about contacting Winix. I am not sure how useful this will be for others, but the app prompted me to update my C545's to firmware v1.3.0.

What did you update to v1.1.9?

What did you update to v1.1.9?

My apologies for the confusion. I was referring to the HA Winix integration which was released a few posts above, v1.1.9. Even after updating to v1.1.9, I received an error from the integration because Winix (the company) had de-registered my devices.

Thanks for clarifying. I was able to successfully get my air purifier back in the app by adding it to a different wifi ssid.

Updated to 1.1.9 and then had to add all my air purifiers back into the Winix app before available again.  Thanks!

I wonder what caused the purge? Was it because we never logged into the Winix app since everything was being controlled via Home Assistant? Or was it excessive API calls or something like that?

I would also like to think that it may have been a result of infrequent app usage, but I distinctly remember opening the app late-September during a filter change.

I did not encounter this problem at all and I do take the HomeAssistant updates as soon as they are released. I wonder if this was due to Winix inactivity from HomeAssistant end? I have automations which daily turn two purifiers on and off.

I updated my Home Assistant to 2024.11.2 the day it was released and also have automations that toggle my purifier settings daily. I did not have any issue during re-registering like others have mentioned (switching networks, needing to use a new device).

I wonder what caused the purge? Was it because we never logged into the Winix app since everything was being controlled via Home Assistant? Or was it excessive API calls or something like that?

I would also like to think that it may have been a result of infrequent app usage, but I distinctly remember opening the app late-September during a filter change.

I did not encounter this problem at all and I do take the HomeAssistant updates as soon as they are released. I wonder if this was due to Winix inactivity from HomeAssistant end? I have automations which daily turn two purifiers on and off.

I updated my Home Assistant to 2024.11.2 the day it was released and also have automations that toggle my purifier settings daily. I did not have any issue during re-registering like others have mentioned (switching networks, needing to use a new device).

If I had to guess, they had a catastrophic loss of data and blamed it on "inactivity". I know for sure I had logged in recently, and WHY would you require your customers to manually log into an app that is designed to AUTOMATE the functions of your product? That doesn't make ANY sense at all.


ECS Service Connect configuration should be a list

What happened?
An ECS service can have multiple ports configured when managing it's service connect  setup. Today Pulumi allows me to specify a single port configuration, however, if I wanted to have more, I can't because it's not a list rather a single object. I'm not sure if there's an SDK issue or if there's a generation issue.
Here's what it looks like in the ECS console where I am able to specify multiple services:

Expected Behavior
When defining a service connect config, allow me to configure multiple services:
serviceConnectConfiguration: {
        enabled: true,
        namespace: namespace.arn,
        service: {
          clientAliases: [{
            port: 8081
          }],
          portName: "ratelimit"
        }
      }

Steps to reproduce
Try to setup multiple services via code.
Output of pulumi about
:latest:
Additional context
No response
Contributing
Vote on this issue by adding a 👍 reaction.
To contribute a fix for this issue, leave a comment (and link to your pull request, if you've opened one already).

Hi @stevesloka! Unfortunately, this is a limitation in the upstream provider. While their docs say service is a list, the list is actually annotated with constraint MaxItems: 1, so we translate it into a scalar property in our SDK. I hope that helps. If this issue is blocking for you, we'll need to see whether we can find a workaround.

Hey @thomas11 thanks for the clarification. Do you know what upstream repo we could open an issue with to get this changed? I'm not blocked at the moment since my current needs are met with a single entry, but wanted to raise in case someone else came along and had an issue.


feat(ustring): ustring hash collision protection

The gist is that the ustring::strhash(str) function is modified to strip out the MSB from Strutil::strhash.  The rep entry is filed in the ustring table based on this hash.  So effectively, the computed hash is 63 bits, not 64.
But rep->hashed field consists of the lower 63 bits being the computed hash, and the MSB indicates whether this is the 2nd (or more) entry in the table that had the same 63 bit hash.
ustring::hash() then is modified as follows: If the MSB is 0, the computed hash is the hash. If the MSB is 1, though, we DON'T use that hash, and instead we use the pointer to the unique characters, but with the MSB set (that's an invalid address by itself). Note that the computed hashes never have MSB set, and the char*+MSB always have MSB set, so therefore ustring::hash() will never have the same value for two different ustrings.
But -- please note! -- that ustring::strhash(str) and ustring(str).hash() will only match (and also be the same value on every execution) if the ustring is the first to receive that hash, which should be approximately always. Probably always, in practice.
But in the very improbable case of a hash collision, one of them (the second to be turned into a ustring) will be using the alternate hash based on the character address, which is both not the same as ustring::strhash(chars), nor is it expected to be the same constant on every program execution.

Comments @cmstein @sfriedmapixar @etheory ?

Maybe @chellmuth too?

I'm OK with any of these options as long as collisions are handled.
I do agree with @sfriedmapixar about the simplicity of debugging if the top bit is 1 for a hash and 0 for a string though.
Also remember that on every current system, the bottom few bits are zero due to alignment, and the top few are zero due to memory allocation guarantees: https://stackoverflow.com/questions/46509152/why-in-x86-64-the-virtual-address-are-4-bits-shorter-than-physical-48-bits-vs which means you can often rely on the top 12 to 16bits also being zero. Keep that in mind when you do any of these tricks. We use these bits in glimpse for storage of data, so it's quite useful.

Something that has been nagging at my mind... I know that the MSB will always be 0 for a real address on x86, but do we feel confident that this will also be true for ARM, RISC V, or others that may come along?
I also considered using the LSB for this, also safe because the allocations are always aligned, the characters will never start on an odd address, so if we "|1" the hashes to set the low bit, then that's also a simple way to distinguish pointers from hashes and will be true of any future architecture.
Thoughts?

The reason I really like empty string to be all 0 bits (and thus thought that must mean that it's pointers, not hashes, with the extra bit set) is so we can memset to 0 a region and know that we've made valid (empty) ustrings or ustringhashes.

I also considered using the LSB for this, also safe because the allocations are always aligned, the characters will never start on an odd address, so if we "|1" the hashes to set the low bit, then that's also a simple way to distinguish pointers from hashes and will be true of any future architecture.

Setting the LSB hash will reduce the hash quality in a risky way. Suppose for instance someone did: my_array[hash%my_array.length()] where the length is 8 (it could be any size, but this is simple to show). The hash%8 will result in just the three lowest signed bits being used. But note that your proposal has the LSB at 1, so now we just have 2 bits in play and so only half the array will be referenceable.

Right, gotcha. That's a good reason to stick with MSB.
It's ok, we'll have asserts that no real address has the high bit set. We'll have faith that we'll catch it right away if anybody ports to a hardware platform that might use that part of the address space.

OK, in my tree (not yet pushed here) I recoded it all to make the MSB 1 for "original" hashes, and 0 for rehashes (which are replaced by the char ptr as the return value for ustring.hash()). I believe it's all working, but there is a tradeoff involved that I'm not entirely happy with. Let me review the issues:
In the table (invisible to the user), each entry has a hashed field, and the chars themselves. The MSB of the hashed field reveals if this is the first entry with that hash (used to be 0, now is 1 in my new draft), or if it is a subsequently encountered string that had the same 31 bit hash. The public hash() function returns rep->hashed if it's a first string entry having that hash, or the char address if it's a duplicate hash.
A property we've always had that I think is very important to retain is that both ustring and ustringhash are represented by a true 0 value for empty strings. In other words, it's special -- the ptr is null and the hash should be 0. This is what lets us zero out a block of memory and know that it's initializing any ustring or ustringhash therein to be valid, and represent an empty string.
Now then, the way I did it first in this PR trivially preserved that property, because MSB was 1 only for duplicate hashes, so the empty string is canonical and hashes to 0. The alternate way, where it would "want" to be a MSB 1 for canonical hashes, requires special handling of the empty string case in a variety of places. I think this is a little confusing and error-prone, and certainly has a runtime cost for the extra testing and branching.
@ssteinbach and others pointed out that it's nice for the pointers to have the MSB=0 rather than =1, because then you can just cast it to a pointer to get to the characters, especially helpful when debugging.
But here's where I want to push back a little: Is it, really? The only case where you'd get a hash that's a pointer is for a 2nd string that had the same hash. This should be exceptionally rare, so it's not something that would come up... almost never... while in the debugger looking at a ustringhash. Usually you'd just see the hash, so there's not a direct way to get to the chars, so it doesn't matter if MSB is 0 or 1 for that case. (And if we set MSB on the pointer, that just means to get to the chars, you'd need to mask it... awkward, but how often does that really come up? You could also just CALL -- yes, in the debugger -- ustringhash.c_str() to get to the chars.)
So here's the crux of it:
MSB=1 for duplicate hash:

PRO: no special handling of empty string case to make the hash 0
CON: "pointer substituted for duplicate hash" needs to have MSB masked off to get to the chars, which is painful in the debugger but almost never happens.

MSB=0 for duplicate hash:

PRO: duplicate hashes trivially castble to pointers, easy in the debugger, but this almost never happens.
CON: extra operations and potentially a branch to ensure ustringhash("") == 0, in several places that actually execute frequently.

Thoughts? Are people willing to pay (slightly) in runtime perf to have this property of trivial cast of duplicate hashes to pointers in the debuger, that you'll almost never encounter in real life?

You know what, add a static function to do the cast in the debugger and you solve all the issues. Should be straight forward enough. Then you can just call the correct function in the debugger directly. Just document it clearly and that should resolve the issue no?

You know what, add a static function to do the cast in the debugger and you solve all the issues.

Isn't that just the existing ustringhash.c_str()?

You know what, add a static function to do the cast in the debugger and you solve all the issues.

Isn't that just the existing ustringhash.c_str()?

If you only have the pointer for some reason, you cannot call the function on it (though I guess you could cast it....).
My point is that if you provide a free function to convert the bits for display/conversion, then you can just call it at any time in a debugger in any situation. Whether you have the object reference or not. If you can just cast the address and call the function, then sure, it's fine as is.

If you have the pointer, you already have the pointer.
If you have a hash value h as a ustringhash, you get to the chars with h.c_str().
If you have a hash value v as a uint64, you get to the chars with ustringhash(v).c_str().

Does my last answer assuage concerns, or do we need an additional utility function?

Yep all good thanks @lgritz - sorry for the slow turn around, I was on leave.

@sfriedmapixar you had asked about the stab I took at swapping the bit to the other way as you originally suggested. If you're curious, it's here: https://github.com/lgritz/OpenImageIO/tree/lg-ustringhash2 (just one additional commit on top of what I have here in this PR)
I like this PR here better, as it avoids some extra logic (both potentially perf impacting, but maybe more importantly, error prone and easy to forget) that is necessary to special case empty string handing.
Let me know if you feel really strongly about doing it the other way. If you're ok with this, though, I'd like to merge it.


kubeflow registry not found

ks registry add kubeflow github.com/kubeflow/kubeflow/tree/master/kubeflow
Error messgaes
ERROR validating registry URL: validating GitHub registry URL: "https://github.com/kubeflow/kubeflow/tree/master/kubeflow/registry.yaml" actual 404; expected 200

We should use a specific version of kubeflow

/cc @xyhuang

as ksonnet is reaching EOL we are no longer using it for the deployment. we are aware that the doc is out of date and no longer work with the current kubeflow. sorry for the inconvenience as we work through the changes in kubeflow. we expect to update the doc and project in the near future.


fix($compile): ensure that $onChanges hook is called correctly

What kind of change does this PR introduce? (Bug fix, feature, docs update, ...)
fix
What is the current behavior? (You can also link to an open issue here)
the $onChanges hook is not being called correctly
Please check if the PR fulfills these requirements

[x] The commit message follows our guidelines: https://github.com/angular/angular.js/blob/master/CONTRIBUTING.md#commit-message-format
[x] Tests for the changes have been added (for bug fixes / features)
[ ] Docs have been added / updated (for bug fixes / features)

Other information:
Due to the way that we instantiate controllers, the $onChanges hook
was not always available at the time we were trying to trigger the initial
call to this hook. For instance, if the hook was actually defined inside
the constructor function.
This commit fixes that but also fixes the fact that the initial call was
being made in the postDigest anyway, which was incorrect because the
it should have been made before the $onInit call.

@mgol does this fix your problem too?

I'll have a look tomorrow.

After removing the one outdated comment, LGTM. :+1:


Update sample3.cshtml

When creating a new PR, please do the following and delete this template text:

Reference the issue number if there is one:
Fixes #Issue_Number

The "Fixes #nnn" syntax in the PR description causes
GitHub to automatically close the issue when this PR is merged.

Need to close/reopen to fix glitch.


Flutter install on Windows 10: Don't complete.

@goderbauer

ENVIRONMENT
Windows 10 pt-br
CMD or PowerShell (as Administrator too)

ISSUE
Don't complete install after run 'flutter doctor': infinite loop 'Updating flutter tool'.
The output:
C:\flutter\bin>flutter doctor
Checking Dart SDK version...
Downloading Dart SDK 1.25.0-dev.11.0...
Unzipping Dart SDK...
Updating flutter tool...

WARNINGS
I don't use directory names with spaces or special characteres.

SUPPORT

Is it posible only run the 'update flutter tool'?
How to uninstall incomplete version to reinstall by zero?

OTHER COMMENTS
For Mac works fine.

What is the output when you manually update the flutter tool by executing the following in the directory you installed flutter in?
.\bin\cache\dart-sdk\bin\dart.exe --snapshot="bin\cache\flutter_tools.snapshot" --packages="packages\flutter_
tools\.packages" "packages\flutter_tools\bin\flutter_tools.dart"


Ethan: Watch +4915217813164

Ethan requests the watch of the watch_number +4915217813164. See the MS search here and the Stack Exchange search in text, in URLs, and in code.

Approved by Spevacus in Charcoal HQ


das: fix remaining comments on #849

Assigning you, so you can also double-check the correctness of logs there.

Fixed in #848

#848 was closed, I think this issue can be closed as well


New version: monkeyWie.Gopeed version 1.6.3

Created by 🥟 Dumplings in workflow run #9638.

Log
Updated: 1.6.2 → 1.6.3
Submitting WinGet manifests
Creating manifests
Uploading manifests and making commits
Creating a pull request

Microsoft Reviewers: Open in CodeFlow

Automatic Validation ended with:

Installation failed with exit code -1978335187
2024-11-18 04:24:43.886 [FAIL] Installer failed security check. Url: https://github.com/GopeedLab/gopeed/releases/download/v1.6.3/Gopeed-v1.6.3-windows-amd64.zip Result: 0x80004005

Automated error analysis suggests -1978335187 may mean Installer failed security check. Another script should retry this every 18 hours.
Automated error analysis suggests 80004005 may mean Resource missing
(Automated response - build 897.)

@wingetbot run


Server Error (500) while trying to login

I'm running linkding in a Docker container, imported a thousand or so bookmarks, and after a power outage, restarting the application, I am not able to login.
docker run -it --name linkding -p 9090:9090 -v $SCRIPT_DIR/data:/etc/linkding/data -d sissbruecker/linkding:latest
I've also tried running previous versions, same problem.
$ docker logs linkding
Operations to perform:
  Apply all migrations: admin, auth, authtoken, bookmarks, contenttypes, sessions
Running migrations:
  No migrations to apply.
[uWSGI] getting INI configuration from uwsgi.ini
[uwsgi-static] added mapping for /static => static
*** Starting uWSGI 2.0.18 (64bit) on [Mon Jun  6 22:58:41 2022] ***
compiled with version: 8.3.0 on 17 August 2021 03:54:29
os: Linux-4.4.180+ #42218 SMP Mon Oct 18 19:16:55 CST 2021
nodename: f3aee2829521
machine: x86_64
clock source: unix
detected number of CPU cores: 4
current working directory: /etc/linkding
writing pidfile to /tmp/linkding.pid
detected binary path: /opt/venv/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
setgid() to 33
setuid() to 33
chdir() to /etc/linkding
your memory page size is 4096 bytes
detected max file descriptor number: 1048576
building mime-types dictionary from file /etc/mime.types...565 entry found
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uWSGI http bound on :9090 fd 4
uwsgi socket 0 bound to TCP address <IP_ADDRESS>:33007 (port auto-assigned) fd 3
Python version: 3.9.6 (default, Jul 22 2021, 15:24:21)  [GCC 8.3.0]
Python main interpreter initialized at 0x562c065bac80
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 416720 bytes (406 KB) for 8 cores
*** Operational MODE: preforking+threaded ***
WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x562c065bac80 pid: 12 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 12)
spawned uWSGI worker 1 (pid: 13, cores: 2)
spawned uWSGI worker 2 (pid: 14, cores: 2)
spawned uWSGI worker 3 (pid: 15, cores: 2)
spawned uWSGI worker 4 (pid: 18, cores: 2)
*** Stats server enabled on <IP_ADDRESS>:9191 fd: 18 ***
spawned uWSGI http 1 (pid: 19)
[pid: 15|app: 0|req: 1/1] <IP_ADDRESS> () {42 vars in 732 bytes} [Mon Jun  6 23:00:53 2022] GET /login/ => generated 2646 bytes in 416 msecs (HTTP/1.1 200) 10 headers in 500 bytes (1 switches on core 0)
[pid: 15|app: 0|req: 2/2] <IP_ADDRESS> () {50 vars in 907 bytes} [Mon Jun  6 23:00:56 2022] POST /login/ => generated 145 bytes in 708 msecs (HTTP/1.1 500) 7 headers in 223 bytes (1 switches on core 1)

I have just tried to create a new user and got the following error:
Traceback (most recent call last):
  File "/opt/venv/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/opt/venv/lib/python3.9/site-packages/django/db/backends/sqlite3/base.py", line 423, in execute
    return Database.Cursor.execute(self, query, params)
sqlite3.IntegrityError: NOT NULL constraint failed: bookmarks_userprofile.bookmark_link_target

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/etc/linkding/manage.py", line 21, in <module>
    main()
  File "/etc/linkding/manage.py", line 17, in main
    execute_from_command_line(sys.argv)
  File "/opt/venv/lib/python3.9/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/opt/venv/lib/python3.9/site-packages/django/core/management/__init__.py", line 413, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/opt/venv/lib/python3.9/site-packages/django/core/management/base.py", line 354, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/opt/venv/lib/python3.9/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 79, in execute
    return super().execute(*args, **options)
  File "/opt/venv/lib/python3.9/site-packages/django/core/management/base.py", line 398, in execute
    output = self.handle(*args, **options)
  File "/opt/venv/lib/python3.9/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 189, in handle
    self.UserModel._default_manager.db_manager(database).create_superuser(**user_data)
  File "/opt/venv/lib/python3.9/site-packages/django/contrib/auth/models.py", line 163, in create_superuser
    return self._create_user(username, email, password, **extra_fields)
  File "/opt/venv/lib/python3.9/site-packages/django/contrib/auth/models.py", line 146, in _create_user
    user.save(using=self._db)
  File "/opt/venv/lib/python3.9/site-packages/django/contrib/auth/base_user.py", line 67, in save
    super().save(*args, **kwargs)
  File "/opt/venv/lib/python3.9/site-packages/django/db/models/base.py", line 726, in save
    self.save_base(using=using, force_insert=force_insert,
  File "/opt/venv/lib/python3.9/site-packages/django/db/models/base.py", line 774, in save_base
    post_save.send(
  File "/opt/venv/lib/python3.9/site-packages/django/dispatch/dispatcher.py", line 180, in send
    return [
  File "/opt/venv/lib/python3.9/site-packages/django/dispatch/dispatcher.py", line 181, in <listcomp>
    (receiver, receiver(signal=self, sender=sender, **named))
  File "/etc/linkding/bookmarks/models.py", line 133, in create_user_profile
    UserProfile.objects.create(user=instance)
  File "/opt/venv/lib/python3.9/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/opt/venv/lib/python3.9/site-packages/django/db/models/query.py", line 453, in create
    obj.save(force_insert=True, using=self.db)
  File "/opt/venv/lib/python3.9/site-packages/django/db/models/base.py", line 726, in save
    self.save_base(using=using, force_insert=force_insert,
  File "/opt/venv/lib/python3.9/site-packages/django/db/models/base.py", line 763, in save_base
    updated = self._save_table(
  File "/opt/venv/lib/python3.9/site-packages/django/db/models/base.py", line 868, in _save_table
    results = self._do_insert(cls._base_manager, using, fields, returning_fields, raw)
  File "/opt/venv/lib/python3.9/site-packages/django/db/models/base.py", line 906, in _do_insert
    return manager._insert(
  File "/opt/venv/lib/python3.9/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/opt/venv/lib/python3.9/site-packages/django/db/models/query.py", line 1270, in _insert
    return query.get_compiler(using=using).execute_sql(returning_fields)
  File "/opt/venv/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 1416, in execute_sql
    cursor.execute(sql, params)
  File "/opt/venv/lib/python3.9/site-packages/django/db/backends/utils.py", line 66, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/opt/venv/lib/python3.9/site-packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/opt/venv/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/opt/venv/lib/python3.9/site-packages/django/db/utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/opt/venv/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/opt/venv/lib/python3.9/site-packages/django/db/backends/sqlite3/base.py", line 423, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.IntegrityError: NOT NULL constraint failed: bookmarks_userprofile.bookmark_link_target


The Software object sync from Workbench marked with Deprecation Warning

Hi ,
I have a attack-website instance in my local env, and it has been configured to integrate with Workbench. I added a new Software object in Workbench which shown like this:

After that i refreshed the attack-website, I can saw the new Software object, but the content was shown like this:

the description is under Deprecation Warning and the related attributes are missing. The software mytest was a new object and should not be marked as deprecation. I suppose maybe some attributes of the software object may be filtered out during data synchronization. is there any known issue or workaround to it?

hi @IanDavila,
I suppose this issue may have the same cause with #359. Cloud you please check it? thanks.

Hi @dickens88, thanks for reporting this issue. It is a similar issue where the non-deprecated Software created by Workbench are not being handled correctly as in #358. I'll keep this issue open and add a fix. Thanks again!

This was addressed in 3b23cfa7a062045063bd2a7b1ea71f890f3ced03 (on the develop branch), along with several other fixes.

This was addressed in 3b23cfa7a062045063bd2a7b1ea71f890f3ced03 (on the develop branch), along with several other fixes.

@IanDavila I updated to the latest released version v3.6.0, but i found the issue is still there. the customized software object shown as Deprecation Warning in the website. please check. thank you.