Implements stelar thing object

Codecov Report

Merging #24 (82c71a0) into dev (30aeb26) will increase coverage by 1.53%.
The diff coverage is 83.54%.

@@            Coverage Diff             @@
##              dev      #24      +/-   ##
==========================================
+ Coverage   39.65%   41.18%   +1.53%
==========================================
  Files          21       22       +1
  Lines        1044     1061      +17
  Branches      179      182       +3
==========================================
+ Hits          414      437      +23
+ Misses        621      616       -5
+ Partials        9        8       -1

Impacted Files
Coverage Δ

pythonium/bots/standard_player.py
0.00% <ø> (ø)

pythonium/game.py
53.35% <0.00%> (ø)

pythonium/game_modes.py
21.96% <0.00%> (ø)

pythonium/ship.py
70.37% <69.23%> (-4.63%)
:arrow_down:

pythonium/galaxy.py
68.60% <90.00%> (+14.65%)
:arrow_up:

pythonium/planet.py
98.43% <94.11%> (-1.57%)
:arrow_down:

pythonium/__init__.py
100.00% <100.00%> (ø)

pythonium/core.py
100.00% <100.00%> (ø)

pythonium/validators.py
100.00% <100.00%> (ø)

... and 1 more

Continue to review full report at Codecov.

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


go 1.17 make yip fail on boot

Apparently there is something really wrong with go 1.17, this happens while running yip locally on my host (TW, kernel 5.12.9):
$ sudo -E luet util unpack quay.io/costoolkit/releases-green:yip-toolchain-0.9.8-4 testfoo
$ ./testfoo/usr/bin/yip
unexpected fault address 0x0
fatal error: fault
[signal SIGSEGV: segmentation violation code=0x80 addr=0x0 pc=0x7aaf52]

goroutine 1 [running, locked to thread]:
runtime.throw({0x1460cec, 0xc0002a7848})
        /usr/local/go/src/runtime/panic.go:1198 +0x71 fp=0xc0002a7810 sp=0xc0002a77e0 pc=0x433591
runtime.sigpanic()
        /usr/local/go/src/runtime/signal_unix.go:742 +0x2f6 fp=0xc0002a7860 sp=0xc0002a7810 pc=0x448ad6
github.com/zcalusic/sysinfo.getSupported({0xc0002aa00f, 0x3})
        /luetbuild/go/pkg/mod/github.com/zcalusic/sysinfo@v0.0.0-20200820110305-ef1bb2697bc2/network.go:92 +0x172 fp=0xc0002a7918 sp=0xc0002a7860 pc=0x7aaf52
github.com/zcalusic/sysinfo.(*SysInfo).getNetworkInfo(0x2082260)
        /luetbuild/go/pkg/mod/github.com/zcalusic/sysinfo@v0.0.0-20200820110305-ef1bb2697bc2/network.go:117 +0x1da fp=0xc0002a7a70 sp=0xc0002a7918 pc=0x7ab23a
github.com/zcalusic/sysinfo.(*SysInfo).GetSysInfo(0x2082260)
        /luetbuild/go/pkg/mod/github.com/zcalusic/sysinfo@v0.0.0-20200820110305-ef1bb2697bc2/sysinfo.go:44 +0xcf fp=0xc0002a7a88 sp=0xc0002a7a70 pc=0x7ad8ef
github.com/mudler/yip/pkg/plugins.init.0()
        /luetbuild/go/src/github.com/mudler/yip/pkg/plugins/common.go:23 +0x25 fp=0xc0002a7aa0 sp=0xc0002a7a88 pc=0x11d3665
runtime.doInit(0x1ff9b40)
        /usr/local/go/src/runtime/proc.go:6498 +0x123 fp=0xc0002a7bd8 sp=0xc0002a7aa0 pc=0x442d03
runtime.doInit(0x1ff0680)
        /usr/local/go/src/runtime/proc.go:6475 +0x71 fp=0xc0002a7d10 sp=0xc0002a7bd8 pc=0x442c51
runtime.doInit(0x1ff1e00)
        /usr/local/go/src/runtime/proc.go:6475 +0x71 fp=0xc0002a7e48 sp=0xc0002a7d10 pc=0x442c51
runtime.doInit(0x1fe8ba0)
        /usr/local/go/src/runtime/proc.go:6475 +0x71 fp=0xc0002a7f80 sp=0xc0002a7e48 pc=0x442c51
runtime.main()
        /usr/local/go/src/runtime/proc.go:238 +0x1e6 fp=0xc0002a7fe0 sp=0xc0002a7f80 pc=0x435c26
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1581 +0x1 fp=0xc0002a7fe8 sp=0xc0002a7fe0 pc=0x462e21

goroutine 18 [chan receive]:
k8s.io/klog.(*loggingT).flushDaemon(0x0)
        /luetbuild/go/pkg/mod/k8s.io/klog@v1.0.0/klog.go:1010 +0x6a
created by k8s.io/klog.init.0
        /luetbuild/go/pkg/mod/k8s.io/klog@v1.0.0/klog.go:411 +0xf4

With the version of yip built with golang 1.16 this doesn't happen:
$ sudo -E luet util unpack quay.io/costoolkit/releases-green:yip-toolchain-0.9.8-3 testfoo
 Luet version 0.17.8-g3402641241fd6459a4c95f6055b98a728c4e2c67 2021-08-11 0135 UTC

        Luet Copyright (C) 2019-2021 Ettore Di Giacinto
        This program comes with ABSOLUTELY NO WARRANTY.
        This is free software, and you are welcome to redistribute it
        under certain conditions.

 Downloading quay.io/costoolkit/releases-green:yip-toolchain-0.9.8-3 to /home/ettore/testfoo
 Pulled: sha256:e7d5fb4b42c00ec052109692baf163da4b11c43b6e823baaae9c2707f7d8cd9e quay.io/costoolkit/releases-green:yip-toolchain-0.9.8-3
 Size: 29.79MiB

$ ./testfoo/usr/bin/yip
INFO[0000] yip version 0.9.8-g814c5ba0839f1a60e2ca8e829f8acc2e7f1566c7 2021-08-22 03:02:59 UTC
ERRO[0000] yip needs at least one path or url as argument

Originally posted by @mudler in https://github.com/rancher-sandbox/cOS-toolkit/issues/490#issuecomment-908197679
This seems to show off also during boot time:
[  OK  ] Stopped Emergency Shell.
[  OK  ] Finished Load Kernel Modules.
[  OK  ] Finished Create Volatile Files and Directories.
[FAILED] Failed to start cOS system…amfs setup before switch root.
See 'systemctl status cos-setup-initramfs.service' for details.
[DEPEND] Dependency failed for Initrd Default Target.
[FAILED] Failed to start cOS system early rootfs setup.
See 'systemctl status cos-setup-rootfs.service' for details.
[  OK  ] Stopped Dispatch Password …ts to Console Directory Watch.
         Starting Open-iSCSI...
         Starting Apply Kernel Variables...
         Starting Create Static Device Nodes in /dev...
         Starting Coldplug All udev Devices...

Few open questions:

Why CI didn't failed, and we just notice this on tumbleweed hosts
And why go 1.17 makes it fail pointing to https://github.com/zcalusic/sysinfo/blob/aff387a52b3af60423548f44c504eee6d2d647ec/network.go#L92

We know - see comments below
cc @bk201 and credits to him to finding and tracing this issue

I've opened https://github.com/rancher-sandbox/cOS-toolkit/pull/561 as a workaround for the moment being

Seems golang 1.17 introduces few changes to unsafe ptr handling, from the release notes:
 Go 1.17 includes three small enhancements to the language.

    Conversions from slice to array pointer: An expression s of type []T may now be converted to array pointer type *[N]T. If a is the result of such a conversion, then corresponding indices that are in range refer to the same underlying elements: &a[i] == &s[i] for 0 <= i < N. The conversion panics if len(s) is less than N.
    unsafe.Add: unsafe.Add(ptr, len) adds len to ptr and returns the updated pointer unsafe.Pointer(uintptr(ptr) + uintptr(len)).
    unsafe.Slice: For expression ptr of type *T, unsafe.Slice(ptr, len) returns a slice of type []T whose underlying array starts at ptr and whose length and capacity are len.

The package unsafe enhancements were added to simplify writing code that conforms to unsafe.Pointer's safety rules, but the rules remain unchanged. In particular, existing programs that correctly use unsafe.Pointer remain valid, and new programs must still follow the rules when using unsafe.Add or unsafe.Slice.

Note that the new conversion from slice to array pointer is the first case in which a type conversion can panic at run time. Analysis tools that assume type conversions can never panic should be updated to consider this possibility.

See: https://github.com/zcalusic/sysinfo/issues/29

Go revert had been released: https://github.com/rancher-sandbox/cOS-toolkit/actions/runs/1182076666

I can confirm it's solved, thanks!

Opened up a PR upstream to fix the issue, https://github.com/zcalusic/sysinfo/pull/31 for the moment being consuming the library fork in yip in the upcoming 0.9.9


Docker Work Directory

Hey Folks
The project does not currently have a working directory to be able to edit project files from the host, we need them to mount a volume in the compilation of the image.

Ref: https://docs.docker.com/engine/tutorials/dockervolumes/

If I understand correctly, you want to be able to mount the folder with the source so that you can make changes to it, correct?

@psanders of course, You can do it? I do not have much time


Restore margin between maintainer avatars

This fixes #1313
It also sets the max-height to 40px in the responsive view.
This is to make sure that the images always
stay square and do not become distorted (50px height vs 40px width)

This seems to add more horizontal spacing than vertical:

True! Good catch. I pushed a new version that uses flexbox which seems to work better. Would that be something that you can imagine using?

Thanks @k-nut! This looks good to me but @nlhkabu will need to approve.

Thanks! Sorry for the delay here, I've gone ahead and merged this, and tagged it so @nlhkabu can review it later.

:+1:  thanks for this PR @k-nut
Flexbox is indeed a good solution.  I'll let you know if we have any troubles when we cross browser test :)


Performance much worse in Windows than in WSL

Description
Executing the same Lean code ~200 times slower on Windows than on WSL.
Steps to Reproduce
Do Step 1, 2 & 3 in WSL and Windows. Step 1 & 2 show the raw issue, and Step 3 shows a somewhat minimized example.

git clone https://github.com/avigad/lean-auto.git
Open Test/Test_regression.lean, check the time took by the example

  -- In `Checker Statistics`, check that the `assertions` field is `1`
  set_option auto.optimizeCheckerProof true in
  set_option trace.auto.buildChecker true in
  example (h₁ : False) (h₂ : a = b) : False := by auto [h₁, h₂]

Create a new file in Test/ with the following content:

import Auto

open Lean in
def test : MetaM Unit := do
  let startTime ← IO.monoMsNow
  let expr := Expr.app (.const ``Not []) (.const ``True [])
  let _ ← Meta.withDefault <| Meta.whnf expr
  IO.println s!"{(← IO.monoMsNow) - startTime}"

#eval test

Check the output of #eval test. Then, replace the first line import Auto with import Lean, and check the output of #eval test again.
Versions
leanprover/lean4:v4.3.0-rc1
WSL: Ubuntu 20.04.6 LTS
Windows: Windows 11

Do you think you could minimize this so that all we need to do to observe the effect is run
git clone X
time lake build

on different OSs?

@semorrison I think I can't minimize it to bare shell command.
After further investigation, I found that the issue only occurs when I open the file in VSCode (probably indicates that the issue is related to lean server). Anyway, I've created a repo https://github.com/PratherConid/lean-perf. We can clone, build, and observe the time of lake env lean Perf/Test_Regression.lean using the following command:
-- Linux (I've only tested this on WSL)
git clone https://github.com/PratherConid/lean-perf.git
cd lean-perf
lake build
time lake env lean Perf/Test_Regression.lean
-- Windows
git clone https://github.com/PratherConid/lean-perf.git
cd lean-perf
lake build
Measure-Command {start-process (lake env lean Perf/Test_Regression.lean) -wait}

On my computer the running time does not show significant difference. However, if I open Perf/Test_Regression.lean in VSCode, there is significant performance difference between Linux and Windows.

% time lake env lean Perf/Test_Regression.lean
lake env lean Perf/Test_Regression.lean  16.28s user 1.59s system 96% cpu 18.538 total

However lake build on Windows fails with
ld.lld: error: too many exported symbols (got 76583, max 65535)

(This is https://github.com/leanprover/lean4/issues/2346.)
I'm surprised you could even get it to build at all on Windows!

My comment previously:
Note that lake build might fail because of linker failure, but that does not affect the latter lake env ....

(I think linker failure is irrelevant

On windows I get (after the linker failure)
> Measure-Command {start-process (lake env lean Perf/Test_Regression.lean) -wait}
Inhabitation
MonomorphizationWierdExample
DSRobust
CollectLemma
Skolemization
Extensionalization
UnfoldConst
Basic
HigherOrder
Polymorphic
MetaVaraible
TypeDefeq
DefinitionRecognition
Adhoc
Start-Process : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'FilePath'.
Specified method is not supported.
At line:1 char:32
+ ... mmand {start-process (lake env lean Perf/Test_Regression.lean) -wait}
+                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Start-Process], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.StartProcessCommand

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 43
Milliseconds      : 954
Ticks             : 439543499
TotalDays         : 0.00050873090162037
TotalHours        : 0.0122095416388889
TotalMinutes      : 0.732572498333333
TotalSeconds      : 43.9543499
TotalMilliseconds : 43954.3499

Yes. The output you get from linux/windows looks similar to the one I got.

@semorrison I saw you marked this issue as "invalid". Does that mean the issue description is not good enough? Or you cannot reproduce the issue? Note that the current issue is not the performance difference between the lake build or the lake env command on different OSs. The issue is that if we open Perf/Test_Regression.lean using VSCode on different OSs, there is significant performance difference elaborating the Lean file.
We can replace Measure-Command {start-process (lake env lean Perf/Test_Regression.lean) -wait} with Measure-Command {lake env lean Perf/Test_Regression.lean}. The latter does not produce the above error message.

Yes, I'm unconvinced there is a reproducible problem here that anyone could work with, particularly given the linker errors.

Isn't the linker error just from [default_target]ing the lean_exe, which is not relevant for the issue? If you move it to the lean_lib, I would hope the issue persists but without any build errors

For what it's worth, I have no idea why on Windows the server could be slower here than the cmdline...

I've moved [default_target]. Now the build error is gone and the issue persists on my computer. After
git clone https://github.com/PratherConid/lean-perf.git; cd lean-perf; lake build

the stats are as follows:

Linux, time lake env lean Perf/Test_Regression.lean

Auto found proof. Time spent by auto : 137ms
...
real    0m33.241s
user    0m21.840s
sys     0m0.933s

Linux, Server: 16 Seconds (stopwatch)
Windows, Measure-Command { lake env lean .\Perf\Test_Regression.lean }

Inhabitation
MonomorphizationWierdExample
...
TotalSeconds      : 62.8786204
TotalMilliseconds : 62878.6204

Windows, Server: 287 Seconds (Stopwatch)

I'm removing the invalid label based on the information above

I get
WSL 33s
Windows 38s
Windows language server 51s
so I think we can consider this issue nonreproducible; try checking your virus scanner etc?
The language server overhead could be independently investigated but likely is not limited to Windows.


allow specifying the Docker repo for 'tested_coq_opam_versions' for use in config.yml coq-action.yml

PR #57 adds support for the repo variable, allowing to specify a Docker repo other than coqorg/coq. However, this feature cannot yet be used with config.yml and coq-action.yml.
@erikmd , @palmskog I'm using neither Circle CI nor coq-action, so I would like to leave this to you.

Thanks @chdoc, I'll have a look.

I just opened https://github.com/coq-community/templates/pull/59 for the GitHub action
I'm not a Circle CI user though, so I'll let @liyishuai have a look if he can.

This was handled by #59 and #61, so closing.


Azure: cross subscription backups

What steps did you take and what happened:
Background: We have multiple AKS clusters in different subscriptions ( same tenant ). We are aiming for a single storage account were we can store backups from all clusters, in different buckets though.

The storage account resides in a subscription by it self.
Service principals are created in each subscription with a cluster and given contributor to the backup storage account and resource group.

The problem is we cant tell Velero that the resource group and storage account resides in another subscription than the service principal, even though it have access to the resource.
The output of the following commands will help us better understand what's going on:
(Pasting long output into a GitHub gist or other pastebin is fine.)
Tried to specify the whole path to the resource group:
time="2019-07-11T10:29:34Z" level=info msg="Checking that all backup storage locations are valid" logSource="pkg/cmd/server/server.go:431" An error occurred: some backup storage locations are invalid: error getting backup store for location "default": rpc error: code = Unknown desc = storage.AccountsClient#ListKeys: Invalid input: autorest/validation: validation failed: parameter=resourceGroupName constraint=Pattern value="/subscriptions/REDACTED/resourceGroups/REDACTED" details: value doesn't match pattern ^[-\w\._\(\)]+$
And when i just enter the name of the group:
time="2019-07-11T10:15:44Z" level=info msg="Checking that all backup storage locations are valid" logSource="pkg/cmd/server/server.go:431" An error occurred: some backup storage locations are invalid: error getting backup store for location "default": rpc error: code = Unknown desc = storage.AccountsClient#ListKeys: Failure responding to request: StatusCode=404 -- Original Error: autorest/azure: Service returned an error. Status=404 Code="ResourceGroupNotFound" Message="Resource group 'REDACTED' could not be found."
Environment:

Velero version (use velero version): 1.0.0
Kubernetes version (use kubectl version): 1.13.5
Cloud provider or hardware configuration: AKS

Is there an Update?

Also very much interested in this.


Feature/cu 1gpqtca onimaru fade shield

There is a Preafab call onimaru Shield, u just have to change it for VFXShield, and in the PlayerController you must change the Shield reference. With this, should be enought


Translate email errors

Hi,
I'd like to translate all the email error messages but I can't find the values or how to alter them anywhere. Is this at all possible and if so, could you point me to where to edit?
Regards,
Bas

The browser should automatically translate any built-in error messages depending on the locale of the user. Still, you can override type error messages by setting a data-type-error="Custom Error Here" attribute on the element. Same goes for any other error, like if the user didn't fill out a required field: data-required-error="Fill this out!"


Disable gopass update

The updater is insecure since it doesn't check signature of downloaded
binaries (which aren't signed at the moment). It shouldn't be used this
way to the quickest fix is to disable it for the time being.
Fixes #1675
Signed-off-by: Dominik Schulz<EMAIL_ADDRESS>

Codecov Report

Merging #1679 (3e5c727) into master (55ad6bd) will decrease coverage by 0.01%.
The diff coverage is 25.00%.

@@            Coverage Diff             @@
##           master    #1679      +/-   ##
==========================================
- Coverage   57.10%   57.09%   -0.01%
==========================================
  Files         205      205
  Lines        9804     9808       +4
==========================================
+ Hits         5598     5599       +1
- Misses       3540     3543       +3
  Partials      666      666

Impacted Files
Coverage Δ

internal/updater/update.go
31.85% <0.00%> (-0.72%)
:arrow_down:

internal/action/commands.go
100.00% <100.00%> (ø)

Continue to review full report at Codecov.

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

Codecov Report

Merging #1679 (3e5c727) into master (55ad6bd) will decrease coverage by 0.01%.
The diff coverage is 25.00%.

@@            Coverage Diff             @@
##           master    #1679      +/-   ##
==========================================
- Coverage   57.10%   57.09%   -0.01%
==========================================
  Files         205      205
  Lines        9804     9808       +4
==========================================
+ Hits         5598     5599       +1
- Misses       3540     3543       +3
  Partials      666      666

Impacted Files
Coverage Δ

internal/updater/update.go
31.85% <0.00%> (-0.72%)
:arrow_down:

internal/action/commands.go
100.00% <100.00%> (ø)

Continue to review full report at Codecov.

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


Audit: Bid1155Contract Missing zero check

Missing zero address check for _collectionAddress parameter in the SellNFT_byBid() function. Also there are missing zero value checks for _price and _amount parameters in the same function.

#58 @techpandora @kishan79 @vishaldantuluri

@parva-jain @vishaldantuluri Can we please review it ?

Zero checks can be done in the frontend as adding more require statements will increase contract size which is already exceeding here @techpandora


repetiton_penalty and logits_bias just using logits_processors

Continuation of #983.
This PR refactors the repetition_penalty and logits_bias logic to utilize the new logits_processor argument. These changes:

Reduce complexity in the generate_step method
Modify the logits_processor type to accept a list of functions, enabling chained processing

These enhancements allow for more flexible and modular logit processing while simplifying the generation code.

@nathanrchn & @awni Can DRY sampling be incorporated using this mechanism (I'm interested in creating a PR for it)?

Yea I think it should work well.


Decouple Turbo tasks from package.json scripts And allow more automation

Describe the feature you'd like to request
I've been thinking about this for some time now. The idea keeps nagging me. Imagine - I have a dts task that I can run for every package in my monorepo, but that task doesn't have any value for the end user (read developer in a team using the monorepo) by itself - meaning user will never run that task manually via turbo run or pnpm run. The task is needed to run another dts-bundle task - essentially dts produces an intermediate artefact that allows dts-bundle that depend on it to succeed without errors. Now the problem is that dts-bundle needs to run dts for all dependencies.
This seem to work nicely:
  "pipeline": {
    "dts": {
      "inputs": [...],
      "outputs": [".tsc-out"]
    },
    "dts-bundle": {
      "dependsOn": ["^dts"],
      "inputs": [...],
      "outputs": ["dist/**/*.d.ts"]
    },
  }

But little issues creep up - mostly scalability:

Every package has to have that dts task declared in package.json scripts - it probably wouldn't make sense to have to copy-paste it everywhere since the task is basically single script that can work in every package sub-folder and produces output in that package sub-folder, but has no input other than source code and doesn't need any configuration on per package basis
The dts task must be run for every dependency of a package where we about to run dts-bundle, but a developer might forget to add a script to package.json for one of those dependencies - when adding that dts script they might also make a mistake and pass wrong parameters or things like that
When a developer decides that they want to start using dts-bundle for their package they have to go and check every dependency and whether that dependency has dts task declared. Hopefully it's very easy change and a quick PR away, but those packages could be owned by other teams.

In addition to that it's also possible that inputs of some other build task in one package is different to another package's inputs. But the fact that those differences should be specified in the root of the monorepo in a single file is kind of limiting.  If we look at monorepos with huge number of packages I feel single turbo.json might become a bottleneck (with some merge issues maybe even?). Sometimes a script can determine those inputs/outputs programmatically and can operate in the entire monorepo for any sub-package. E.g. I imagine a script could determine all the dependent *.ts files imported and build a graph of files that it depends on (inputs) - and that would probably be more efficient than using globs like src/**/*.ts that could hit hundreds of files.
Another script could determine which dependencies need to have dts task run and which don't. There is generally a lot of things that can and should be automated and turbo doesn't provide too much here. The CLI could be considered as API and turbo.json can be generated - but it makes it harder to use hybrid approach - use ability of the turbo to cache and also allow devs to use turbo.json without having to deal with a script.
Describe the solution you'd like

Allow specifying commands right in the turbo.json, example:

  "pipeline": {
    "dts": {
      "command": "node ./monorepo-scripts/generateDts.js",
      // ^-- no need to copy-pasta in every package
      "inputs": [...],
      "outputs": [".tsc-out"]
    },
  }

turbo would assume the command exists in every package as if it was added to every package's scripts config.

Allow passing location of a custom turbo.dts.json file OR preferably - allow it to be passed as stdin. If location of the turbo.json implies root of the monorepo we could also add extra parameter or assume it's cwd. This will make turbo super powerful tool that would allow caching any task - whether it can be described by turbo.json manually or generated by a script.

Both of the above seem like a simple change on the surface. But there must be some caching implications. E.g. we would need to store hash of the stdin config somewhere which could serve as a cache key for the rest of the data associated with the run ...
Describe alternatives you've considered
Generating turbo.json is possible, but writing scripts to every package.json - seem like a less desired path as it's often modified manually.

@zaripych in the meantime, here’s a workaround for you.
In my projects, I have been duplicating package scripts just as you described.  But, I try to abstract away all of the details.  I have many package.json files that look like:
{
  "scripts": {
    "turbo:build": "../../../bin/nextjs/build",
    "turbo:clean": "../../../bin/clean/all",
    "turbo:dev": "../../../bin/nextjs/dev",
    "turbo:test:ci": "../../../bin/jest/ci",
  }
}

The only thing is, most packages have 40+ scripts, not 4.
I find that abstracting the scripts into a common bin folder helps a lot.
As my monorepo has grown, I have different types of packages.  Some for nodejs, some for reactjs, some for apps, some for configs.  There’s only a few scripts that are actually run in every single repo due to turbo disallowing circular dependencies.  This abstraction allows me to group sub-packages and sub-apps like packages/reactjs/* or apps/nextjs/*.  Plus, I can exclude config packages altogether by just not including the script.  Lastly, it still lets me run scripts very easily in just the package or two that I’m working on via npm run <script>, without having to specify filter each time in the package root.
As for ensuring every package has a particular script, I find that using a template generator is awesome (see plop and hygen).  Or, writing a short script in bash or the language of your choice is straightforward.
Anyway, the developer experience of turbo is interesting to explore.  Reminds me of:

https://github.com/vercel/turborepo/issues/1412
https://github.com/vercel/turborepo/issues/1254
https://github.com/vercel/turborepo/issues/749

While I prefer convention over configuration too, it’s important not to become overspecialized and ensure exceptions can be specified.

@jlarmstrongiv Actually, already doing that. I have a dev package that is mounted as devDependencies to the root of monorepo and has bin's exposed and available to every sub-package. So no need to "../../thing" I just add it as "thing". It's all same shared scripts for every package that use same bespoke monorepo configs/conventions/tools.

The only thing is, most packages have 40+ scripts, not 4.

That's a lot.

Plus, I can exclude config packages altogether by just not including the script. Lastly, it still lets me run scripts very easily in just the package or two that I’m working on via npm run

Actually, already doing that. I have a dev package that is mounted as devDependencies to the root of monorepo and has bin's exposed and available to every sub-package. So no need to "../../thing" I just add it as "thing". It's all same shared scripts for every package that use same bespoke monorepo configs/conventions/tools.
FYI - I was annoyed and fixed that by wrapping standard turbo bin with my own. Now I can run it in sub-packages.

Very cool!  I like those workarounds.
I wonder if it should be a broader discussion on turbo UX.  Discussion points include:

avoid defining scripts in the turbo.json (https://github.com/vercel/turborepo/issues/749 and https://github.com/vercel/turborepo/issues/1254)
avoid defining duplicate scripts in the package.json (https://github.com/vercel/turborepo/issues/1495)
ability to run common turbo tasks anywhere (https://github.com/vercel/turborepo/issues/1412)
ability to run a common turbo task in a package without defining it in scripts
configure the cache and exceptions to particular commands (https://turborepo.org/docs/core-concepts/caching and https://turborepo.org/docs/core-concepts/filtering and package#build)

group common turbo tasks by subfolder (like apps/nextjs/* or packages/reactjs/*)
group common turbo tasks by npm name prefix (@apps/*)

keep turbo fast by avoiding js/ts config files https://github.com/vercel/turborepo/issues/899
support scripts from other languages https://github.com/vercel/turborepo/pull/1361#issuecomment-1157128621

How would that look?  Curious what your thoughts are on it.  There’s a lot to think about and there are tradeoffs in choosing what to support too.

Ok. I'm talking about different tasks that do not belong in scripts of a package but which I still want to cache and benefit from turbo. Developers won't ever care to run them manually.

I think there are use cases where devs would want to run some common scripts manually in a package.  Examples https://www.npmjs.com/package/sort-package-json and https://www.npmjs.com/package/typesync

package1#build, ... package200#build

Definitely don’t want that, and hopefully https://github.com/vercel/turborepo/issues/1161 will solve that.

As a shorter term solution (until turbo supports additional config for this in turbo.json), when turbo doesn't find a task in a package's package.json scripts, can it then check if a command with that name exists in the context of that package?
If making it possible to declare this for all packages in turbo.json is far away in the turbo roadmap, then maybe a quicker change might be for turbo to do something similar to yarn bin $TASK_NAME within each package to discover commands provided by devDependencies for tasks when corresponding scripts are omitted.
For example, suppose your turbo.json defines a test task that depends on test-unit and test-ui, but you don't want to repeat this for every package.json:
"scripts": {
  "test": "true",
  "test-unit": "jest --passWithNoTests",
  "test-ui": "our-custom-ui-testing-script",
  ...
}

Today you can already define a package like @zaripych mentioned providing executables with the same names as those scripts/tasks, so your package.json files become:
"scripts": {
  "test": "test",
  "test-unit": "test-unit",
  "test-ui": "test-ui",
  ...
}

Running yarn bin test-ui yields $PWD/node_modules/.bin/test-ui, or $REPO_ROOT/node_modules.bin/test-ui (when hoisted), or a virtual path (when using yarn berry/v3 pnp), or some other place.  Either way, turbo should be able to use that, since yarn already does: you can run yarn test-ui in the example above without the entry in package scripts.

Another use case to throw in here is in our project in each package.json I have a script "build": "yarn build:node && yarn build:browser && yarn build:types".
It would be nice if I could tell turbo that build depends on build:node, build:browser, and build:types but that it shouldn't actually run build.
Currently I just use a different fake name for the build task for each package, _build.

../../../bin/some-script

I wanted to share a new approach I am using for these cases: bin scripts.
Turbo already recommends having “config” packages (example: eslint-config). I then have the root package depend on the config as a dev dependency. Thus, instead of having a root bin directory and using ../../ to access it, I have the config package publish a bin script itself.
After some self-bike-shedding, I arrived at *x naming convention: something simple (one extra character), somewhat valid naming (x for eXtended), and still showcases the underlying script (which I found helpful, because I have multiple linter tools).
Then, in each workspace/sub-package I can replace eslint <args> or ../../bin/lint <args> with eslintx <args>.

Code example.

eslint-config’s package.json
{
	// normal package.json stuff...
	"directories": { "bin": "bin" }
}

eslint-config’s bin/eslintx (swap the command invocation with whatever you want)
#!/bin/sh
eslint -f pretty "$@"

some other package’s package.json
{
	// normal package.json stuff...
	"scripts": {
		// other scripts...
		// before
		"lint": "eslint -f pretty ."
		// after
		"lint": "eslintx ."
	}
}


Updated denon-client to fix ZONE2 issue

I was having this weird behavior with denon-client 0.2.0 where Roon would set ZONE1 to stand by, but would turn ZONE2 on. Updating the library seemed to fix it.

Hi Arthursoares,
I have the same problem with Zone 2 and would like to use your fix. I have almost no Git/Docker Know-How. I just loaded the Extension from Docker https://hub.docker.com/repository/docker/jcharr1/roon-extension-denon as container on my Synology Diskstation and run it. How can I add your improvement?
Thanks in advance, Henrik

Hi guys. Sorry this took so long. I didn't realize I didn't have notifications turned on for this repo. I've merged the PR and pushed the new image to Docker Hub.


Get all products from categories

I am creating an autocomplete that shows the categories, I would like to bring all the products related to the category. The problem is that I can only find the products to the assigned category but it does not bring me the products if it is a parent category, I understand that it is my code that is wrong.
For example, the gaming category (parent) shows 0 products, and the playstation category (child) shows 1 product, can someone help me solve this?
Parent category 'gaming' 0 product

Child category 'playstation' 1 product

Controller

Model

What I need is that you bring me the products of the category and their descendants, thanks.

This might be within the scope of the parent package https://github.com/lazychaser/laravel-nestedset


The game crashed whilst there was a severe problem during mod loading that has caused the game to fail Error: net.minecraftforge.fml.common.LoaderExceptionModCrash: Caught exception from HBM's Nuclear Tech Mod (hbm)

Short Description
A short description of circumstances under which the crash happened.
For example: "I executed the command ... and it crashed the game"
To Reproduce
Steps to reproduce the behavior:

Go to Minecraft
Click on Forge
Crushed
See error

Crash Report
https://pastebin.com/qP8C6jrU
Additional Notes
Add any other notes about the problem here.

Hey thanks for submitting the issue!
The crash report you subitted is not very telling... Could you please submit the crash report from minecraft itself? You can find it under .minecraft/crash-reports.

Crush information has been corrected.

Hmm I don't see any mention of Survival Inc. in the crash report. Are you sure this is related to Survival Inc?


Need to update Orion site config for GNU - use openmpi instead of mpich

The acceptance testing for skylab-1.0 showed that gnu+mpich is several times slower than gnu+openmpi. Both of them were installed by the Orion sysadmins. The mpich installation also has the pmi and slurm dependency hardwired in, which means that any executable that gets linked against mpich mpi must run on a compute node using srun. The openmpi installation doesn't have the restriction, one can use both srun or mpirun.
Therefore we need to update Orion site config for GNU to use openmpi instead of mpich.

Closed via #244


Specify slurm_cpus_per_task env for long runs

Yesterday's long run (with multi-threading enabled) is taking much longer than the single thread case. This PR specifies the slurm_cpus_per_task env for the long runs.

bors r+

bors r-

bors r+

bors r+


Feature/Replace Generic Deriving with Template Haskell

replaceing Generic Deriving with Template Haskell
instead of GQLType instances

-- object
data Deity = Human
  { name :: Text
  , power :: Text
  } deriving (Generic)

instance GQLType Deity where
  type KIND Deity = OBJECT

-- union
data Character = CHuman Human | CDeity Deity
  deriving (Generic)

instance GQLType Character where
  type KIND Character = UNION

-- input object
data Coordinates = Coordinates {
  latitude :: Int
  longitude :: Int
}  deriving (Generic)

instance GQLType Coordinates where
  type KIND Coordinates = INPUT_OBJECT

-- enum
data City = Athens | Colchis
  deriving (Generic)

instance GQLType City where
  type KIND City = ENUM

you just use gqlType , gqlInput , gqlEnum , gqlUnion, gqlScalar

-- object
data Human = Human
  { name :: Text
  , home :: City
  }

gqlType ''Human

-- union
data Character = CHuman Human | CDeity Deity

gqlUnion ''Character

-- input object
data Coordinates = Coordinates {
  latitude :: Int
  longitude :: Int
}

gqlInput ''Coordinates

-- enum
data City = Athens | Colchis

gqlEnum ''City

advantages:

shorter code
schema will be generated and fully validated on compile time
imported ../schema.gql and native haskell types will be derived with same code.

disadvantages:

?

Most peoples' complaints with template haskell is the longer compile times. I haven't really had an issue but thought I'd bring it up.

obsolute


Arduino Library Update to $GITHUB_SHA

Automated update of the Arduino library package
Please review changes.

Test PR, closing with no intention to merge


website down?

doesn't seem to be working for me.
i had a note for myself from 2015 to check out this site, can't remember where from or why :)

It is down! Sorry about that. In the meantime check out HaskAnything by @beerendlauwers. They have a dump of the old dohaskell content, but I'm not sure if it's been integrated into the site yet.

cool, thanks!

Hi @mjhoy, we're working on importing this data set, see issue https://github.com/beerendlauwers/HaskAnything/issues/33.
@duplode has already provided some awesome scripts to transform the data into the HaskAnything format (which is essentially the Hakyll/Jekyll format).
I haven't managed to get around to doing the actual import, and there's around 1/8th of the data set left over that are not yet mapped to the HaskAnything format (see https://github.com/duplode/dohaskell-to-haskanything-wip/blob/master/sample-output/leftovers.yaml). We'll want to decide how to map WikiBooks and textbooks to trim down that file enough that we can go through it by hand.


test EXPIREAT

Please add description to the PR.

Please add unit tests. Please refer core/eval.go.

请添加单元测试。请参阅core/eval.go。

expireat_test.go
func TestEvalEXPIREAT(t *testing.T)

issue 283

This feature was added in #338.


Minimap does not show selected section of code

VSCode Version: Code 1.12.2 (19222cdc84ce72202478ba1cec5cb557b71163de, 2017-05-10T13:16:25.899Z)
OS Version: Linux x64 4.4.0-78-generic
Extensions:

Extension
Author
Version

EditorConfig
EditorConfig
0.9.3

php-formatter
Sophisticode
0.2.4

githistory
donjayamanne
0.2.0

gitlens
eamodio
3.5.1

vscode-great-icons
emmanuelbeziat
2.1.5

php-debug
felixfbecker
1.10.0

php-intellisense
felixfbecker
1.2.2

rest-client
humao
0.14.4

Steps to Reproduce:

File -> Preferences -> Settings
set this preference: "editor.minimap.enabled": true
In any file, select a section of code. The selected section does not appear on the minimap.

I guess you said that the selected highlight effect is not rendered in minimap, rather than the selected part being removed from minimap, is right?

https://github.com/Microsoft/vscode/issues/20853#issuecomment-282139402 said this.

#20934


Proneness to low/high power supplies

How does the device behave if a user (or potentially malicious actor) supplies extremely low or extremely high voltages?

Need to look at the register settings but based on the datasheet for the Atmel M90E26(Section 2.3.2),the chip has a voltage sag detection property that can detect low voltage. Voltage sag is detected when voltage is continuously below the voltage
sag threshold for one cycle which starts from any zero-crossing point. The voltage sag threshold is set in the M90E26 register. If not enabled, the voltage sag will be disable during power on.
When the supply to the meter is below the defined threshold, the m90e26 will set the SagWarn bit and this will cause the IRQ that connects the main microcontroller (STMxx) and M90E26 to be high. This can tell the microntroller that something has happened in the meter and needs to be checked. It can also be used to call other functions like turning the relay off and cutting supply to the customer.


Serve the frontend on port 80/443

Right now the web service has to be accessed on port 30443. This should be on port 8-/443 for a better user experience.

We are using the NGINX Ingress Controller (NIC) for providing external client connections to k8s services. Our k8s configuration is termed "bare metal" because we are running our own k8s service as apposed to using a cloud provided k8s such as Amazon EKS, Google Cloud Platform, etc. These cloud based k8s services a load balancer that is in front of their k8s service. We do not have a load balancer that is external to our k8s.
The documentation for NIC summarizes some options for enabling access to k8s services for bare metal configurations here. We are using the NodePort option which is why port 30443 has to be specified for URLs that access k8s services. Notice the recommendation to not reconfigure k8s to allow NodePort on 80/443.
There are other options described in this document, but I believe the preferred one is the self-provisioned edge, which is a reverse proxy in front of our k8s cluster that routes traffic to the NGINX NodePort.
@mbjones @ThomasThelen
Do y'all have other options or thoughts on the ones mentioned here?

Heya @gothub, thanks for chiming in here. We're eager to get this and other services talking on 80/443.
I read the links above and did some of my own research and I agree with you that this is how it's done. Two other write-ups indicate that your conclusion is correct:

https://itnext.io/bare-metal-kubernetes-with-kubeadm-nginx-ingress-controller-and-haproxy-bb0a7ef29d4e
https://techbeacon.com/devops/one-year-using-kubernetes-production-lessons-learned

The single point of failure part is a bummer but I also realize the UCSB network is likely to go down more than any load balancer VM we put up.
If we went with this approach, do you feel like we have next steps for making the production and development clusters available on 443/80? I'm happy to help out where I can, though I'm still coming up to speed on all this.

All of that does indeed sound like it requires an HA Proxy or similar external service.  However in one last gasp I thought I would describe what I've been doing locally and see if it might work for us. There's probably some issue you have all considered already, but I thought I would at least raise this approach.
I have installed the nginx-ingress controller locally on my Docker Desktop instance, and have been able to get an externally routed service available via an Ingress. It seems to do the job, but I am probably missing something. In this case, the Deployment is a node app on port 8080, the Service is configured to serve that targetport 8080 on port 80, and the Ingress is set up make that available on the host dev.magisa.org (on my network behind my NAT).
I installed the NGINX ingress controller in my default namespace ahead of all of this using its helm chart, like so from the ingress-nginx docs:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install ingress-nginx ingress-nginx/ingress-nginx

Here's the configuration file I used with kubectl apply -f:
---
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: hello-kubernetes
  name: hello-deployment
  labels:
    app: hellodemo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hellodemo
  template:
    metadata:
      labels:
        app: hellodemo
    spec:
      containers:
      - env:
        image: gcr.io/google-samples/node-hello:1.0
        imagePullPolicy: IfNotPresent
        name: hello-deployment
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: hellodemo
  name: hello-service
  namespace: hello-kubernetes
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: hellodemo
  sessionAffinity: None
  type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: hello-ingress
  namespace: hello-kubernetes
spec:
  ingressClassName: nginx
  rules:
  - host: "dev.magisa.org"
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: hello-service
            port:
              number: 80

When I access http://dev.magisa.org/ the app works. Is this helpful? What else do we need?

@mbjones @amoeba The service shown above is 'ClusterIP', so I'm not sure how it is providing external connections without NodePort, maybe Docker is using iptables in the background for this to connect the external port to the internal network. I'm not sure how to replicate this in k8s.
The k8s config for the nginx-controller is:
# Source: ingress-nginx/templates/controller-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  type: NodePort
  ports:
    - name: http
      port: 80
      nodePort:30080
      protocol: TCP
      targetPort: http
    - name: https
      port: 443
      nodePort: 30443
      protocol: TCP
      targetPort: https

The nodePort:30443 could be changed to nodePort:443 with a reconfiguration of k8s, but as mentioned in the NGINX docs referenced about, this isn't recommended:
While it may sound tempting to reconfigure the NodePort range using the --service-node-port-range API server flag to include unprivileged ports and be able to expose ports 80 and 443, doing so may result in unexpected issues including (but not limited to) the use of ports otherwise reserved to system daemons and the necessity to grant kube-proxy privileges it may otherwise not require.
This practice is therefore discouraged. See the other approaches proposed in this page for alternatives.

I could try this out on dev k8s and see how it goes, or test any other config that y'all can recommend for the ingress controller.

Well, I am unclear how it works (k8s networking is beyond my ken), but I do know that 1) I did not configure it with NodePort, and 2) I can access it from another machine on my local network using the IP address of my laptop (not the internal IP addresses that k8s allocates). This is why I thought this might be a viable approach. I read all of the documents you sent before, including the ones you just repeated, and I agree they seem to say it is not possible. But, I also have noted that kubernetes documentation often lags its features by 6 months, and blog posts from a year ago are frequently no longer correct. So, some degree of empiricism is I think required in what works. Can you t least try the approach I outlined and see if it works? The hello-world example that I set up only takes a few minutes to try out, and might be instructive. Of course, it does depend on having the nginx controller set up the same way, which might be different from how it is now installed on the clusters. Maybe worth a try?

Yes, I'll try the approach you outlined on the dev k8s cluster and report back here.

The NGINX Ingress Controller deployment has been modified and tested on k8s using the hostPort mechanism to specify that the NGINX pod is connected directly to the host machines port 80 and 443, without a k8s service using the 'NodePort' mechanism. This approach, on dev k8s, is currently working - providing external connections to port 80, 443, for example:

https://api.test.dataone.org/bookkeeper/v1/quotas
https://api.test.dataone.org/quality
https://stage.gnis-ld.org/

Note that no NGINX k8s service is running, which was required for the previous configuration.
Also, it may be necessary to specify a k8s 'host affinity' so that NGINX pod is scheduled to run on the node that the DNS name points to, i.e. for dev k8s docker-dev-ucsb-1.test.dataone.org which the DNS name api.test.dataone.org points to, so that the correct node's ports 80 and 443 are connected to the NGINX pod.
To enable this change, the NGINX controller-deployment.yaml was modified to simply add the hostPort to the ports: section:
spec:
  ...
  selector:
  ...
    spec:
      ...
      containers:
      ...
          ports:
            - name: http
              containerPort: 80
              hostPort: 80          <<< new line
              protocol: TCP
            - name: https
              containerPort: 443
              hostPort: 443          <<< new line
              protocol: TCP
...

The official k8s documentation doesn't mention the use of hostPort, except to say don't use it unless you have no other choice: https://kubernetes.io/docs/concepts/configuration/overview/
Examples of using this approach are described here:

https://alesnosek.com/blog/2017/02/14/accessing-kubernetes-pods-from-outside-of-the-cluster/
https://downey.io/blog/skip-kubernetes-loadbalancer-with-hostport-daemonset/

Regarding the use of hostPort - additional steps that may be required for use in a multi-control node setup:

update the controller-deployment.yaml so that the number of replicas matches the number of control nodes. This will ensure that if the active control node changes, the NGINX Ingress Controller running on that node will be available to receive traffic
update the 'node affinityfor NGINX Ingress Controller so that these pods will only be scheduled on the control nodes, which will have anode label` defined for them. This approach is described here.

We have https://gnis-ld.org/ up and running, but we need to deploy an official tag on it (not related to this issue). Thanks all for the help in getting this put together!


sap_maintain_etc_hosts: no longer use the ansible.utils.ip test

We should avoid using non-ansible.builtin code wherever possible so we reduce the number of dependencies.

The source of the ansible.utils.ip test is here: https://github.com/ansible-collections/ansible.utils/blob/main/plugins/test/ip.py

Closed by https://github.com/sap-linuxlab/community.sap_install/pull/669.


Monica/ui updates

Wasn't able to test new live indicator positioning with "on time" and "late - 1:18 PM" b/c for some reason all the routes would return null delay at this time. But pretty sure it works.
LiveIndicator has written to take into account the size and scale self accordingly

tested my positioning of LiveIndicator with "late - 1:18 PM" and it worked


two mppt tracker with one esp32 possible

Hi,
did you know whether there are enough CPU resources for two seperated mppt tracker running in one esp32?
best regards
Jochen

Hi Jochen,
yes should be feasible. Current update rate is about 200 Hz without telemetry.
Adding more channels will lower the rate, trading in for V_out control speed.
I'll add this to the todo list.
Also want to do cpu profiling, to find out the critical parts. Maybe its worth switching from float to integer arithmetic

Hi,
I'm I'm very interested with even more...
On my yacht I have four solar panels installed on deck. Due to yacht nature heel & pitch & roll and lot of obstacles shading different parts of random panels each panel is working on his very own PP. I think that ideal solution would be four separate MPPT controlers with outputs connected in parallel. Maybe increasing clock of esp32 to 240MHz and changing math to integer will give enough power to have one esp32 with four MPPT?
I'm ready to jump into that project.
ps
Asked on oryginal instructables but looks that project is not very active


Remove usage of werkzeug.urls.url_encode

Replaces it with urllib.parse.urlencode. Fixes #1910.

I don't get why this "AttributeError: module 'PyQt5.QtCore' has no attribute 'Slot'" is happening here, but not on develop. I did not change anything remotely related to that and PyQt5.QtCore simply does not have this attribute. See: https://stackoverflow.com/questions/50459672/attributeerror-module-pyqt5-qtcore-has-no-attribute-slot
Both CI runs report the same pyqt version though...

OK, so it looks like the Slot attribute must be coming from
lib/python3.10/site-packages/matplotlib/backends/qt_compat.py
94:        QtCore.Slot = QtCore.pyqtSlot
106:        QtCore.Slot = QtCore.pyqtSlot

in the CI run on develop. I am not sure why that is used in develop but not in this PR pipeline though.
Anyway, I think we should change all occurrences of QtCore.Slot to QtCore.pyqtSlot.

>>> werkzeug.urls.url_encode({"test": None})
''
>>> urllib.parse.urlencode({"test": None})
'test=None'

That's the difference causing our tests to fail.

>>> werkzeug.urls.url_encode({"test": None})
''
>>> urllib.parse.urlencode({"test": None})
'test=None'

That's the difference causing our tests to fail.

Good catch !

@joernu76 when this is merged we need to patch our server


footer-on-all-pages

Fixes #280
Description -
Instead of adding the NewFooter component on each page. It has been added to only main.jsx at the client root directory.
Verification -
Step 1 - Find the file at Client > src > components > NewFooter.jsx > Footer
Step 2 - Alt + click to check the usage of the footer component

Hey, the whitespaces and quote formatting made too many changes and made it difficult for us to check on this. We're implementing prettier for this. Join us on discord for further discussion.

We apologize for the modifications made to the website, rendering this PR inappropriate. Could you please provide us with a new one or suggest necessary fixes?


forecasting future using autoformer

Hello, Thank you for your amazing work. I was wondering, is it possible to use Autoformer to forecast the future unknown values based on previous predictions and trends. Something similar to this:

How can I achieve this ?

sure, you may find the predict function in line 272 helpful https://github.com/thuml/Autoformer/blob/main/exp/exp_main.py


Feature request: Custom Circuit Breaker strategy

I really like the Circuit Breaker feature in MT. In my application the queue consumer uses hardware equipment to satisfy the requests. This piece of hardware is used to execute requests coming from various queues and it is therefore difficult to setup parameters (TrackingPeriod, TripThreshold, ActiveThreshold, ResetInterval) of the existing Circuit Breaker that work well globally for all of them.
Instead of trying to manage the parameters on per-queue basis I'd like to make use of the result of custom periodic monitoring that is in place for the hardware equipment in question to decide whether the Circuit Breaker should be open or closed (i.e. if the hardware equipment is in failed state it doesn't make sense for me to wait until the Circuit Breaker trips for all queues my application is subscribed to -- I could immediately react by opening the Circuit Breaker for all of them).
From implementation point of view I'd like to propose something ICircuitBreakerStrategy that would be passed to Circuit Breaker during its construction and Circuit Breaker could call a callback method on that Interface (let's call it ShouldCircuitBreakerOpen()) returning bool to signal whether the Circuit Breaker should open or not.
I could make use of such a facility by creating my implementation of such ICircuitBreakerStrategy interface that would make use of existing monitoring of the hardware equipment in question and could let the Circuit Breaker in MT know when it should stop taking requests from the queues.
I am not bound to this particular design. Any other configurable Circuit Breaker would be more than welcome (I just need to be able to control the decision logic from my code). I assume such an interface could allow other users to implement other Circuit Breaking strategies than the only one that is currently offered by MT.

I'm going to close this, the notes will be used for future designs around this however.


It has since added autocycle, why not autostart?

Function useful for some people, I ask you to consider, in the same manner automatically disabled.

This feature is extremely low priority, it is not needed for scrimmage plugins.

We also have /ready, which will auto start the match once the teams are ready.

Yeah, are useful things, basically missing features

@Jair07mx Having /ready starting the match is enough, autostart isn't needed, therefor autostart isn't a missing feature.


Fix StreamingClient

#974 changed vumi.transports.vumi_bridge.client.StreamingClient's constructor in a way that breaks vumi-go's HTTP API application worker.

:+1:
This is only for the deprecated streaming API, correct?

Yes, specifically its tests.


Improve lss_theory

A possibly not complete list of things that should be implemented in lss_theory.py is:

[ ] generalize to correlation functions. This is not currently in CCL, but will soon be
[ ] convolve multipoles with window function (currently C_ell only computed at band centres)
[ ] add flags for RSDs and magnification (magnification bias should then be passed as parameters too)
[ ] implement a cleverer/more general way of passing parameters (?)
[ ] make bias interpolation order a parameter (?)
[ ] make sure we're happy with the way bias parameters are currently being passed
[ ] do we want to start implementing other tracers (e.g. cmb, lensing...)?
[ ] benchmark likelihood evaluation

I imagine the answer to the penultimate one is no.
Regarding the last one: currently the bottleneck is the calls to CCL (which is good news). Within CCL, if you use a fast power spectrum (e.g. Eisenstein & Hu or BBKS), the bottleneck is the LOS integrals. If you use CLASS, the bottleneck is actually the call to CLASS.

What does the second point mean exactly ? Sky window or redshift window ?

Basically, after having deconvolved any sky mask/weights/contaminants you'll be left with an estimate of the power spectrum at certain ells which is a convolution of the true C_ell with some window function (in ell). SACC has some capability to store these, but we're not using them (we just assume it's enough to evaluate the theoretical C_ell at the centre of each bandpower).
This is probably not a super bad approximation, so I would focus on the other tasks for the time being.


Updated accumulo (software)

Authored by<EMAIL_ADDRESS>
accumulo: Accumulo is a sorted, distributed key/value store  that provides robust, scalable data storage and retrieval.
--
Automated submit by PRB0t

Test


update torbrowser

Thanks!!!!
On Mon, Oct 2, 2017 at 1:13 PM, Christian<EMAIL_ADDRESS>wrote:

Merged #301 https://github.com/jessfraz/dockerfiles/pull/301.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/jessfraz/dockerfiles/pull/301#event-1274454799, or mute
the thread
https://github.com/notifications/unsubscribe-auth/ABYNbMwqYQA-S6GflISwmAkVGYICMhFtks5soRmngaJpZM4Pq9F-
.

--
Jessie Frazelle
4096R / D4C4 DD60 0D66 F65A 8EFC  511E 18F3 685C 0022 BFF3
pgp.mit.edu http://pgp.mit.edu/pks/lookup?op=get&search=0x18F3685C0022BFF3


readme seems to have an error.

press the configure button followed by the generate button (the first time, you will be asked which makefile style to use)
the configure button and the generate button may shoul be be switched.

The "Generate" button should be pressed at the end, so the instruction is correct:

press "Configure"
set parameters
press "Configure" again
perss "Generate"

mshabunin thank you very much.


Q3. Remove "other" button.

There is no "Other" for these ages. The other options cover all possibilities.

Sorry, I don't understand this comment. Someone pointed out that we already have all possibilities covered with <20 and 60+ so "other" button is redundant. Does that help?

Option for "Other" has been removed. :)


Fix discovered artifact paths on Windows

Gem::Compiler::compile computes target_dir via Dir.mktmpdir, which returns a path containing components such as C:/Users/MIKEBL~1 to represent path components containg spaces such as  C:/Users/Mike Bland.
The artifacts in Gem::Compiler::compile are computed using Dir.glob, which will expand path C:/Users/MIKEBL~1 to C:/Users/Mike Bland.
Consequently, passing target_dir to path.gsub results in the path remaining the same:
  1) Failure:
TestGemCompiler#test_compile_bundle_artifacts [c:/src/gem-compiler/test/rubygems/test_gem_compiler.rb:109]: Expected ["C:/Users/Mike Bland/AppData/Local/Temp/d20160208-1672-1fuqr19/foo-1/lib/foo.so",
 "ext/foo/mkrf_conf.rb",
 "lib/foo.rb"] to include "lib/foo.so".

This change applies Dir.glob and File.join to target_dir to update the path components properly and fixes the test on Windows.
BTW, I tried running the tests on OS X 10.11.3, Ubuntu 14.04, and FreeBSD 10.2-p9, and all three reported errors such that rake-10.5.0 was missing, despite the fact that I did a bundle install and bundle exec rake build. I'm using rbenv, but even switching to the system Ruby on OS X (2.3.0 via Homebrew) didn't seem to help. Happy to open an issue with detailed output if desired.

Huh, the one build failure resembles the failure I was talking about, so there's your stack trace+bug report. :smiley:

Thank you @mbland !!! :heart: :heart: :heart:
The failure on 1.9.3 seems to be related to recent RubyGems upgrade (2.5.2) that might be causing the issue (there was a known 2.4.x issue that was broken in 1.9.3, was supposed to be fixed)
Considering 1.9.3 has been EOL for quite some time, guess is time to focus on other versions instead :wink:
Will take a look to your pull request more closely later today and let you know, as I need to check against latest releases on Windows.
Once again, thank you for taking the time and sending this pull request!

Hello @mbland
Please accept my apologies for delayed response. $work has been a bit more busy over the last few days.
Will take a look to this issue this weekend.
Cheers.

No worries! I'm not in any kind of a rush. :smiley:

@mbland can you rebase against latest master? For next version I'm dropping support of any Ruby older than 2.0.0, so it should fix AppVeyor error.
Once tests pass, will merge this in.
Thank you.

Hello @mbland, took another approach to this and instead of doing that decided to File.expand_path the temporary directory being created.
Can you check against master and let me know if this solved your issue?
Thank you.

Hi @luislavena, sorry for the delay. I did just try it out, and opened #19 to fix the issue I found.


Write characteristic issue with control characters?

I'm not sure if this is related to issue #38 because I don't have a Java error. However it seams that the write to characteristic command is not working.
I can connect to the device (an echelon bike) and receive notification but when sending the initialization sequence, the bike does not react. (The same initialization sequence is working fine with a Nodejs setup)
I tried byte array
byte[] init3 = { 0xF0, 0xB0, 0x01, 0x01, 0xA2 };
I tried encoding a String
string init3 = "\xF0\xB0\x01\x01\xA2";
or even like this
string init3 = "\u00F0\u00B0\u0001\u0001\u00A2";
I understand that passing byte arrays to Android JNI is not simple, and utf8 encoding is being used instead.
But has anyone succeeded in sending commands that contain control characters and NULLs ?
    const string SERVICE_UUID = "0bf669f1-45f2-11e7-9598-0800200c9a66";
    const string COMMAND_UUID = "0bf669f2-45f2-11e7-9598-0800200c9a66";
    _writeToCharacteristic = new WriteToCharacteristic(_deviceUuid, SERVICE_UUID, COMMAND_UUID, init3 , true);
   BleManager.Instance.QueueCommand(_writeToCharacteristic);

Heya, thanks for opening an issue.
The library doesn't use UTF8 encoding, but Base64 encoding to send data from and to the Java plugin, so instead, could you try the string 8LABAaI= and see if that fixes the issue?
I'm thinking of adding a way to send raw sbyte[] from Unity to Android using the AndroidJNI.ToSByteArray function, which should give the ability to send sbyte[] and convert them to Java's byte[], which can then be send to the characteristic.
Howevery, improvements such as these are things I want to add to the "new" v0.0.3-alpha.0 version, instead of improving upon the more legacy project.

Wow Base64 encoding did the trick.
thank you so much. !


Stop player from re-enabling super form after completing a stage

Currently, you are able to transform after hitting a signpost or capsule. This causes some odd behaviors with shaders. I think it would be best to disallow players from doing this. This is my approach to fixing this problem.

I think it's best if I just pass this through without any changes. If I feel changes are necessary, I'll revisit it again later. :)


Highly variable extended seek times

Songbird version: next branch - commit: 0044728
Rust version (rustc -V): 1.69
Serenity/Twilight version: serenity next branch
Description:
I'm getting highly variable and sometimes extremely long seek times anywhere from about 50ms delay to several seconds to seek without any distinguishable pattern (no correlation with seekΔ, concurrent streams, song, or seemingly anything else). Sending the seek action only takes a few µs always ranging from around 1.4µs to 2.4µs but the time between that being completed and playback starting again seems to often be quite long. The main time sink seems to be between firing the found format marker event and firing the playable event. Though sometimes it seems to be more between the preparing event and the format marker event. But most of the time it is the former. I'm also not getting any CPU or memory spikes while this is happening.
System:
OS: Ubuntu Linux
Architecture: x86_64 Intel
Specs: 8 Cores, 8GB of Memory
Tracks tested:
https://www.ee.columbia.edu/~dpwe/sounds/music/africa-toto.wav
https://www.kozco.com/tech/c304-2.wav
https://firmware-repo-esp32.s3.us-west-1.amazonaws.com/The+Joy+And+Agony+Of+Travel+(On+A+Train+Version).wav
https://www2.cs.uic.edu/~i101/SoundFiles/ImperialMarch60.wav
Cargo config:
The executable was built in release mode with the following changes in the Cargo.toml file:
lto = "fat"
codegen-units = 1

Steps to reproduce:

Use serenity/voice example and replace main.rs with:

//! Requires the "client", "standard_framework", and "voice" features be enabled in your
//! Cargo.toml, like so:
//!
//! ```toml
//! [dependencies.serenity]
//! git = "https://github.com/serenity-rs/serenity.git"
//! features = ["client", "standard_framework", "voice"]
//! ```
use std::env;
use std::io::SeekFrom;
use std::time::Duration;

// This trait adds the `register_songbird` and `register_songbird_with` methods
// to the client builder below, making it easy to install this voice client.
// The voice client can be retrieved in any command using `songbird::get(ctx).await`.
use songbird::SerenityInit;

// Event related imports to detect track creation failures.
use songbird::events::{Event, EventContext, EventHandler as VoiceEventHandler, TrackEvent};

// To turn user URLs into playable audio, we'll use yt-dlp.
use songbird::input::YoutubeDl;

// YtDl requests need an HTTP client to operate -- we'll create and store our own.
use reqwest::Client as HttpClient;

// Import the `Context` to handle commands.
use serenity::client::Context;

use serenity::{
    async_trait,
    client::{Client, EventHandler},
    framework::{
        standard::{
            macros::{command, group},
            Args, CommandResult,
        },
        StandardFramework,
    },
    model::{channel::Message, gateway::Ready},
    prelude::{GatewayIntents, TypeMapKey},
    Result as SerenityResult,
};
use serenity::futures::AsyncSeekExt;
use songbird::tracks::TrackHandle;

struct HttpKey;

struct TrackHandleKey;

impl TypeMapKey for HttpKey {
    type Value = HttpClient;
}

impl TypeMapKey for TrackHandleKey {
    type Value = TrackHandle;
}

struct Handler;

#[async_trait]
impl EventHandler for Handler {
    async fn ready(&self, _: Context, ready: Ready) {
        println!("{} is connected!", ready.user.name);
    }
}

#[group]
#[commands(deafen, join, leave, mute, play, ping, undeafen, unmute,seek)]
struct General;

#[tokio::main]
async fn main() {
    tracing_subscriber::fmt::init();

    // Configure the client with your Discord bot token in the environment.
    let token = env::var("DISCORD_TOKEN").expect("Expected a token in the environment");

    let framework = StandardFramework::new().group(&GENERAL_GROUP);
    framework.configure(|c| c.prefix("~"));

    let intents = GatewayIntents::non_privileged() | GatewayIntents::MESSAGE_CONTENT;

    let mut client = Client::builder(&token, intents)
        .event_handler(Handler)
        .framework(framework)
        .register_songbird()
        // We insert our own HTTP client here to make use of in
        // `~play`. If we wanted, we could supply cookies and auth
        // details ahead of time.
        //
        // Generally, we don't want to make a new Client for every request!
        .type_map_insert::<HttpKey>(HttpClient::new())
        .await
        .expect("Err creating client");

    tokio::spawn(async move {
        let _ = client
            .start()
            .await
            .map_err(|why| println!("Client ended: {:?}", why));
    });

    let _signal_err = tokio::signal::ctrl_c().await;
    println!("Received Ctrl-C, shutting down.");
}

#[command]
#[only_in(guilds)]
async fn deafen(ctx: &Context, msg: &Message) -> CommandResult {
    let guild_id = msg.guild_id.unwrap();

    let manager = songbird::get(ctx)
        .await
        .expect("Songbird Voice client placed in at initialisation.")
        .clone();

    let handler_lock = match manager.get(guild_id) {
        Some(handler) => handler,
        None => {
            check_msg(msg.reply(ctx, "Not in a voice channel").await);

            return Ok(());
        },
    };

    let mut handler = handler_lock.lock().await;

    if handler.is_deaf() {
        check_msg(msg.channel_id.say(&ctx.http, "Already deafened").await);
    } else {
        if let Err(e) = handler.deafen(true).await {
            check_msg(
                msg.channel_id
                    .say(&ctx.http, format!("Failed: {:?}", e))
                    .await,
            );
        }

        check_msg(msg.channel_id.say(&ctx.http, "Deafened").await);
    }

    Ok(())
}

#[command]
#[only_in(guilds)]
async fn join(ctx: &Context, msg: &Message) -> CommandResult {
    let (guild_id, channel_id) = {
        let guild = msg.guild(&ctx.cache).unwrap();
        let channel_id = guild
            .voice_states
            .get(&msg.author.id)
            .and_then(|voice_state| voice_state.channel_id);

        (guild.id, channel_id)
    };

    let connect_to = match channel_id {
        Some(channel) => channel,
        None => {
            check_msg(msg.reply(ctx, "Not in a voice channel").await);

            return Ok(());
        },
    };

    let manager = songbird::get(ctx)
        .await
        .expect("Songbird Voice client placed in at initialisation.")
        .clone();

    if let Ok(handler_lock) = manager.join(guild_id, connect_to).await {
        // Attach an event handler to see notifications of all track errors.
        let mut handler = handler_lock.lock().await;
        handler.add_global_event(TrackEvent::Error.into(), TrackErrorNotifier);
    }

    Ok(())
}

struct TrackErrorNotifier;

#[async_trait]
impl VoiceEventHandler for TrackErrorNotifier {
    async fn act(&self, ctx: &EventContext<'_>) -> Option<Event> {
        if let EventContext::Track(track_list) = ctx {
            for (state, handle) in *track_list {
                println!(
                    "Track {:?} encountered an error: {:?}",
                    handle.uuid(),
                    state.playing
                );
            }
        }

        None
    }
}

#[command]
#[only_in(guilds)]
async fn leave(ctx: &Context, msg: &Message) -> CommandResult {
    let guild_id = msg.guild_id.unwrap();

    let manager = songbird::get(ctx)
        .await
        .expect("Songbird Voice client placed in at initialisation.")
        .clone();
    let has_handler = manager.get(guild_id).is_some();

    if has_handler {
        if let Err(e) = manager.remove(guild_id).await {
            check_msg(
                msg.channel_id
                    .say(&ctx.http, format!("Failed: {:?}", e))
                    .await,
            );
        }

        check_msg(msg.channel_id.say(&ctx.http, "Left voice channel").await);
    } else {
        check_msg(msg.reply(ctx, "Not in a voice channel").await);
    }

    Ok(())
}

#[command]
#[only_in(guilds)]
async fn seek(ctx: &Context, msg: &Message,mut args: Args) -> CommandResult {
    let guild_id = msg.guild_id.unwrap();

    let pos = match args.single::<u64>() {
        Ok(url) => url,
        Err(_) => {
            check_msg(
                msg.channel_id
                    .say(&ctx.http, "Must provide a seek position in seconds")
                    .await,
            );

            return Ok(());
        },
    };

    let track_handle = ctx.data.write().await.get::<TrackHandleKey>().cloned().unwrap();

    let _ = track_handle.seek(Duration::from_secs(pos));

    Ok(())
}

#[command]
#[only_in(guilds)]
async fn mute(ctx: &Context, msg: &Message) -> CommandResult {
    let guild_id = msg.guild_id.unwrap();

    let manager = songbird::get(ctx)
        .await
        .expect("Songbird Voice client placed in at initialisation.")
        .clone();

    let handler_lock = match manager.get(guild_id) {
        Some(handler) => handler,
        None => {
            check_msg(msg.reply(ctx, "Not in a voice channel").await);

            return Ok(());
        },
    };

    let mut handler = handler_lock.lock().await;

    if handler.is_mute() {
        check_msg(msg.channel_id.say(&ctx.http, "Already muted").await);
    } else {
        if let Err(e) = handler.mute(true).await {
            check_msg(
                msg.channel_id
                    .say(&ctx.http, format!("Failed: {:?}", e))
                    .await,
            );
        }

        check_msg(msg.channel_id.say(&ctx.http, "Now muted").await);
    }

    Ok(())
}

#[command]
async fn ping(ctx: &Context, msg: &Message) -> CommandResult {
    check_msg(msg.channel_id.say(&ctx.http, "Pong!").await);
    Ok(())
}

#[command]
#[only_in(guilds)]
async fn play(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult {
    let url = match args.single::<String>() {
        Ok(url) => url,
        Err(_) => {
            check_msg(
                msg.channel_id
                    .say(&ctx.http, "Must provide a URL to a video or audio")
                    .await,
            );

            return Ok(());
        },
    };

    if !url.starts_with("http") {
        check_msg(
            msg.channel_id
                .say(&ctx.http, "Must provide a valid URL")
                .await,
        );

        return Ok(());
    }

    let guild_id = msg.guild_id.unwrap();

    let http_client = {
        let data = ctx.data.read().await;
        data.get::<HttpKey>()
            .cloned()
            .expect("Guaranteed to exist in the typemap.")
    };

    let manager = songbird::get(ctx)
        .await
        .expect("Songbird Voice client placed in at initialisation.")
        .clone();

    if let Some(handler_lock) = manager.get(guild_id) {
        let mut handler = handler_lock.lock().await;

        let src = YoutubeDl::new(http_client, url);
        let track_handle = handler.play_input(src.into());

        ctx.data.write().await.insert::<TrackHandleKey>(track_handle);

        check_msg(msg.channel_id.say(&ctx.http, "Playing song").await);
    } else {
        check_msg(
            msg.channel_id
                .say(&ctx.http, "Not in a voice channel to play in")
                .await,
        );
    }

    Ok(())
}

#[command]
#[only_in(guilds)]
async fn undeafen(ctx: &Context, msg: &Message) -> CommandResult {
    let guild_id = msg.guild_id.unwrap();

    let manager = songbird::get(ctx)
        .await
        .expect("Songbird Voice client placed in at initialisation.")
        .clone();

    if let Some(handler_lock) = manager.get(guild_id) {
        let mut handler = handler_lock.lock().await;
        if let Err(e) = handler.deafen(false).await {
            check_msg(
                msg.channel_id
                    .say(&ctx.http, format!("Failed: {:?}", e))
                    .await,
            );
        }

        check_msg(msg.channel_id.say(&ctx.http, "Undeafened").await);
    } else {
        check_msg(
            msg.channel_id
                .say(&ctx.http, "Not in a voice channel to undeafen in")
                .await,
        );
    }

    Ok(())
}

#[command]
#[only_in(guilds)]
async fn unmute(ctx: &Context, msg: &Message) -> CommandResult {
    let guild_id = msg.guild_id.unwrap();

    let manager = songbird::get(ctx)
        .await
        .expect("Songbird Voice client placed in at initialisation.")
        .clone();

    if let Some(handler_lock) = manager.get(guild_id) {
        let mut handler = handler_lock.lock().await;
        if let Err(e) = handler.mute(false).await {
            check_msg(
                msg.channel_id
                    .say(&ctx.http, format!("Failed: {:?}", e))
                    .await,
            );
        }

        check_msg(msg.channel_id.say(&ctx.http, "Unmuted").await);
    } else {
        check_msg(
            msg.channel_id
                .say(&ctx.http, "Not in a voice channel to unmute in")
                .await,
        );
    }

    Ok(())
}

/// Checks that a message successfully sent; if not, then logs why to stdout.
fn check_msg(result: SerenityResult<Message>) {
    if let Err(why) = result {
        println!("Error sending message: {:?}", why);
    }
}

Try a few different seek commands and observe delay

Nevermind. Turns out columbia's servers are just really terrible and are either rate limited or are straight out of the 90s.


Add Item Quantity

New Item: Add + and - buttons to change quantity. Don't go below 0
Display quantity in item card
Save quantity

Commit: https://github.com/johneastman/todo/commit/02a5cb7e60525986c95bee00ec3cf393635c6688


Issues with Checkstyle and vimrc

Summary
I am having issues with checkstyle flagging incorrect indentation and tabs being present.
Description
I was told to make sure that the tabstop was equals to 4 as shown in the 2nd picture but I still continue to face this issue.
Screenshots (if any):

Did u change the vimrc setting only after writing ur program? If so some tab character still exist. Easy way to check is to use vscode under setting search for "editor.renderWhitespace": your empty space should be a dot.

Did u change the vimrc setting only after writing ur program? If so some tab character still exist. Easy way to check is to use vscode under setting search for "editor.renderWhitespace": and change it to all. Your empty space should be a dot. Each dot represent 1 indentation so you should see 4 dots

these were the original settings my vimrc came with, I did not change anything

Re-download the .vimrc in this repo and replace your current .vimrc.
Next, reopen whatever .java files in Vim and hit :gg=G. This will fix the indentation for the whole file.
Be sure to hit :wq to save and quit when you're done.


Pinning Spyder to taskbar in Windows 7 and clicking on it adds another Spyder icon to taskbar

From<EMAIL_ADDRESS>on 2015-02-03T03:44:12Z
Spyder Version:  2.3.2
Python Version:  2.7.6
Qt Version    :  4.8.6, PyQt4 (API v2) 4.10.4 on Windows
pyflakes >=0.5.0:  0.8.1 (OK)
pep8 >=0.6      :  1.5.7 (OK)
IPython >=0.13  :  2.3.1 (OK)
zmq >=2.1.11    :  14.4.1 (OK)
pygments >=1.6  :  2.0.1 (OK)
pandas >=0.13.1 :  0.15.2 (OK)
sphinx >=0.6.6  :  1.2.3 (OK)
rope >=0.9.2    :  0.9.4 (OK)
matplotlib >=1.0:  1.4.0 (OK)
sympy >=0.7.0   :  0.7.5 (OK)
pylint >=0.25   :  1.4.1 (OK)
What steps will reproduce the problem?

Drag the Spyder shortcut from the start menu to the taskbar
Click the new pinned shortcut to launch Spyder

What is the expected output? What do you see instead?
Instead of the icon becoming permanently active and "clickable" to maximize/minimize the window, it becomes active only for some seconds, then a new Spyder icon is added to the taskbar and the pinned one is deactivated.
Attachment: spyder_taskbar.png
Original issue: http://code.google.com/p/spyderlib/issues/detail?id=2150

From<EMAIL_ADDRESS>on 2015-02-03T00:50:51Z
Note that I'm using the Anaconda Python distribution.

From ccordoba12 on 2015-02-03T12:14:23Z
We'll see what we can do about it for our next release.
Summary: Pinning Spyder to taskbar in Windows 7 and clicking on it adds another Spyder icon to taskbar  <span class="oldvalue"> (was: Win7 pinning Spyder to taskbar and opening adds another Spyder icon to taskbar) </span>
Labels: Cat-SpyderGUI OpSys-Windows MS-v2.3.4

From ccordoba12 on 2015-02-08T11:24:19Z
Status: Duplicate
Mergedinto: 1983


2D meshing: return inner / outer mesh

The mesh for both the internal (1) and external (0) part are needed in the mesh with a shared interface. This is necessary to map the pore / silicon area.
Something like:
inner_mesh, outer_mesh = plane.generate_mesh_2d(...)

Can also return an index array to mark the points that belong to either.

Closed by #58


Replace library 'Clara' with 'Lyra'

Recently, I found that the library 'Clara' (https://github.com/catchorg/Clara) is no longer maintained.
It has been forked and maintained as the new name 'Lyra' (https://github.com/bfgroup/Lyra).
We should replace it to maintain dependency.

#69
I added 'Lyra' submodule and modified the example codes which depend on 'Clara'.
As 'Clara' submodule isn't removed yet, entirely removing it from our project is needed after testing.

Seems to properly work but, help text is printed out differently.
SPHSim --help (before)

SPHSim --help  (after)

I found the exactly same issue in the Lyra github.
It was created at 2019.10.8 and cant find any improvement about the problem.


Wielding is broken

Pull something
Wield popup says you wielded even though you didn't.

uh so is the first step trying to pull something while you have a wieldable item inhand and not wielded?

Below are other issues regarding wielding and recreation steps.
#29521
#29589

I think I have located where this bug is happening.
If you wield a gun while dragging with the other hand you end up calling SharedHandSystem.TryUseItemInHand() in this file
It then calls SharedInteractionSystem.UseInHandInteraction() which then checks for blocking using ActionBlockerSystem.CanInteract() and CanUseHeldEntity() and in none of these action blockers a check for wieldable is made


Remove year range requirement for copyright checker

And reset modified files back
tools/distrib/check_copyright.py needs the most review
Would appreciate if this could get prioritized up, as maintenance will be a pain
Fixes #5051

Green


No data from Solcast:  No such file or directory

The problem
Because the same issue  (https://github.com/BJReplay/ha-solcast-solar/issues/92) occurred I upgraded to beta V.4.0.39, then got other errors in the log. I am running HA Core 2024.3.3 with HACS in Debian. Prior Solcast integration from oziee worked normally.
What version of Solcast Integration has the issue?
V.4.0.39 Beta
Logs debug/info/error output
Logger: custom_components.solcast_solar.solcastapi
Source: custom_components/solcast_solar/solcastapi.py:294
integration: Solcast PV Forecast (documentation, issues)

Exception in sites_data(): Traceback (most recent call last): File "/home/xxxxx/.homeassistant/custom_components/solcast_solar/solcastapi.py", line 221, in sites_data async with aiofiles.open(apiCacheFileName, 'w') as f: File "/home/xxxxx/homeassistant/lib/python3.11/site-packages/aiofiles/base.py", line 63, in __aenter__ return await self ^^^^^^^^^^ File "/home/xxxxx/homeassistant/lib/python3.11/site-packages/aiofiles/base.py", line 59, in __await__ self._obj = yield from self._coro.__await__() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/xxxxx/homeassistant/lib/python3.11/site-packages/aiofiles/threadpool/__init__.py", line 92, in _open f = await loop.run_in_executor(executor, cb) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/concurrent/futures/thread.py", line 58, in run result = self.fn(*self.args, **self.kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FileNotFoundError: [Errno 2] No such file or directory: '/config/solcast-sites.json'

Logger: custom_components.solcast_solar.solcastapi
Source: custom_components/solcast_solar/solcastapi.py:163
integration: Solcast PV Forecast (documentation, issues)

Exception in write_api_usage_cache_file(): [Errno 2] No such file or directory: '/config/solcast-usage.json'

Logger: custom_components.solcast_solar.solcastapi
Source: custom_components/solcast_solar/solcastapi.py:164
integration: Solcast PV Forecast (documentation, issues)

Traceback (most recent call last): File "/home/xxxxx/.homeassistant/custom_components/solcast_solar/solcastapi.py", line 160, in write_api_usage_cache_file async with aiofiles.open(json_file, 'w') as f: File "/home/xxxxx/homeassistant/lib/python3.11/site-packages/aiofiles/base.py", line 63, in __aenter__ return await self ^^^^^^^^^^ File "/home/xxxxx/homeassistant/lib/python3.11/site-packages/aiofiles/base.py", line 59, in __await__ self._obj = yield from self._coro.__await__() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/xxxxx/homeassistant/lib/python3.11/site-packages/aiofiles/threadpool/__init__.py", line 92, in _open f = await loop.run_in_executor(executor, cb) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/concurrent/futures/thread.py", line 58, in run result = self.fn(*self.args, **self.kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FileNotFoundError: [Errno 2] No such file or directory: '/config/solcast-usage.json'

Logger: custom_components.solcast_solar.solcastapi
Source: custom_components/solcast_solar/solcastapi.py:454
integration: Solcast PV Forecast (documentation, issues)

Solcast site count is zero in load_saved_data(); the get sites must have failed, and there is no sites cache

Is there anything else I may do?

More specifics about your environment, please?
I am thinking there is no /config directory in your set up, so where are your HA configuration files stored?

This: /home/xxxxx/.homeassistant/custom_components/solcast_solar.
I think that your Home Assistant configuration is in /home/xxxxx/.homeassistant, @Unlik. This will break the integration, because it expects a different directory layout.
For a quick fix, create a symbolic link to this directory, target as /config. Restart. (ln -s /home/xxxxx/.homeassistant /config)
Or wait for v4.0.40, where I have solved this for your corner case.

Brilliant info. I will consider the fix further to ensure it still covers Docker installs, which had previously been broken.
I've been HAOS from day one, so sadly did not consider this.

v4.0.40 is released.

Hello @autoSteve, may I somehow affect the settings for config folder? From log I still can see:
2024-07-26 07:53:41.215 DEBUG (MainThread) [custom_components.solcast_solar.solcastapi] Configuration directory is /config
So the version 4.0.40 does not help with folder issue.

I can see why this is.
Unfortunately the config folder is still hard coded (I found another reference in __init__.py. To get you going for now, edit this file, find /config at line 125, and you can change it to suit your system.
I need to detect which folder a given deployment type of HACS is using, because if I change it back to not feature a hard coded /config then Docker installs will fail. 🤦🏻
It is my understanding that custom components are always installed in subdirectories under the config folder, so what I think will fix this is to determine the running location of the __init__ script, which will be [config]/custom_components/solcast_solar, and then build a path as two levels higher. Hopefully Docker installs are structured the same. (Do you know, @BJReplay?)
I'll give coding this a go, which won't be hard or take too long, then will hit you up to test it.

FYI: it somehow works if I manually set up the path with the solcast.json file in the solcastapi.py:115. The new issue is about the remaining today's forecast which is bigger than just the total today's forecast. Shall I open a new issue?

48.32 vs 48.37 kW. I am not sure whether it is related:
Traceback (most recent call last): File "/home/xxxxx/.homeassistant/custom_components/solcast_solar/solcastapi.py", line 835, in get_max_forecast_pv_estimate _data = self._data_forecasts if site is None else self._site_data_forecasts[site] ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^ KeyError

and
Traceback (most recent call last): File "/home/xxxxx/.homeassistant/custom_components/solcast_solar/solcastapi.py", line 820, in get_forecast_pv_moment res = pchip((time_utc - interval_start).total_seconds(), st_i) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/xxxxx/.homeassistant/custom_components/solcast_solar/solcastapi.py", line 813, in pchip _data[i][_data_field], ~~~~~^^^ IndexError: list index out of range
Traceback (most recent call last): File "/home/xxxxx/.homeassistant/custom_components/solcast_solar/solcastapi.py", line 805, in get_forecast_pv_moment _data = self._data_forecasts if site is None else self._site_data_forecasts[site] ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^ KeyError

The KeyError at self._site_data_forecasts[site] is odd, possibly indicating a forecast fetch issue.
The list index out of range also possibly indicates a forecast fetch issue.
This is just guessing without seeing a complete debug log of what the forecast get data contains.
The difference in forecast remaining and forecast today is being introduced by the addition of some recent interpolation of the forecast data using a cubic spline. This likely wants tweaking, but is not worth opening a separate issue. I already know about it, and the difference is so minor that it just forms an annoyance.

In __init.py__ at line 6, add
import os

At the new line 123 add the new variable configDir and edit the dict hass.config.path...
    configDir = os.path.abspath(os.path.join(__file__ ,"../../.."))
    options = ConnectionOptions(
        entry.options[CONF_API_KEY],
        SOLCAST_URL,
        hass.config.path('%s/solcast.json' % configDir),

After these changes it is probably working properly - as I am out of API limit today I will be back tomorrow with fresh report.

Hopefully Docker installs are structured the same. (Do you know, @BJReplay?)

As far as I know, but, I don't actually know - but I do know that I have a default installation and can have a look around as I did find out a lot more than I would like to know when I had to remove the oziee integration manually to get HA to start a couple of months ago, so am somewhat familiar with a bunch of HA Docker config files.
Is the question "where is the default location of the config folder?" or is the question "is the default installation location custom_components/component_name and is it always under the config folder?"

@BJReplay, the question is, "Is the default installation location custom_components/component_name and is it always under the config folder?"
The code I propose gets the folder location that the Solcast integration runs at, and then assumes that "two levels up" is the config folder location. Seems sane to me.
@Unlik, did that change work?

It's working perfectly for me now, thank you for the correction!

The code I propose gets the folder location that the Solcast integration runs at, and then assumes that "two levels up" is the config folder location. Seems sane to me.

I can't see anywhere that names the config folder under a docker install.
The config folder is mounted in the docker definition, so should always be called config within the Docker VM.
     homeassistant:
         container_name: homeassistant
         image: ghcr.io/home-assistant/home-assistant:latest
         volumes:
             - ./ha:/config
             - /etc/localtime:/etc/localtime:ro
             - /run/dbus:/run/dbus:ro
         restart: unless-stopped
         ports:
             - target: 8123
               published: 8123
               mode: host

On the host, it looks like this:
~/ha$find . -mindepth 1 -maxdepth 2 -type d
./.storage
./backups
./custom_components
./custom_components/epa_victoria_air_quality
./custom_components/opennem
./custom_components/import_statistics
./custom_components/o365
./custom_components/bureau_of_meteorology
./custom_components/hacs
./custom_components/solcast_solar
./custom_components/spook
./custom_components/localtuya
./custom_components/blitzortung
./blueprints
./blueprints/script
./blueprints/automation
./deps
./www
./www/community
./tts
./.cloud

Adding, for docker, the instructions specifically note: https://www.home-assistant.io/installation/alternative#install-home-assistant-container
Adjust the following Terminal command as follows :
sudo docker run --restart always -d --name homeassistant -v /PATH_TO_YOUR_CONFIG:/config --device=/PATH_TO_YOUR_USB_STICK -e TZ=Australia/Melbourne --net=host ghcr.io/home-assistant/home-assistant:stable
Replace /PATH_TO_YOUR_CONFIG points at the folder where you want to store your configuration - make sure that you keep the :/config part
It's clear that docker installs expect the root config path to be mapped as config.


test: add smoke test, bot test, various data-testids for coverage 9e1ecd5

Was playing around with various ways to test PROD to help prevent the query parameter mismatch issue we had a few weeks ago.  Have various goals and tried to pick best for all. We want to test PROD which implicitly tests breaking changes of APIM definition, but since this smoke test would need to be fairly comprehensive to be useful we would also want to be able to run this on the dev UI and dev service. Originally had the test located in the samples repo to test samples but decided the synchronization and sharing of this test between repos would be very difficult to maintain.
Finally solution is adding the tests to UI repo with the other tests to keep. Limits exposure of testing code in the samples repo and allows plants to add smoke tests before the existing regression tests.

add smoke folder with a smoke test

Can be run against independent UI or bot UI depending on baseUrl set

add release test for bot home page

Intented to help verify the page loads and we don't have the caching issue, but I think the test browser always loads fresh with cache cleared so it might not be detectable

adds many data-testids for the action arguments, package/version creator modal, and others

:tada: This PR is included in version 0.359.0 :tada:
The release is available on:

npm package (@next dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


chore: allows to override kubo path

I need this to use theses interop tests in Kubo (replacing js-ipfs's interop).

Supperseeded by https://github.com/ipfs/npm-go-ipfs/pull/62


Docs: fix the spelling of [accommodate].

My approach to that (and I think it's how we're all dealing with it) is to just re-run it until it succeeds.
There was a conversation recently (I can't remember where I saw it, sorry) that was looking into the reasons for the long builds.

Done!