FWEP 1 Json/Dictionary type of I/O definition

FWEP (FUSED-Wind Enhancement Proposal) 1:
Json/Dictionary type of I/O definition
Hey FUSED people,
We have had a short discussion with Justin on their upcoming big change of API. They are apparently planning to change the way they define the I/Os:
instead of
class MyComp(Component):

   x = Float(x, iotype="in")
   y = Float(x, iotype="out")

   def execute(self):
       self.y = 2*self.x

you would do something like:
class MyComp(Component):

   def __init__(self):

       self.add_input('x', float)
       self.add_output('y', float)

   def execute(self, inputs, outputs):
        outputs['y']= 2*inputs['x']

So this is a quite drastic change for us, as we rely on the components I/O definition to define our standard interfaces. What I propose is to add a layer on top of OpenMDAO (that might hopefully eventually be supported by OpenMDAO) so that things are defined this way:
@FUSED_IO(
     inputs=[
        {name:’x’, 'type':float},
        {name:’x2’, 'type':list},
        {name:’x3’, 'type':array},
    ],
    outputs=[
        {name:’y’, 'type':float},
        {name:’y2’, 'type':list, 'size':…, 'desc':‘blabla'},
        {name:’y3’, 'type':array, 'size':..},
    ])
class MyComp(Component):
   def execute(self, inputs, outputs):
        outputs['y']= 2*inputs['x’]
	...

Here are a few advantages of doing that:

To do the repetitive add_input / add_output call under the hood through the decorator
To have a set of thin decorators that can take a non openmdao function or class and wrap them into a FUSED-Wind openmdao component
To have a list of standard FUSED-Wind variables:

wind_speed  =  {name:’wind_speed’, type:float, min:4.0, max:25.0, desc:’A wind speed float’, unit:’m/s’}
hub_wind_speed  =  expand(wind_speed, {name:’hub_height_wind_speed’, desc:’The wind speed at hub height'})
rotor_height = {’name’:’rotor_height’, ….}
wt_layout  =  {
    ‘wt_list’: {'name':’wt_list’, type:[wt_descriptor],…} # we would need to define some kind of elegant way to inform what are the contents of the lists
    ‘wt_positions’: {‘type’:array, ’size’:’[n,2]'}
    ‘wt_wind_roses’: {...}}

expand could be function keeping track of inheritance, for multi-fidelity I/O definition, if necessary.

dico = {'name':'dico',
    'a':1,
    'b':2,
    'based_on':[]}

expand = lambda x, y: dict(x.items() + y.items() + [('based_on', [x['name']]+x['based_on'])])

expand(dico, {'name':'new_dico','c':3, 'a':3})

{'a': 3, 'b': 2, 'based_on': ['dico'], 'c': 3, 'name': 'new_dico'}

These standard variables could then be used to define our FUSED-Wind interfaces:

from fusedwind.variables import wind_speed, wind_direction, wt_layout, net_aep, gross_aep

@FUSED_IO(
    inputs=[wind_speed, wind_direction, wt_layout],
    outputs=[net_aep, gross_aep])
class MyComp(Component):
...

Our standard interfaces could then be defined as dictionaries:

GenericAEP = FUSED_IO(
     inputs=[wind_speed, wind_direction, wt_layout],
    outputs=[net_aep, gross_aep])

Then any component satisfying this interface could be done like that:

@FUSED_IO(
    based_on=GenericAEP,
     inputs=[wind_speed, wind_direction, wt_layout],
     outputs=[net_aep, gross_aep, capacity_factor])
…

Or something looking like that
@GenericAEP
@FUSED_IO(outputs=[capacity_factor])
…

(a bit less verbose...)

As everything is already defined in dictionary, it’s a simple step to go to Json files, defined standard inputs/outputs files, REST interfaces etc..
To use this definition to generated automatically a standard RESTful web API. So being able to deploy quickly a FUSED-Wind compatible function of Component into a webmodel.
So potentially somebody developing in another language could deploy their model online using the same standard API as we defined in FUSED-Wind and thereby make their model available to run in a FUSED-Wind assembly. We would “just” need to inform the web address and credentials, and the Component could automatically generate it’s input/outputs from the REST interface definition. This would be our way to open up FUSED-Wind collaboration beyond the python and openmdao community to anybody else able to deploy REST interfaces (hint: could be something we advocate through the IEA SE task).

What do you think about this idea?

For illustration purpose, here is a simple flask app that could deploy Hawc2 online:
from flask import Flask, request
from hawc2wrapper import Hawc2Wrapper
import json

app = Flask(__name__)

def deploy_FUSEDWIND(cls):
    c = cls()

    @app.route('/'+cls.__name__, methods=['GET', 'POST'])
    def myflask():
        if request.method == 'POST':
            inputs =  request.form.to_dict()
            # ... Optionally do some credential check here...
            c.execute(inputs, outputs)
            return json.dumps(output)

        # Publish the interface definition of the class
        return json.dumps(cls.fusedIO)

if __name__ == "__main__":
    deploy_FUSEDWIND(Hawc2Wrapper)
    app.run()

and on client side:
from fusedwind.interfaces import RESTComponent

class A(Assembly):
    def configure(self):
        self.add('hawc2', RESTComponent(url='fusedwind.hawc2.dk/Hawc2Wrapper', credential='.hawc2.license'))
        ...

If we don’t use there i/o structure and instead use this dictionary type set-up, don’t we break their dependency graph functionality and lose all the nice derivative chaining etc? It seems like at some point, we will have to perform the specific add_input, add_output to get variables into the graph and connect across components at the assembly level.
Seems like we could still do a variation of the below that Pierre proposed, but we would add the variables in the init and use them explicitly as openmdao variables as before.

Maybe I've been unclear. I'm not suggesting to not use their way of declaring the I/O. I'm suggesting to add another layer on top of it. So our declarator would actually call the add_input and add_output functions using the information contained in the dictionaries passed to the declarator.

@JustinSGray, I would also be interested to have your feed-backs about the feasibility of my proposal, when you have some spare time :-)

Got it - I didn't see the add_input/add_output in your example code anywhere and it looked in your example like you are passing them in via the execute method...

I like the idea of the standard variables Pierre mentions in fusedwind.variables. This would help prevent us from defining interfaces in different parts of the framework that refer to the same variable but are given different names since all interface variables have to defined in the variables.py file.
I'm not so much a fan of using the decorator to do the add_input and add_output under the hood since many components will most likely have a mix of FUSED-Wind interface variables mixed with specific model variables, which means that a class interface will declare I/O in two different ways: standard OpenMDAO and a FUSED-Wind decorator. I like the current way we do it where everything is defined in one place by the user, and the decorator really only doing a simple check of that.
Lastly, I think its way too ambitious to have added this to the 0.2 release (which is June), since this release should focus on getting FUSED-Wind and all our models working in OpenMDAO 0.12 with MPI. Also, we don't know if/when the proposed changes in OpenMDAO will take place.

@fzahle, I see your point that blending add_input and decorator input would be confusing. The way I see it the decorator input would replace most occurrence of add_input, even when the inputs/outputs are custom to the component. They would only be necessary when they are somehow automatically generated. You could also see it the other way around: if we do as you suggest to both have a decorator and explecitely do the add_inputs/add_outputs, it would be weird if the exposed interface in the decorator would not cover all the inputs/outputs defined in the init section. That would make things even more confusing I think.
import fusedwind.variable.api as fw

# Defined somewhere upstream
private_input1 = fw.float(1.0, desc='my private inputs')

@IO({'inputs': {
        'wind_speed': fw.wind_speed,
        'wind_direction': fw.wind_direction,
        'private_input1': private_input1
    },
    'outputs': {
        'net_aep': fw.net_aep,
        'private_output1':  fw.array(zeros([10,2]), desc='my private inputs') #defined in the dictionary
    }})
class MyComp(Component):
...

Another potential issue I see is if the add_inputs / outputs are somehow necessary to be done before the init function. Then it start to be tricky to do it "under the hood".


Add XR_FB_hand_tracking_capsules extension wrapper and OpenXRFbHandTrackingCapsules node

Once again this PR only functions with Godot 4.3 / PR #87546
Creates an extension wrapper for the XR_FB_hand_tracking_capsules extension, which provides info on a bunch of capsule shapes that can be used while hand tracking.
This is implemented via an OpenXRFbHandTrackingCapsules node, which should be the child of an XRController3D. The node instantiates an AnimatableBody3D for each hand tracking capsule at runtime, and updates their transforms every physics frame. I've set the OpenXRFbHandTrackingCapsules node up with duplicate properties of AnimatableBody3D (not all of them, just the ones that I think made sense), and updating those properties at runtime should also update the children accordingly.
https://github.com/GodotVR/godot_openxr_vendors/assets/95497005/94b0bbf9-b8c6-4016-a964-59f8250ebfe4

It's a good start, I've been planning on adding similar logic to XR tools for awhile now, seeing we can do most of this through normal hand tracking, this just adds some sizing info.
One thing I would look into is not creating an AnimatableBody3D child node but instead having a look at the actual implementation and creating the necessary objects directly on the physics engine. You'll have far more control over the implementation.
Also don't make set_sync_to_physics settable, just set it to false and forget it exists. If sync to physics is true, it means physics starts taking control over positioning of the object and overriding your placement.
Next, don't just update the transform, trust me, I've been trying to make hands work properly since I was sent a leap motion years ago, I've run into all the problem cases, I've tried loads of solutions, I'm close but lacked the time to dedicate to it last year.
Updating the transform basically transports the bone, one moment its here, the next its there. Its only working in your video because you have a simple scene and you're moving your hands nice and slowly. the moment you try this in a real setup and start moving your hand at normal speeds, the approach falls apart. One moment your hand is outside an object, the next it's inside, the physics engine panics, and the object flies off at the speed of sound. HURRAY.
The only way to properly exert forces on objects is to use AnimatableBody3Ds move_and_collide function, where we attempt to move the object from where it currently is, to where I needs to go, figure out what we're colliding with, exert the right forces, rinse and repeat until the bone is there, or until you determine it can't reach where your hand is.
Owh yes, fix one things, 10 new problems popup:

RigidBody3D has all this logic but it doesn't offer the control you need, and the logic is not accessible in animatable body, because the physics team is building a physics engine for normal games and doesn't cater to the unique requirements of VR (yet)
move_and_collide only works for movement, not rotation
you can't do this logic one bone at a time, you really need to take the whole hand into account, look at the position and finger orientation of the hand in the last frame, lerp the whole hand to the current position and finger orientation constantly checking for collisions
how do you handle a hand getting stuck?
how do you handle a player teleporting to a new location or a new scene loading, with the hand stuck in an old location not being able to reach the new players location, seeing your node is oblivious to this
the list goes on

Doing this right, in a way that actually works for a user, requires a fairly complex implementation, with possible enhancements to the physics engine. We can get close, and we should attempt to get close and call it good enough, as the feedback out of this will help us convince the physics team of what XR needs need to be applied to the physics engine.
Lastly have a look at: https://github.com/GodotVR/godot-xr-tools/blob/master/addons/godot-xr-tools/objects/force_body/force_body.gd and https://github.com/GodotVR/godot-xr-tools/blob/master/addons/godot-xr-tools/hands/collision_hand.gd
These form the basis of the implementation that has most of the above things implemented (not all) but only for the palm of the hand. I'm hoping to add finger collisions to this soon but with a number of "this is good enough but far from perfect" concessions due to missing logic.

Given all the issues that @BastiaanOlij mentions, and the fact that a number of them may have different solutions depending on how the developer wants the game to work, would it be better to simply expose the capsule positions and sizes and let the developer decide what to do with them? Maybe XR Tools could accept hand capsule information, and that could come either from the developer (or some defaults?), or pulled from this extension if available?

The difficulty is not really knowing where this is going, something I totally forgot about and that we still need to expose is that XrHandJointLocationEXT actually has a radius property that gives us the thickness of a bone/finger. That is already enough to obtain information to both generate an animatable hand mesh and create collision capsules. So I'm not sure what Metas extension offers beyond that.
The real problem however is not the capsule data itself. Its the physics interaction and that we're missing functionality in the physics engine to accurately move a the collision data for a hand through space, check for collisions and react to those.

@BastiaanOlij just looking for a little clarity. If I follow: you feel a simpler implementation of XR_FB_hand_tracking_capsules that exposes the position/radius data to users would be redundant, because the sphere data from the vendor neutral equivalent could already be transformed into similar capsule data on our end?

@devloglogan Can you bump the compatibility_minimum value in plugin.gdextension to 4.3.

@BastiaanOlij just looking for a little clarity. If I follow: you feel a simpler implementation of XR_FB_hand_tracking_capsules that exposes the position/radius data to users would be redundant, because the sphere data from the vendor neutral equivalent could already be transformed into similar capsule data on our end?

Once we implement the logic in something like XR Tools yes, but we'd need to verify the data we get from the core extension is indeed usable

With PR https://github.com/godotengine/godot/pull/88639, we could conceivably add capsules data to XRHandTracker and have some place to stash the capsule data from this extension.
However, before we do that, it'd probably be best to do some experimentation to see if we can fully derive the capsules from the radii, OR if the capsule data from this extension provides us with something better or more accurate than we can derive.

However, before we do that, it'd probably be best to do some experimentation to see if we can fully derive the capsules from the radii, OR if the capsule data from this extension provides us with something better or more accurate than we can derive.

Sure! Happy to look into this and report back soon.

@dsnopek Finally got around to checking out how well the capsule data can be derived from the already integrated sphere data. I'm just averaging the radius/position between joints to create the capsules. Sphere-derived is left hand, XR_FB_hand_tracking_capsules is the right hand.
https://github.com/GodotVR/godot_openxr_vendors/assets/95497005/bf47a396-9d88-45d2-b1ee-d75425ab00c4
They're not identical when done this way. If we wanted to tweak it further so that it would be more identical to the right hand, I'm sure we could. But the left hand does feel more accurate to me, and I'd personally feel more inclined to use the left hand as displayed here.

I've made a core PR for providing/consuming hand capsule data in XRHandTracker: https://github.com/godotengine/godot/pull/89289.
Also, I realized that I was actually interpreting the hand capsule data incorrectly, and that godot's capsule height doesn't factor in capsule radius at all (as opposed to the data provided by the extension). The size of the hand tracked capsules makes a lot more sense to me with this fix added. :)


Everything is really slow, compared to a browser

Checklist:

[x] I have checked that there are no issues with similar or the same content
YOU SHOULD CHECK CLOSED ISSUES ASWELL

[X] I have checked the FAQ (https://github.com/MarshallOfSound/Google-Play-Music-Desktop-Player-UNOFFICIAL-/wiki/FAQ) and the answer I am looking for is not there

[X] I have double checked and can reproduce the issue

OS: Windows 10 1803
GPMDP Version: 4.6.1
Issue Descriptions: Everything is way too load. It takes a long 60 seconds  load the app, and then another 1:30 load songs.
Steps to Reproduce: Just install it
It's not a network problem. It works fine in Chrome.

Also, on an unrelated note, it'd be nice to have a option to disable media keys.

Can confirm that on Linux Mint 19 as well.

You can check the version by right-clicking the icon in the clock tray, Help, About.

@Newgap Thanks, updated.

I'm having the same experience on Ubuntu 18.04.

Can also confirm it on Windows 10. Any ideas why this is like that ?

Can confirm. Running 4.6.1 on Elementary os (Ubuntu based) and it becomes super slow after a couple of seconds of the app running.

This is an Electron app. Electron is known or being slow. It doesn't help that Google builds the play music pages specifically to the latest Chrome builds, while Electron uses an older Blink engine. Please check here for more information on these Electron issues.

Previously things worked fine. Using many electron apps, I know that there is a performance penalty to pay, but that has never meant full non-responsiveness and ultimate crashing on modern hardware when doing nothing but streaming audio, as is what is happening here.

I've only noticed it with chrome/chromium based apps (excluding discord for so me reason) recently, and only Windows.

Had this issue as well, re-installing the GPMDP and this resolved the issue. I think it has something to do with the buildup of cache. The app provides no way to clear it, it was not till I re-installed the app did I realize that this can be done in Edge, IE, or Chrome

@DaemosDaen I tried Arch yesterday for a bit and literally ass soon as it was installed it was lagging

Quite a few performance improvements have landed recently and the upgraded Electron version will be a win in this area.  Gonna close this out for now as it turned into a catch all "something is slow" issue


refactor(proto): Use explicit namespacing on proto imports for #1608

Closes #1608
Deletes proto/nibiru/stablecoin since we're no longer using those types.
This change is completely non-breaking. It doesn't affect the Golang, just the the imports in the protobuf files.

Why we do this random stuff? It is not useful and adds noise


The --var switch cannot be used as the last switch before the filename

I'm not sure if this is a bug or a feature, but if I specify the --var command-line options, just before the file name, I get the error message complaining about the missing fileName:

I suspect this is because it treats the filename as one of the variables. If I move another switch (e.g. -a) before the file name, it works fine. Not a big deal but if this is a feature, maybe need to document it.

I use commander for all cli args parsing. I will test it with a small example and maybe create a issue

I was just helping a coworker and she ran into the same problem when calling CLI as -a -e envname file.http. Basically, it looks like you cannot use any switch that takes multiple arguments before the file name because it then treats the file name as one of the arguments for this switch. Don't know how commander works, but an option would be to have a switch for the file names, like -f file1.http file2.http.


ci: automatically close issues marked as “not bug” over time

https://github.com/honojs/hono/issues/751#issuecomment-2182128433
Propose workflow
If an issue labeled not bug is inactive for 7 days, it will be labeled stale and start the time limit of the closing issue.
A warning will be given that the issue will be closed. If there is no activity for two days, it will be closed.
name: Close stale issues with "not bug" label

on:
  schedule:
    - cron: '0 0 * * *'

jobs:
  stale:
    runs-on: ubuntu-latest
    steps:
      - name: Close stale issues with "not bug" label
        uses: actions/stale@v8
        with:
          days-before-stale: 7
          days-before-close: 2
          stale-issue-message: 'This issue has been marked as stale due to inactivity.'
          close-issue-message: 'Closing this issue due to inactivity.'
          exempt-issue-labels: ''
          only-labels: 'not bug'
          operations-per-run: 30
          remove-stale-when-updated: true

If you like this behavior, I can PR immediately.

I can also disable comments, as notifications can become noisy.

Hi @EdamAme-x

If you like this behavior, I can PR immediately.

I love this idea ❤

I can also disable comments, as notifications can become noisy.

Can I see the repo which uses a similar workflow?

hmm...
Major repositories (such as Dart) seem to have messages set up.
However, messages can still bloat the volume of notifications.


Fixes #19154 missing permissions for k3b

Description of changes

Things done

Built on platform(s)

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

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

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

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

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[ ] Fits CONTRIBUTING.md.

Thank you @ngiger :heart:

This pull request has been mentioned on NixOS Discourse. There might be relevant details there:
https://discourse.nixos.org/t/prs-ready-for-review/1016/8

I took another look at this and realized I glossed over it too quickly before. You don't guard the configuration with mkIf so if we merge this it will install k3b on every machine running NixOS regardless of whether they set programs.k3b.enable or not.
How about this?

Thanks for bringing this problem to my attention. As a novice user of NixOS I did not test the case, where I disabled this option.

Thanks for bringing this problem to my attention. As a novice user of NixOS I did not test the case, where I disabled this option.

Absolutely no problem. Never hesitate to ping if you have module related questions!
 Can you please change the commit message to "nixos/k3b: init" to follow our commit message convention?
Thank you!

Added your suggestion to the commit message, but appended the old text to make it clear, why we need to add k3b as a module

Fantastic! I'll merge once checks are complete. Thank you very much for doing this.


Example website: Daunt Books

http://www.dauntbooks.co.uk/

Website in one png file is saved using Firefox command line
in Firefox, press shift-F2 to open command line
screenshot dauntbooks.png --fullpage


add logging

added logging
added tests for logging
missing words will raise a warning if percentage is > allowed_missing_percentage instead of an expection
missing words will always be logged when the logger is set to INFO level
default allowed_missing_percentage is now set to 10.

Hi @niekdejonge here's finally the update to include logging and make spec2vec less strict by default when it comes to missing words. This PR also includes some unrelated things (e.g. isort update/config...). But maybe you can check if the new defaults and logging makes sense to you.

Thanks for the feedback @niekdejonge


Documentation has some problems for auto-aliases

Hello,
I noticed that there is a problem in the docs. Here
In this section:
whitelist: [
                    "posts.*",
                    "test.*"
                ],

That should be v2.posts.* instead of it. I tried it on my local then it didn't create the aliases. So I saw this issue and fixed it: #239
But if you can fix it, it will be awesome. I don't know where the docs is (which repo and which path). If you can let me know, I can create a PR too.
Thanks.

Also I'd like to add that it doesn't create alias for /api/v2/... it creates as /api/service_name
You can see this screenshot:

I also figured that when I comment the settings: rest: it creates the alias for /api/v2/... and that solved my problem. However I want you to fix it in the docs.

I don't know where the docs is (which repo and which path). If you can let me know, I can create a PR too.

Hi @unitythemaker the docs for API gateway are located here: https://github.com/moleculerjs/site/blob/master/source/docs/0.14/moleculer-web.md
You can clone the site repo and update the docs. More info here

Thanks, I created a PR: moleculerjs/site#142


Add codecov

Description
Adds CodeCov tool for eval

Welcome to Codecov :tada:
Once merged to your default branch, Codecov will compare your coverage reports and display the results in this comment.
Thanks for integrating Codecov - We've got you covered :open_umbrella:


cmd/compile: inefficient assembly code on arm64

What version of Go are you using (go version)?

$ go version
go version go1.16beta1 darwin/arm64

Does this issue reproduce with the latest release?
Yes
What operating system and processor architecture are you using (go env)?
go env Output
$ go env
GO111MODULE=""
GOARCH="arm64"
GOBIN=""
GOCACHE="/Users/frank/Library/Caches/go-build"
GOENV="/Users/frank/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="arm64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/frank/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/frank/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_arm64"
GOVCS=""
GOVERSION="go1.16beta1"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/dev/null"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/73/zsswhtt91kd0_dk_l4k7kntr0000gn/T/go-build3479900954=/tmp/go-build -gno-record-gcc-switches -fno-common"

What did you do?
Compile this code with:
go build -gcflags -S lomuto.go
https://play.golang.org/p/F8fPWbzvDRO
What did you expect to see?
with clang -O3 -S
I see a tight inner loop between LBB0_2 and LBB0_5 with very minimal instructions
; %bb.0:
	ldrb	w8, [x0, x2]
	cmp	x1, x2
	b.hs	LBB0_6
; %bb.1:
	sub	x9, x2, x1
	add	x10, x0, x1
	b	LBB0_3
LBB0_2:                                 ;   in Loop: Header=BB0_3 Depth=1
	add	x10, x10, #1            ; =1
	subs	x9, x9, #1              ; =1
	b.eq	LBB0_5
LBB0_3:                                 ; =>This Inner Loop Header: Depth=1
	ldrb	w11, [x10]
	cmp	w11, w8
	b.hs	LBB0_2
; %bb.4:                                ;   in Loop: Header=BB0_3 Depth=1
	ldrb	w12, [x0, x1]
	strb	w11, [x0, x1]
	strb	w12, [x10]
	add	x1, x1, #1              ; =1
	b	LBB0_2
LBB0_5:
	ldrb	w8, [x0, x2]
LBB0_6:
	ldrb	w9, [x0, x1]
	strb	w8, [x0, x1]
	strb	w9, [x0, x2]
	mov	x0, x1
	ret

What did you see instead?
I see excessive register usage and many more instructions between address 64 and 124
	0x001c 00028 (lomuto.go:13)	MOVD	"".hi+32(FP), R0
	0x0020 00032 (lomuto.go:13)	MOVD	"".arr+8(FP), R1
	0x0024 00036 (lomuto.go:13)	CMP	R1, R0
	0x0028 00040 (lomuto.go:13)	BHS	184
	0x002c 00044 (lomuto.go:13)	MOVD	"".arr(FP), R2
	0x0030 00048 (lomuto.go:13)	MOVBU	(R2)(R0), R3
	0x0034 00052 (lomuto.go:15)	MOVD	"".lo+24(FP), R4
	0x0038 00056 (lomuto.go:17)	MOVD	R4, R5
	0x003c 00060 (lomuto.go:15)	JMP	72
	0x0040 00064 (lomuto.go:15)	ADD	$1, R4, R4
	0x0044 00068 (lomuto.go:16)	MOVD	R7, R3
	0x0048 00072 (lomuto.go:15)	CMP	R4, R0
	0x004c 00076 (lomuto.go:15)	BLS	128
	0x0050 00080 (lomuto.go:16)	MOVBU	(R2)(R4), R6
	0x0054 00084 (lomuto.go:16)	MOVD	R3, R7
	0x0058 00088 (lomuto.go:16)	MOVD	R6, R8
	0x005c 00092 (lomuto.go:16)	CMPW	R8, R3
	0x0060 00096 (lomuto.go:16)	BLS	64
	0x0064 00100 (lomuto.go:17)	CMP	R5, R1
	0x0068 00104 (lomuto.go:17)	BLS	176
	0x006c 00108 (lomuto.go:17)	MOVBU	(R2)(R5), R3
	0x0070 00112 (lomuto.go:17)	MOVB	R6, (R2)(R5)
	0x0074 00116 (lomuto.go:17)	MOVB	R3, (R2)(R4)
	0x0078 00120 (lomuto.go:18)	ADD	$1, R5, R5
	0x007c 00124 (lomuto.go:18)	JMP	64
	0x0080 00128 (lomuto.go:21)	CMP	R5, R1
	0x0084 00132 (lomuto.go:21)	BLS	168

I dug into the details a bit further. The code seems optimal when
arr changes back to uint32 or uint64 in arr []uint8.
The culprit are the rewrite rules in
ARM64.rules
where it states:
(Less8U x y)  => (LessThanU (CMPW (ZeroExt8to32 x) (ZeroExt8to32 y)))
(Less16U x y) => (LessThanU (CMPW (ZeroExt16to32 x) (ZeroExt16to32 y)))
(Less32U x y) => (LessThanU (CMPW x y))
(Less64U x y) => (LessThanU (CMP x y))
Since x and y are already loaded from memory as a single byte and is zero extended
by default, those zero extensions introduce additional superfluous register movements.
Any ideas how to fix this?

Maybe we can add rules of the form (Less8U x:(MOVBUload _ _) y:(MOVBUload _ _)) => (LessThanU (CMPW x y)) to absorb the zero-extensions to fix this case.
And  there are so many other rules that generate zero-extensions, for example, (Div16u x y) => (UDIVW (ZeroExt16to32 x) (ZeroExt16to32 y)) ,for this rule,  if x or y are already loaded from memory as half a word and they are also zero extended.
If we want to add the above rewirte rules to fix these problems, we need too many. Any other good ideas to fix them? Thank you. @randall77 @cherrymui
BTW, if @fkuehnel requires this case to have a efficient assembly code soon, I can submit a patch to add above rewrite rules to fix it.

I had hoped that tight loop code inefficiencies would have been addressed by now, Go 1.19.2, still we have 3 more instructions injected with the ARM64 code because the code generator has no means to understand that loading an 8/16 bit byte/half-word zeros the rest of the Rx registers...
good compile with 64/32 bit word, double word:
    0x0030 00048 (lomuto.go:39)     MOVD    (R0)(R4<<3), R2
    ...
    0x004c 00076 (lomuto.go:43)     MOVD    (R0)(R3<<3), R7
    0x0050 00080 (lomuto.go:45)     CMP     R2, R7

bad compile with 8/16 bit byte/half-word: (3 unnecessary operations)
0x0030 00048 (lomuto.go:39)     MOVBU   (R0)(R4), R2
...
0x004c 00076 (lomuto.go:43)     MOVBU   (R0)(R3), R7
0x0050 00080 (lomuto.go:45)     MOVD    R7, R8
0x0054 00084 (lomuto.go:45)     MOVD    R2, R9
0x0058 00088 (lomuto.go:45)     CMPW    R8, R2
...
0x0078 00120 (lomuto.go:45)     MOVD    R9, R2


[packaging] Allow installing the package on SysV-init systems

What does this PR do?
Allows installing the Linux packages on SysV-init-based systems.
Motivation
It's legitimate to want to install the packaged agent even if we don't
provide scripts/service defs for the init system of the system.
Let's remove the failure exits that we do when we don't detect a
supported init system, and simply print errors.
Additional Notes
Up for discussion. Exiting with errors makes the lack of support more explicit
so could be more desirable

Exiting with errors makes the lack of support more explicit so could be more desirable

That's a really strong argument - perhaps strong enough to maintain the exit 1, especially if we're displaying ${Red}FAILED. That's a statement.
That said, failing outright due to SysV is a bad smell, so perhaps there's a middle ground. Instead of 🛑, why not ⚠ with a more verbose message? Example:
echo "[ ${Yellow}WARNING ${RCol}]\tUnsupported init system detected; datadog-agent supports systemd only."

Good point, I'll update the message so that it's more explicit, and with a WARNING severity


Chown root group (0) for OpenShift

Fixes Issue
#2949
Description of Change
As per https://docs.openshift.com/enterprise/3.2/creating_images/guidelines.html, to support Arbitrary User IDs.
For an image to support running as an arbitrary user, directories and files that may be written to by processes in the image should be owned by the root group and be read/writable by that group. Files to be executed should also have group execute permissions.
Because the container user is always a member of the root group, the container user can read and write these files. The root group does not have any special permissions (unlike the root user) so there are no security concerns with this arrangement.
Have test cases been added to cover the new functionality?
no

Thanks for the PR!


import-configuration.md: fix go get command

Hello,
I was following your great tutorial at https://cuetorials.com but then ran into an issue in the first steps when the tutorial shows how to import Go to Cue. The issue there is the go get -u command. Setting the update flag can make it fail because Go pull updates which do not seem to be compatible. For details on the issue please have a look at kubernetes/apimachinery#121.
Last but not least thanks you the tutorials. It makes learning cue very enjoyable :)

Thanks @fgrosse, glad you are finding these useful!


Upgrade clap to v4

Description
The major update of clap from v3 to v4 comes with code-breaking changes.
See #1236.
Proposed changes
Refactor youki's CLI just enough to bring in clap v4 and allow dependabot to manage the dependency once more.
In order to upgrade clap, I had followed the migration guide:
https://github.com/clap-rs/clap/blob/master/CHANGELOG.md#400---2022-09-28
This upgrade does change the --help output a little bit. I assume this is the full list of changes, but I could be mistaken:
https://github.com/clap-rs/clap/issues/4132
As part of my testing, I ran make test-all and followed the user guide to build and run a container. Some tests are failing locally for me, but these same tests are failing for me on the main branch. I haven't yet determined if that is due to my local development environment (Fedora 36) or not.

Codecov Report

Merging #1443 (25823c9) into main (930e348) will decrease coverage by 0.15%.
The diff coverage is n/a.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1443      +/-   ##
==========================================
- Coverage   69.00%   68.85%   -0.16%
==========================================
  Files         119      119
  Lines       13041    13068      +27
==========================================
- Hits         8999     8998       -1
- Misses       4042     4070      +28

Hey @Overflow0xFFFF Thanks a lot for PR. Sorry for delay in checking.
Can you let know which tests are failing for you, so we can see what is the issue (because CI is passing all tests)
Also, when you say that you refactored the CLI, can you tell what changes (apart from the ones in clap builder args) have you made?
Also please sign your PR, so DCO check can pass.
Thanks!

Thank you for the feedback, @YJDoc2!
I'm seeing odd test failures. The one that appears most often is test utils::tests::test_is_executable. This one seems to fail every time when running make test-all. I see it whenever I run make unittest and make featuretest directly. When running make oci-tests, I see this error message:
Running delete_only_create_resources/delete_only_create_resources.t
TAP version 13
open /sys/fs/cgroup/pids/cgrouptest/tasks: no such file or directory

Since these same tests seem to run fine in the Ubuntu-based GitHub Actions workflow, I think I have to conclude that it might be my development environment running on Fedora 36. I noticed that the Vagrantfile currently uses a Fedora 33 image, which is no longer available. Might be a good candidate for another contribution?
As for refactoring the CLI, I was very careful not to make any unnecessary changes. The only refactoring I needed to do was to change out some deprecated macros for their replacements. The only place I'm uncertain about is in tests/rust-integration-tests/integration_test/src/main.rs because the first CI run showed a failure in the integration tests.

Thank you for the feedback, @YJDoc2!
I'm seeing odd test failures. The one that appears most often is test utils::tests::test_is_executable. This one seems to fail every time when running make test-all. I see it whenever I run make unittest and make featuretest directly. When running make oci-tests, I see this error message:
Running delete_only_create_resources/delete_only_create_resources.t
TAP version 13
open /sys/fs/cgroup/pids/cgrouptest/tasks: no such file or directory

Since these same tests seem to run fine in the Ubuntu-based GitHub Actions workflow, I think I have to conclude that it might be my development environment running on Fedora 36. I noticed that the Vagrantfile currently uses a Fedora 33 image, which is no longer available. Might be a good candidate for another contribution?
As for refactoring the CLI, I was very careful not to make any unnecessary changes. The only refactoring I needed to do was to change out some deprecated macros for their replacements. The only place I'm uncertain about is in tests/rust-integration-tests/integration_test/src/main.rs because the first CI run showed a failure in the integration tests.

Thanks for your PR. I think this PR is going to be fixed by https://github.com/containers/youki/pull/1406


update to actions/checkout@v4

A simple update of checkout from v3 to v4.
As long as Dependabot is not used by default (#396) these often won't be updated after creation, so good to keep them up to date here.

Duplicate of #427 ?


Career Counselor issue @1

Poor job options; low salary, poor career ladder.

Can we make a lists of data analyst scenarios?


Correct ITERATION_RESET_BOUNDARY value?

I was comparing your implementation to https://github.com/edubkendo/supermemo/blob/master/lib/supermemo.ex, and I see that your ITERATION_RESET_BOUNDARY is 3/5 = 0.6 while the other implementation uses 0.4.
I don't know the SM2 algo well enough to say which is right, or whether it's just a weighting that can be adjusted.  Can you confirm?

Hello, this is a blast from the past!
I can only speak for my implementation, which is based on the SM2 algorithm as described on this page.  This is extracted from the original paper.  Step 6 states,

If the quality response was lower than 3 then start repetitions for the item from the beginning without changing the E-Factor (i.e. use intervals I(1), I(2) etc. as if the item was memorized anew).

This is where I got the value 3 in the 3/5 you noted.  There is a bit of room for interpretation, though, as the quality responses Wozniak describes are integer values in the range 0-6, whereas I normalise the quality response value to a real (well, floating point) value between 0 and 1.  You could legitimately interpret "lower than 3" to mean "less than 0.6" (as I did), "less than half" (since in his description, the bottom half 0-2 all fall under it and the top half 3-5 are over it), or "less than or equal to 0.4" (which is essentially the inverse of my interpretation).
If the input into the normalised score is an integer value in the range 0-5, then it shouldn't matter which of these interpretations you pick -- the only values you'll get in are 0, 0.2, 0.4, 0.6, 0.8, or 1.0, and with that set of possible values the three interpretations I enumerated above are equivalent.  However, if you use a different scoring system (as I do), then you will start to see a difference in how the scheduling algorithm responds to these differing interpretations.  If you skew high (closer to 0.6, like my version), it means that even moderate recall results in having to review the card more frequently.  If you skew low (closer to 0.4, like @edubkendo), the algorithm is more "forgiving"; you would have to do more badly to be forced to review the card more frequently.
I believe any value in the range > 0.4 and < 0.6 is a valid interpretation of the SM2 algorithm, so after that it's a question of personal preference and tweaking.  Of course, you could tweak it outside of this range if you like, but arguably it wouldn't be SM2 any more.  I suppose If you want to go down that road, you could also argue that it isn't SM2 either if you don't quantise your scores to the SM2 values of 0, 0.2, 0.4, 0.6, 0.8 and 1.
Hope that's helpful/interesting!  I consider this project essentially abandoned, so I don't plan on updating it or tweaking this value any further, but feel free to fork it and try out different values if you want, or to use it as a basis for any of your own stuff!
I've also dropped @edubkendo a note in case he would like to chime in with his own thinking.

Wow, I appreciate your thoughtful reply.  Very interesting and helpful to me.

I consider this project essentially abandoned

That's fine, I'm curious if you found something better, or if you left the system for some reason (low perceived value or ROI).

Nope, I just got sidetracked and moved on to other things. I actually still think the idea of a scriptable SRS, configured by "models" which describe the testing mechanism, and "schedulers" which control the spacing of the repetition, is a good design. The only model I implemented here is flash cards, but at one point I was considering having one which displays sheet music and reads in input from a MIDI device to score you automatically when practicing piano, or a hook into vim golf which would score you based on how many keystrokes it took you to solve a particular puzzle. There's quite a lot of potential there for somebody who wants to take the idea and run with it. But, for now at least, that person isn't me :-)

Excellent read. I agree with your last statement.. so much potential!


Client instance duplicate identifier

Description
When generating a client instance, I'm running into a duplicate identifier
export class AuthClient {
  public readonly model: ModelService;
  public readonly request: RequestService;

  public readonly request: BaseHttpRequest;

  constructor(
    config?: Partial<OpenAPIConfig>,
    HttpRequest: HttpRequestConstructor = FetchHttpRequest
  ) {
    this.request = new HttpRequest({
      BASE: config?.BASE ?? '',
      VERSION: config?.VERSION ?? '2',
      WITH_CREDENTIALS: config?.WITH_CREDENTIALS ?? false,
      CREDENTIALS: config?.CREDENTIALS ?? 'include',
      TOKEN: config?.TOKEN,
      USERNAME: config?.USERNAME,
      PASSWORD: config?.PASSWORD,
      HEADERS: config?.HEADERS,
      ENCODE_PATH: config?.ENCODE_PATH,
      interceptors: {
        request: config?.interceptors?.request ?? new Interceptors(),
        response: config?.interceptors?.response ?? new Interceptors(),
      },
    });

    this.model = new ModelService(this.request);
    this.request = new RequestService(this.request);
  }
}

public readonly request: BaseHttpRequest; collides with the generated public readonly request: RequestService;
I'm not sure what naming conventions you have planned, but it would be great if naming conventions for either the generated services or the baseHttpRequest had no chance of collisions.
OpenAPI specification (optional)
No response
Configuration
export default defineConfig({
  name: 'AuthClient',
});

System information (optional)
No response

Hey @bkdiehl, will you able to migrate to the new Fetch API client? You can view a demo to see it in action. It shouldn't be suffering from this issue.


Partitioned Containers not available to WebAPI

I have created an interval-based partition of a COLLECTION container to introduce partition expiry functionality, but now my WEB API cannot interact with the container at all.
##Environment
Ubuntu: 22
GridDB:  "5.0.0-39331 CE"
Web API:  2.2.0
gs[public]> showcontainer RAWLOG_agent_tests
Database    : public
Name        : RAWLOG_agent_tests
Type        : COLLECTION
Partition ID: 78
DataAffinity: -
Partitioned : true
Partition Type           : INTERVAL
Partition Column         : ts
Partition Interval Value : 30
Partition Interval Unit  : DAY
Expiration Type      : PARTITION
Expiration Time      : 30
Expiration Time Unit : DAY

Columns:
No  Name                  Type            CSTR  RowKey
------------------------------------------------------------------------------
 0  ts                    TIMESTAMP       NN
 1  hostname              STRING
 2  logtype               STRING
 3  value                 STRING
 4  path                  STRING

$ curl -X POST --basic -u admin:admin  -H "Content-type: application/json" -d '{"limit":2}' 'http://localhost:8080/griddb/v2/myCluster/dbs/public/containers/RAWLOG_agent_tests/rows'
{"version":"v2","errorCode":0,"errorMessage":"Container not existed"}

Any ideas?

GridDB Java client has supported operations on partitioned tables since version 4.5.2.
But GridDB WebAPI 2.2.0 depends on GridDB Java client 4.5.0.
So, we can't operate partitioned tables with it.
I have released GridDB WebAPI 5.5.0 recently.
It depends on GridDB Java client 5.5.0.
Could you try the following method: (A) or (B) ?
(A) Changing all of the following versions to 5.3.0 for GridDB WebAPI 2.2.0

webapi-ce/build.gradle
  gridstoreVersion
  gridstoreJdbcVersion
common/build.gradle
  gridstoreVersion

(B) Using GridDB WebAPI 5.5.0

Thank you, both A and B works for me


Standardize common widgets

Conduct an audit of all the widgets we have and combine the high-reuse widgets.
For example, the back arrow. It will be the same everywhere. There should not be many and the ones we do this for should not have tons of configuration properties (~ 3 or less).

closing in favor of #309


Download resume not working

I'm trying to embed your torrent library on a android application. It's working very well but I'm facing a problem whenever I try to resume the download of a torrent that were forced to stop due to the application being closed.
What the program does is:

Starts downloading of a torrent file;
It starts fine and is downloading correctly;
Application is closed
Application is reopened
We (re)start the torrent that were stopped before
It runs correctly until the point where he tries to read messages from the peers (log below)

The problem below is happening to all peers, and that happens before anything is downloaded, no piece is completed.
03-15 03:03:24.761: I/System.out(2303): 10945 [bt-peer(..6B7030)-recv] DEBUG com.turn.ttorrent.client.peer.PeerExchange  - Could not read message from peer://<IP_ADDRESS>:51413/6b7030 [Ci|CI|730]: Unexpected end-of-stream while reading
03-15 03:03:24.761: I/System.out(2303): 10946 [bt-peer(..6B7030)-recv] DEBUG com.turn.ttorrent.client.peer.PeerExchange  - Peer exchange with peer://<IP_ADDRESS>:51413/6b7030 [Ci|CI|730] closed.

Log of only this peer:
03-15 03:03:23.169: I/System.out(2303): 9353 [bt-connect-13] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:51413/? [Ci|Ci|0]...
03-15 03:03:23.361: I/System.out(2303): 9547 [bt-connect-13] DEBUG com.turn.ttorrent.client.ConnectionHandler  - Connected. Sending handshake to peer://<IP_ADDRESS>:51413/? [Ci|Ci|0]...
03-15 03:03:24.241: I/System.out(2303): 10426 [bt-connect-13] INFO com.turn.ttorrent.client.ConnectionHandler  - Handshaked with peer://<IP_ADDRESS>:51413/? [Ci|Ci|0], peer ID is 2d5452323832302d61326f6e313530636d6b7030.
03-15 03:03:24.241: I/System.out(2303): 10427 [bt-connect-13] INFO com.turn.ttorrent.client.Client  - Handling new peer connection with peer://<IP_ADDRESS>:51413/6b7030...
03-15 03:03:24.245: I/System.out(2303): 10429 [bt-connect-13] DEBUG com.turn.ttorrent.client.Client  - Found peer (by host ID): peer://<IP_ADDRESS>:51413/6b7030 [Ci|Ci|0].
03-15 03:03:24.265: I/System.out(2303): 10449 [bt-connect-13] DEBUG com.turn.ttorrent.client.peer.PeerExchange  - Started peer exchange with peer://<IP_ADDRESS>:51413/6b7030 [Ci|Ci|0] for How I Met Your Mother S09E18 HDTV x264-EXCELLENCE[ettv].
03-15 03:03:24.269: I/System.out(2303): 10452 [bt-connect-13] DEBUG com.turn.ttorrent.client.Client  - New peer connection with peer://<IP_ADDRESS>:51413/6b7030 [Ci|Ci|0] [2/28].
03-15 03:03:24.761: I/System.out(2303): 10945 [bt-peer(..6B7030)-recv] DEBUG com.turn.ttorrent.client.peer.PeerExchange  - Could not read message from peer://<IP_ADDRESS>:51413/6b7030 [Ci|CI|730]: Unexpected end-of-stream while reading
03-15 03:03:24.761: I/System.out(2303): 10946 [bt-peer(..6B7030)-recv] DEBUG com.turn.ttorrent.client.peer.PeerExchange  - Peer exchange with peer://<IP_ADDRESS>:51413/6b7030 [Ci|CI|730] closed.
03-15 03:03:24.769: I/System.out(2303): 10954 [bt-peer(..6B7030)-recv] DEBUG com.turn.ttorrent.client.SharedTorrent  - Peer peer://<IP_ADDRESS>:51413/6b7030 [Ci|CI|730] went away with 730 piece(s) [completed=35; available=0/730]
03-15 03:03:24.769: I/System.out(2303): 10955 [bt-peer(..6B7030)-recv] DEBUG com.turn.ttorrent.client.Client  - Peer peer://<IP_ADDRESS>:51413/6b7030 [Ci|CI|730] disconnected, [0/28].

Log when it runs correctly (first time):
03-15 03:34:48.181: I/System.out(2535): 9744 [bt-connect-8] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:35668/? [Ci|Ci|0]...
03-15 03:34:48.401: I/System.out(2535): 9962 [bt-connect-8] DEBUG com.turn.ttorrent.client.ConnectionHandler  - Connected. Sending handshake to peer://<IP_ADDRESS>:35668/? [Ci|Ci|0]...
03-15 03:34:48.649: I/System.out(2535): 10209 [bt-connect-8] INFO com.turn.ttorrent.client.ConnectionHandler  - Handshaked with peer://<IP_ADDRESS>:35668/? [Ci|Ci|0], peer ID is 4d372d382d322d2d7c76537b4444a41088c0b420.
03-15 03:34:48.649: I/System.out(2535): 10210 [bt-connect-8] INFO com.turn.ttorrent.client.Client  - Handling new peer connection with peer://<IP_ADDRESS>:35668/c0b420...
03-15 03:34:48.649: I/System.out(2535): 10212 [bt-connect-8] DEBUG com.turn.ttorrent.client.Client  - Found peer (by host ID): peer://<IP_ADDRESS>:35668/c0b420 [Ci|Ci|0].
03-15 03:34:48.673: I/System.out(2535): 10236 [bt-connect-8] DEBUG com.turn.ttorrent.client.peer.PeerExchange  - Started peer exchange with peer://<IP_ADDRESS>:35668/c0b420 [Ci|Ci|0] for How I Met Your Mother S09E18 HDTV x264-EXCELLENCE[ettv].
03-15 03:34:48.685: I/System.out(2535): 10239 [bt-connect-8] DEBUG com.turn.ttorrent.client.Client  - New peer connection with peer://<IP_ADDRESS>:35668/c0b420 [Ci|Ci|0] [3/27].
03-15 03:34:50.525: I/System.out(2535): 12086 [bt-client(..376262)] DEBUG com.turn.ttorrent.client.Client  -   | peer://<IP_ADDRESS>:35668/c0b420 [ci|cI|730] (downloading piece#  14-)
03-15 03:34:53.545: I/System.out(2535): 15106 [bt-client(..376262)] DEBUG com.turn.ttorrent.client.Client  -   | peer://<IP_ADDRESS>:35668/c0b420 [ci|cI|730] (downloading piece#  14-)
03-15 03:34:56.561: I/System.out(2535): 18121 [bt-client(..376262)] DEBUG com.turn.ttorrent.client.Client  -   | peer://<IP_ADDRESS>:35668/c0b420 [ci|cI|730] (downloading piece#  14-)
03-15 03:34:59.573: I/System.out(2535): 21135 [bt-client(..376262)] DEBUG com.turn.ttorrent.client.Client  -   | peer://<IP_ADDRESS>:35668/c0b420 [ci|cI|730] (downloading piece#  14-)
03-15 03:35:02.593: I/System.out(2535): 24153 [bt-client(..376262)] DEBUG com.turn.ttorrent.client.Client  -   | peer://<IP_ADDRESS>:35668/c0b420 [ci|cI|730] (downloading piece#  14-)
03-15 03:35:02.605: I/System.out(2535): 24165 [bt-peer(..C0B420)-recv] DEBUG com.turn.ttorrent.client.Client  - Completed download of piece#  14+ from peer://<IP_ADDRESS>:35668/c0b420 [ci|cI|730]. We now have 1/730 pieces

Full log:
03-15 03:03:13.817: I/System.out(2303): 0 [AsyncTask #2] INFO com.turn.ttorrent.common.Torrent  - Multi-file torrent information:
03-15 03:03:13.817: I/System.out(2303): 1 [AsyncTask #2] INFO com.turn.ttorrent.common.Torrent  -   Torrent name: How I Met Your Mother S09E18 HDTV x264-EXCELLENCE[ettv]
03-15 03:03:13.817: I/System.out(2303): 2 [AsyncTask #2] INFO com.turn.ttorrent.common.Torrent  -   Announced at:
03-15 03:03:13.821: I/System.out(2303): 5 [AsyncTask #2] INFO com.turn.ttorrent.common.Torrent  -      1. udp://tracker.publicbt.com:80/announce
03-15 03:03:13.829: I/System.out(2303): 8 [AsyncTask #2] INFO com.turn.ttorrent.common.Torrent  -      2. udp://tracker.openbittorrent.com:80/announce
03-15 03:03:13.829: I/System.out(2303): 12 [AsyncTask #2] INFO com.turn.ttorrent.common.Torrent  -      3. udp://tracker.istole.it:80/announce
03-15 03:03:13.833: I/System.out(2303): 16 [AsyncTask #2] INFO com.turn.ttorrent.common.Torrent  -      4. udp://9.rarbg.com:2710/announce
03-15 03:03:13.837: I/System.out(2303): 20 [AsyncTask #2] INFO com.turn.ttorrent.common.Torrent  -      5. udp://tracker.token.ro:80/announce
03-15 03:03:13.837: I/System.out(2303): 22 [AsyncTask #2] INFO com.turn.ttorrent.common.Torrent  -      6. udp://ipv4.tracker.harry.lu:80/announce
03-15 03:03:13.841: I/System.out(2303): 25 [AsyncTask #2] INFO com.turn.ttorrent.common.Torrent  -      7. udp://exodus.desync.com:6969/announce
03-15 03:03:13.841: I/System.out(2303): 26 [AsyncTask #2] INFO com.turn.ttorrent.common.Torrent  -      8. http://tracker.nwps.ws:6969/announce
03-15 03:03:13.845: I/System.out(2303): 28 [AsyncTask #2] INFO com.turn.ttorrent.common.Torrent  -      9. udp://tracker.secureboxes.net:80/announce
03-15 03:03:13.845: I/System.out(2303): 30 [AsyncTask #2] INFO com.turn.ttorrent.common.Torrent  -     10. udp://pow7.com:80/announce
03-15 03:03:13.849: I/System.out(2303): 34 [AsyncTask #2] INFO com.turn.ttorrent.common.Torrent  -   Created on..: Tue Feb 25 01:32:11 GMT+00:00 2014
03-15 03:03:13.849: I/System.out(2303): 34 [AsyncTask #2] INFO com.turn.ttorrent.common.Torrent  -   Comment.....: Torrent downloaded from torrent cache at http://torcache.net/
03-15 03:03:13.853: I/System.out(2303): 36 [AsyncTask #2] INFO com.turn.ttorrent.common.Torrent  -   Created by..: ruTorrent (PHP Class - Adrien Gibrat)
03-15 03:03:13.853: I/System.out(2303): 37 [AsyncTask #2] INFO com.turn.ttorrent.common.Torrent  -   Found 2 file(s) in multi-file torrent structure.
03-15 03:03:13.853: I/System.out(2303): 39 [AsyncTask #2] DEBUG com.turn.ttorrent.common.Torrent  -      1. How I Met Your Mother S09E18 HDTV x264-EXCELLENCE[ettv]/How.I.Met.Your.Mother.S09E18.HDTV.x264-EXCELLENCE.mp4 (191,253,275 byte(s))
03-15 03:03:13.857: I/System.out(2303): 40 [AsyncTask #2] DEBUG com.turn.ttorrent.common.Torrent  -      2. How I Met Your Mother S09E18 HDTV x264-EXCELLENCE[ettv]/Torrent Downloaded From ExtraTorrent.cc.txt (339 byte(s))
03-15 03:03:13.857: I/System.out(2303): 42 [AsyncTask #2] INFO com.turn.ttorrent.common.Torrent  -   Pieces......: 730 piece(s) (262144 byte(s)/piece)
03-15 03:03:13.861: I/System.out(2303): 44 [AsyncTask #2] INFO com.turn.ttorrent.common.Torrent  -   Total size..: 191,253,614 byte(s)
03-15 03:03:13.869: I/System.out(2303): 54 [AsyncTask #2] DEBUG com.turn.ttorrent.client.storage.FileStorage  - Partial download found at /mnt/shared/outros/torrent/How I Met Your Mother S09E18 HDTV x264-EXCELLENCE[ettv]/How.I.Met.Your.Mother.S09E18.HDTV.x264-EXCELLENCE.mp4.part. Continuing...
03-15 03:03:13.873: I/System.out(2303): 57 [AsyncTask #2] INFO com.turn.ttorrent.client.storage.FileStorage  - Initialized byte storage file at /mnt/shared/outros/torrent/How I Met Your Mother S09E18 HDTV x264-EXCELLENCE[ettv]/How.I.Met.Your.Mother.S09E18.HDTV.x264-EXCELLENCE.mp4.part (0+191253275 byte(s)).
03-15 03:03:13.881: I/System.out(2303): 66 [AsyncTask #2] DEBUG com.turn.ttorrent.client.storage.FileStorage  - Partial download found at /mnt/shared/outros/torrent/How I Met Your Mother S09E18 HDTV x264-EXCELLENCE[ettv]/Torrent Downloaded From ExtraTorrent.cc.txt.part. Continuing...
03-15 03:03:13.885: I/System.out(2303): 70 [AsyncTask #2] INFO com.turn.ttorrent.client.storage.FileStorage  - Initialized byte storage file at /mnt/shared/outros/torrent/How I Met Your Mother S09E18 HDTV x264-EXCELLENCE[ettv]/Torrent Downloaded From ExtraTorrent.cc.txt.part (191253275+339 byte(s)).
03-15 03:03:13.889: I/System.out(2303): 71 [AsyncTask #2] INFO com.turn.ttorrent.client.storage.FileCollectionStorage  - Initialized torrent byte storage on 2 file(s) (191253614 total byte(s)).
03-15 03:03:13.893: I/System.out(2303): 77 [AsyncTask #2] INFO com.turn.ttorrent.client.ConnectionHandler  - Listening for incoming connections on localhost/<IP_ADDRESS>:6881.
03-15 03:03:13.965: I/System.out(2303): 151 [AsyncTask #2] INFO com.turn.ttorrent.client.announce.Announce  - Initialized announce sub-system with 10 trackers on How I Met Your Mother S09E18 HDTV x264-EXCELLENCE[ettv].
03-15 03:03:13.973: I/System.out(2303): 156 [AsyncTask #2] INFO com.turn.ttorrent.client.Client  - BitTorrent client [..666232] for How I Met Your Mother S09E18 HDTV x264-EXCELLENCE[ettv] started and listening at <IP_ADDRESS>:6881...
03-15 03:03:13.985: I/System.out(2303): 171 [bt-client(..666232)] INFO com.turn.ttorrent.client.SharedTorrent  - Analyzing local data for How I Met Your Mother S09E18 HDTV x264-EXCELLENCE[ettv] with 1 threads (730 pieces)...
03-15 03:03:14.941: I/System.out(2303): 1127 [bt-client(..666232)] INFO com.turn.ttorrent.client.SharedTorrent  -   ... 10% complete
03-15 03:03:15.853: I/System.out(2303): 2038 [bt-client(..666232)] INFO com.turn.ttorrent.client.SharedTorrent  -   ... 20% complete
03-15 03:03:16.753: I/System.out(2303): 2936 [bt-client(..666232)] INFO com.turn.ttorrent.client.SharedTorrent  -   ... 30% complete
03-15 03:03:17.609: I/System.out(2303): 3793 [bt-client(..666232)] INFO com.turn.ttorrent.client.SharedTorrent  -   ... 40% complete
03-15 03:03:18.449: I/System.out(2303): 4634 [bt-client(..666232)] INFO com.turn.ttorrent.client.SharedTorrent  -   ... 50% complete
03-15 03:03:19.273: I/System.out(2303): 5459 [bt-client(..666232)] INFO com.turn.ttorrent.client.SharedTorrent  -   ... 60% complete
03-15 03:03:20.125: I/System.out(2303): 6311 [bt-client(..666232)] INFO com.turn.ttorrent.client.SharedTorrent  -   ... 70% complete
03-15 03:03:20.965: I/System.out(2303): 7151 [bt-client(..666232)] INFO com.turn.ttorrent.client.SharedTorrent  -   ... 80% complete
03-15 03:03:21.801: I/System.out(2303): 7987 [bt-client(..666232)] INFO com.turn.ttorrent.client.SharedTorrent  -   ... 90% complete
03-15 03:03:22.629: I/System.out(2303): 8812 [bt-client(..666232)] DEBUG com.turn.ttorrent.client.SharedTorrent  - How I Met Your Mother S09E18 HDTV x264-EXCELLENCE[ettv]: we have 9175040/191253614 bytes (4.8%) [35/730 pieces].
03-15 03:03:22.629: I/System.out(2303): 8813 [bt-announce(..666232)] INFO com.turn.ttorrent.client.announce.Announce  - Starting announce loop...
03-15 03:03:22.629: I/System.out(2303): 8814 [bt-announce(..666232)] INFO com.turn.ttorrent.client.announce.UDPTrackerClient  - Announcing STARTED to tracker with 0U/0D/182078574L bytes...
03-15 03:03:22.641: I/System.out(2303): 8824 [bt-client(..666232)] INFO com.turn.ttorrent.client.Client  - SHARING 35/730 pieces (4.79%) [0/0] with 0/0 peers at 0.00/0.00 kB/s.
03-15 03:03:23.137: I/System.out(2303): 9320 [bt-announce(..666232)] INFO com.turn.ttorrent.client.announce.Announce  - Setting announce interval to 1855s per tracker request.
03-15 03:03:23.137: I/System.out(2303): 9320 [bt-announce(..666232)] INFO com.turn.ttorrent.client.Client  - Got 25 peer(s) in tracker response.
03-15 03:03:23.141: I/System.out(2303): 9324 [bt-connect-1] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:54076/? [Ci|Ci|0]...
03-15 03:03:23.141: I/System.out(2303): 9326 [bt-connect-2] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:62633/? [Ci|Ci|0]...
03-15 03:03:23.145: I/System.out(2303): 9329 [bt-connect-3] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:10263/? [Ci|Ci|0]...
03-15 03:03:23.145: I/System.out(2303): 9331 [bt-connect-4] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:19199/? [Ci|Ci|0]...
03-15 03:03:23.149: I/System.out(2303): 9334 [bt-connect-5] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:60857/? [Ci|Ci|0]...
03-15 03:03:23.153: I/System.out(2303): 9337 [bt-connect-6] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:33232/? [Ci|Ci|0]...
03-15 03:03:23.153: I/System.out(2303): 9339 [bt-connect-7] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:50878/? [Ci|Ci|0]...
03-15 03:03:23.157: I/System.out(2303): 9341 [bt-connect-8] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:63882/? [Ci|Ci|0]...
03-15 03:03:23.157: I/System.out(2303): 9343 [bt-connect-9] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:12500/? [Ci|Ci|0]...
03-15 03:03:23.161: I/System.out(2303): 9346 [bt-connect-10] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:60886/? [Ci|Ci|0]...
03-15 03:03:23.165: I/System.out(2303): 9348 [bt-connect-11] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:51189/? [Ci|Ci|0]...
03-15 03:03:23.165: I/System.out(2303): 9350 [bt-connect-12] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:61302/? [Ci|Ci|0]...
03-15 03:03:23.169: I/System.out(2303): 9353 [bt-connect-13] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:51413/? [Ci|Ci|0]...
03-15 03:03:23.173: I/System.out(2303): 9356 [bt-connect-14] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:18727/? [Ci|Ci|0]...
03-15 03:03:23.173: I/System.out(2303): 9358 [bt-connect-15] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:20376/? [Ci|Ci|0]...
03-15 03:03:23.177: I/System.out(2303): 9361 [bt-connect-16] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:30308/? [Ci|Ci|0]...
03-15 03:03:23.177: I/System.out(2303): 9363 [bt-connect-17] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:27311/? [Ci|Ci|0]...
03-15 03:03:23.181: I/System.out(2303): 9366 [bt-connect-18] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:35336/? [Ci|Ci|0]...
03-15 03:03:23.185: I/System.out(2303): 9368 [bt-connect-19] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:38470/? [Ci|Ci|0]...
03-15 03:03:23.185: I/System.out(2303): 9371 [bt-connect-20] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:47641/? [Ci|Ci|0]...
03-15 03:03:23.361: I/System.out(2303): 9547 [bt-connect-13] DEBUG com.turn.ttorrent.client.ConnectionHandler  - Connected. Sending handshake to peer://<IP_ADDRESS>:51413/? [Ci|Ci|0]...
03-15 03:03:23.365: I/System.out(2303): 9548 [bt-connect-13] DEBUG com.turn.ttorrent.client.ConnectionHandler  - Sent handshake (68 bytes), waiting for response...
03-15 03:03:23.453: I/System.out(2303): 9637 [bt-connect-15] DEBUG com.turn.ttorrent.client.ConnectionHandler  - Connected. Sending handshake to peer://<IP_ADDRESS>:20376/? [Ci|Ci|0]...
03-15 03:03:23.453: I/System.out(2303): 9638 [bt-connect-15] DEBUG com.turn.ttorrent.client.ConnectionHandler  - Sent handshake (68 bytes), waiting for response...
03-15 03:03:23.481: I/System.out(2303): 9665 [bt-connect-5] DEBUG com.turn.ttorrent.client.ConnectionHandler  - Connected. Sending handshake to peer://<IP_ADDRESS>:60857/? [Ci|Ci|0]...
03-15 03:03:23.481: I/System.out(2303): 9666 [bt-connect-5] DEBUG com.turn.ttorrent.client.ConnectionHandler  - Sent handshake (68 bytes), waiting for response...
03-15 03:03:23.521: I/System.out(2303): 9705 [bt-connect-8] DEBUG com.turn.ttorrent.client.ConnectionHandler  - Connected. Sending handshake to peer://<IP_ADDRESS>:63882/? [Ci|Ci|0]...
03-15 03:03:23.521: I/System.out(2303): 9705 [bt-connect-8] DEBUG com.turn.ttorrent.client.ConnectionHandler  - Sent handshake (68 bytes), waiting for response...
03-15 03:03:23.565: I/System.out(2303): 9749 [bt-connect-9] DEBUG com.turn.ttorrent.client.ConnectionHandler  - Connected. Sending handshake to peer://<IP_ADDRESS>:12500/? [Ci|Ci|0]...
03-15 03:03:23.565: I/System.out(2303): 9750 [bt-connect-9] DEBUG com.turn.ttorrent.client.ConnectionHandler  - Sent handshake (68 bytes), waiting for response...
03-15 03:03:23.729: I/System.out(2303): 9915 [bt-connect-15] INFO com.turn.ttorrent.client.ConnectionHandler  - Handshaked with peer://<IP_ADDRESS>:20376/? [Ci|Ci|0], peer ID is 2d5554333330302db973e8b2fbd0604a5e3ecbb3.
03-15 03:03:23.729: I/System.out(2303): 9915 [bt-connect-15] INFO com.turn.ttorrent.client.Client  - Handling new peer connection with peer://<IP_ADDRESS>:20376/3ecbb3...
03-15 03:03:23.733: I/System.out(2303): 9918 [bt-connect-15] DEBUG com.turn.ttorrent.client.Client  - Found peer (by host ID): peer://<IP_ADDRESS>:20376/3ecbb3 [Ci|Ci|0].
03-15 03:03:23.757: I/System.out(2303): 9940 [bt-connect-15] DEBUG com.turn.ttorrent.client.peer.PeerExchange  - Started peer exchange with peer://<IP_ADDRESS>:20376/3ecbb3 [Ci|Ci|0] for How I Met Your Mother S09E18 HDTV x264-EXCELLENCE[ettv].
03-15 03:03:23.761: I/System.out(2303): 9944 [bt-connect-15] DEBUG com.turn.ttorrent.client.Client  - New peer connection with peer://<IP_ADDRESS>:20376/3ecbb3 [Ci|Ci|0] [1/26].
03-15 03:03:23.761: I/System.out(2303): 9947 [bt-connect-15] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:25622/? [Ci|Ci|0]...
03-15 03:03:23.769: I/System.out(2303): 9951 [bt-connect-8] WARN com.turn.ttorrent.client.Client  - Could not connect to peer://<IP_ADDRESS>:63882/? [Ci|Ci|0]: Handshake size read underrrun.
03-15 03:03:23.769: I/System.out(2303): 9955 [bt-connect-8] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:21031/? [Ci|Ci|0]...
03-15 03:03:23.821: I/System.out(2303): 10004 [bt-connect-5] INFO com.turn.ttorrent.client.ConnectionHandler  - Handshaked with peer://<IP_ADDRESS>:60857/? [Ci|Ci|0], peer ID is 2d5554333332302d5f7655a2ad1746da3288a26e.
03-15 03:03:23.821: I/System.out(2303): 10005 [bt-connect-5] INFO com.turn.ttorrent.client.Client  - Handling new peer connection with peer://<IP_ADDRESS>:60857/88a26e...
03-15 03:03:23.821: I/System.out(2303): 10007 [bt-connect-5] DEBUG com.turn.ttorrent.client.Client  - Found peer (by host ID): peer://<IP_ADDRESS>:60857/88a26e [Ci|Ci|0].
03-15 03:03:23.845: I/System.out(2303): 10030 [bt-connect-5] DEBUG com.turn.ttorrent.client.peer.PeerExchange  - Started peer exchange with peer://<IP_ADDRESS>:60857/88a26e [Ci|Ci|0] for How I Met Your Mother S09E18 HDTV x264-EXCELLENCE[ettv].
03-15 03:03:23.849: I/System.out(2303): 10032 [bt-connect-5] DEBUG com.turn.ttorrent.client.Client  - New peer connection with peer://<IP_ADDRESS>:60857/88a26e [Ci|Ci|0] [2/26].
03-15 03:03:23.849: I/System.out(2303): 10034 [bt-connect-5] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:51413/? [Ci|Ci|0]...
03-15 03:03:23.985: I/System.out(2303): 10171 [bt-connect-9] INFO com.turn.ttorrent.client.ConnectionHandler  - Handshaked with peer://<IP_ADDRESS>:12500/? [Ci|Ci|0], peer ID is 2d5554333230302d3c6c6053a4b9940857ae2967.
03-15 03:03:23.989: I/System.out(2303): 10172 [bt-connect-9] INFO com.turn.ttorrent.client.Client  - Handling new peer connection with peer://<IP_ADDRESS>:12500/ae2967...
03-15 03:03:23.989: I/System.out(2303): 10174 [bt-connect-9] DEBUG com.turn.ttorrent.client.Client  - Found peer (by host ID): peer://<IP_ADDRESS>:12500/ae2967 [Ci|Ci|0].
03-15 03:03:24.013: I/System.out(2303): 10197 [bt-connect-9] DEBUG com.turn.ttorrent.client.peer.PeerExchange  - Started peer exchange with peer://<IP_ADDRESS>:12500/ae2967 [Ci|Ci|0] for How I Met Your Mother S09E18 HDTV x264-EXCELLENCE[ettv].
03-15 03:03:24.017: I/System.out(2303): 10199 [bt-connect-9] DEBUG com.turn.ttorrent.client.Client  - New peer connection with peer://<IP_ADDRESS>:12500/ae2967 [Ci|Ci|0] [3/27].
03-15 03:03:24.017: I/System.out(2303): 10202 [bt-connect-9] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:61940/? [Ci|Ci|0]...
03-15 03:03:24.101: I/System.out(2303): 10284 [bt-peer(..3ECBB3)-recv] DEBUG com.turn.ttorrent.client.peer.PeerExchange  - Could not read message from peer://<IP_ADDRESS>:20376/3ecbb3 [Ci|CI|730]: Unexpected end-of-stream while reading
03-15 03:03:24.101: I/System.out(2303): 10285 [bt-peer(..3ECBB3)-recv] DEBUG com.turn.ttorrent.client.peer.PeerExchange  - Peer exchange with peer://<IP_ADDRESS>:20376/3ecbb3 [Ci|CI|730] closed.
03-15 03:03:24.129: I/System.out(2303): 10316 [bt-peer(..3ECBB3)-recv] DEBUG com.turn.ttorrent.client.SharedTorrent  - Peer peer://<IP_ADDRESS>:20376/3ecbb3 [Ci|CI|730] went away with 730 piece(s) [completed=35; available=0/730]
03-15 03:03:24.133: I/System.out(2303): 10316 [bt-peer(..3ECBB3)-recv] DEBUG com.turn.ttorrent.client.Client  - Peer peer://<IP_ADDRESS>:20376/3ecbb3 [Ci|CI|730] disconnected, [2/27].
03-15 03:03:24.225: I/System.out(2303): 10411 [bt-peer(..88A26E)-recv] DEBUG com.turn.ttorrent.client.peer.PeerExchange  - Could not read message from peer://<IP_ADDRESS>:60857/88a26e [Ci|CI|730]: Unexpected end-of-stream while reading
03-15 03:03:24.225: I/System.out(2303): 10411 [bt-peer(..88A26E)-recv] DEBUG com.turn.ttorrent.client.peer.PeerExchange  - Peer exchange with peer://<IP_ADDRESS>:60857/88a26e [Ci|CI|730] closed.
03-15 03:03:24.241: I/System.out(2303): 10426 [bt-connect-13] INFO com.turn.ttorrent.client.ConnectionHandler  - Handshaked with peer://<IP_ADDRESS>:51413/? [Ci|Ci|0], peer ID is 2d5452323832302d61326f6e313530636d6b7030.
03-15 03:03:24.241: I/System.out(2303): 10427 [bt-connect-13] INFO com.turn.ttorrent.client.Client  - Handling new peer connection with peer://<IP_ADDRESS>:51413/6b7030...
03-15 03:03:24.245: I/System.out(2303): 10429 [bt-connect-13] DEBUG com.turn.ttorrent.client.Client  - Found peer (by host ID): peer://<IP_ADDRESS>:51413/6b7030 [Ci|Ci|0].
03-15 03:03:24.253: I/System.out(2303): 10437 [bt-peer(..88A26E)-recv] DEBUG com.turn.ttorrent.client.SharedTorrent  - Peer peer://<IP_ADDRESS>:60857/88a26e [Ci|CI|730] went away with 730 piece(s) [completed=35; available=0/730]
03-15 03:03:24.253: I/System.out(2303): 10438 [bt-peer(..88A26E)-recv] DEBUG com.turn.ttorrent.client.Client  - Peer peer://<IP_ADDRESS>:60857/88a26e [Ci|CI|730] disconnected, [1/28].
03-15 03:03:24.265: I/System.out(2303): 10449 [bt-connect-13] DEBUG com.turn.ttorrent.client.peer.PeerExchange  - Started peer exchange with peer://<IP_ADDRESS>:51413/6b7030 [Ci|Ci|0] for How I Met Your Mother S09E18 HDTV x264-EXCELLENCE[ettv].
03-15 03:03:24.269: I/System.out(2303): 10452 [bt-connect-13] DEBUG com.turn.ttorrent.client.Client  - New peer connection with peer://<IP_ADDRESS>:51413/6b7030 [Ci|Ci|0] [2/28].
03-15 03:03:24.269: I/System.out(2303): 10454 [bt-connect-13] INFO com.turn.ttorrent.client.ConnectionHandler  - Connecting to peer://<IP_ADDRESS>:41853/? [Ci|Ci|0]...
03-15 03:03:24.437: I/System.out(2303): 10621 [bt-peer(..AE2967)-recv] DEBUG com.turn.ttorrent.client.peer.PeerExchange  - Could not read message from peer://<IP_ADDRESS>:12500/ae2967 [Ci|CI|730]: Unexpected end-of-stream while reading
03-15 03:03:24.437: I/System.out(2303): 10621 [bt-peer(..AE2967)-recv] DEBUG com.turn.ttorrent.client.peer.PeerExchange  - Peer exchange with peer://<IP_ADDRESS>:12500/ae2967 [Ci|CI|730] closed.
03-15 03:03:24.449: I/System.out(2303): 10633 [bt-peer(..AE2967)-recv] DEBUG com.turn.ttorrent.client.SharedTorrent  - Peer peer://<IP_ADDRESS>:12500/ae2967 [Ci|CI|730] went away with 730 piece(s) [completed=35; available=0/730]
03-15 03:03:24.449: I/System.out(2303): 10634 [bt-peer(..AE2967)-recv] DEBUG com.turn.ttorrent.client.Client  - Peer peer://<IP_ADDRESS>:12500/ae2967 [Ci|CI|730] disconnected, [1/28].
03-15 03:03:24.761: I/System.out(2303): 10945 [bt-peer(..6B7030)-recv] DEBUG com.turn.ttorrent.client.peer.PeerExchange  - Could not read message from peer://<IP_ADDRESS>:51413/6b7030 [Ci|CI|730]: Unexpected end-of-stream while reading
03-15 03:03:24.761: I/System.out(2303): 10946 [bt-peer(..6B7030)-recv] DEBUG com.turn.ttorrent.client.peer.PeerExchange  - Peer exchange with peer://<IP_ADDRESS>:51413/6b7030 [Ci|CI|730] closed.
03-15 03:03:24.769: I/System.out(2303): 10954 [bt-peer(..6B7030)-recv] DEBUG com.turn.ttorrent.client.SharedTorrent  - Peer peer://<IP_ADDRESS>:51413/6b7030 [Ci|CI|730] went away with 730 piece(s) [completed=35; available=0/730]
03-15 03:03:24.769: I/System.out(2303): 10955 [bt-peer(..6B7030)-recv] DEBUG com.turn.ttorrent.client.Client  - Peer peer://<IP_ADDRESS>:51413/6b7030 [Ci|CI|730] disconnected, [0/28].
03-15 03:03:25.101: I/System.out(2303): 11286 [bt-connect-8] DEBUG com.turn.ttorrent.client.ConnectionHandler  - Connected. Sending handshake to peer://<IP_ADDRESS>:21031/? [Ci|Ci|0]...
03-15 03:03:25.101: I/System.out(2303): 11286 [bt-connect-8] DEBUG com.turn.ttorrent.client.ConnectionHandler  - Sent handshake (68 bytes), waiting for response...
03-15 03:03:25.517: I/System.out(2303): 11700 [bt-connect-8] WARN com.turn.ttorrent.client.Client  - Could not connect to peer://<IP_ADDRESS>:21031/? [Ci|Ci|0]: Handshake size read underrrun.
03-15 03:03:25.641: I/System.out(2303): 11826 [bt-client(..666232)] INFO com.turn.ttorrent.client.Client  - SHARING 35/730 pieces (4.79%) [0/0] with 0/27 peers at 0.00/0.00 kB/s.
03-15 03:03:28.641: I/System.out(2303): 14827 [bt-client(..666232)] INFO com.turn.ttorrent.client.Client  - SHARING 35/730 pieces (4.79%) [0/0] with 0/27 peers at 0.00/0.00 kB/s.
03-15 03:03:31.645: I/System.out(2303): 17829 [bt-client(..666232)] INFO com.turn.ttorrent.client.Client  - SHARING 35/730 pieces (4.79%) [0/0] with 0/27 peers at 0.00/0.00 kB/s.
03-15 03:03:34.645: I/System.out(2303): 20830 [bt-client(..666232)] INFO com.turn.ttorrent.client.Client  - SHARING 35/730 pieces (4.79%) [0/0] with 0/27 peers at 0.00/0.00 kB/s.
03-15 03:03:37.645: I/System.out(2303): 23831 [bt-client(..666232)] INFO com.turn.ttorrent.client.Client  - SHARING 35/730 pieces (4.79%) [0/0] with 0/27 peers at 0.00/0.00 kB/s.
03-15 03:03:40.645: I/System.out(2303): 26831 [bt-client(..666232)] INFO com.turn.ttorrent.client.Client  - SHARING 35/730 pieces (4.79%) [0/0] with 0/27 peers at 0.00/0.00 kB/s.
03-15 03:03:43.649: I/System.out(2303): 29832 [bt-client(..666232)] INFO com.turn.ttorrent.client.Client  - SHARING 35/730 pieces (4.79%) [0/0] with 0/27 peers at 0.00/0.00 kB/s.
03-15 03:03:46.649: I/System.out(2303): 32833 [bt-client(..666232)] INFO com.turn.ttorrent.client.Client  - SHARING 35/730 pieces (4.79%) [0/0] with 0/27 peers at 0.00/0.00 kB/s.
03-15 03:03:49.653: I/System.out(2303): 35838 [bt-client(..666232)] INFO com.turn.ttorrent.client.Client  - SHARING 35/730 pieces (4.79%) [0/0] with 0/27 peers at 0.00/0.00 kB/s.
03-15 03:03:52.653: I/System.out(2303): 38838 [bt-client(..666232)] INFO com.turn.ttorrent.client.Client  - SHARING 35/730 pieces (4.79%) [0/0] with 0/27 peers at 0.00/0.00 kB/s.
03-15 03:03:55.657: I/System.out(2303): 41840 [bt-client(..666232)] INFO com.turn.ttorrent.client.Client  - SHARING 35/730 pieces (4.79%) [0/0] with 0/27 peers at 0.00/0.00 kB/s.
03-15 03:03:58.665: I/System.out(2303): 44847 [bt-client(..666232)] INFO com.turn.ttorrent.client.Client  - SHARING 35/730 pieces (4.79%) [0/0] with 0/27 peers at 0.00/0.00 kB/s.
03-15 03:04:01.665: I/System.out(2303): 47849 [bt-client(..666232)] INFO com.turn.ttorrent.client.Client  - SHARING 35/730 pieces (4.79%) [0/0] with 0/27 peers at 0.00/0.00 kB/s.
03-15 03:04:04.665: I/System.out(2303): 50850 [bt-client(..666232)] INFO com.turn.ttorrent.client.Client  - SHARING 35/730 pieces (4.79%) [0/0] with 0/27 peers at 0.00/0.00 kB/s.
03-15 03:04:07.665: I/System.out(2303): 53851 [bt-client(..666232)] INFO com.turn.ttorrent.client.Client  - SHARING 35/730 pieces (4.79%) [0/0] with 0/27 peers at 0.00/0.00 kB/s.
03-15 03:04:10.669: I/System.out(2303): 56853 [bt-client(..666232)] INFO com.turn.ttorrent.client.Client  - SHARING 35/730 pieces (4.79%) [0/0] with 0/27 peers at 0.00/0.00 kB/s.
03-15 03:04:13.669: I/System.out(2303): 59854 [bt-client(..666232)] INFO com.turn.ttorrent.client.Client  - SHARING 35/730 pieces (4.79%) [0/0] with 0/27 peers at 0.00/0.00 kB/s.
03-15 03:04:16.669: I/System.out(2303): 62855 [bt-client(..666232)] INFO com.turn.ttorrent.client.Client  - SHARING 35/730 pieces (4.79%) [0/0] with 0/27 peers at 0.00/0.00 kB/s.

The bitfield payload in the bitfield message is truncated to the highest bit that is set. As a consequence the bitfield does not cover all pieces in most cases and therefore peers drop the connection. This prevents a successful resume of downloads.

Thanks @henkel for the patch! Closing this.


Log to the appdate folder from the bootstrapper

Provide a description of requested docs changes
Sometimes we can not get bootstrapper logs as mentioned in https://github.com/microsoft/PowerToys/issues/11272#issuecomment-856021347. We can not get logs if a user installs PowerToys manually(not an update). To fix that we should log directly into the AppData folder.

Why not logging into temp folder by default?

@htcfreek

Why not logging into temp folder by default?

It's better to log to the appdata folder because it will be automatically be included in the bug report.

Added priority-0 label as it is needed to troubleshoot https://github.com/microsoft/PowerToys/issues/11272 and similar issues. We need to know if app.dark.png fails to install or gets deleted after installation.

Resolved with the release of v0.41.


missing destination name field_name in struct model

Hey, I am using sqlx with mssql
here is my struct model :
type Employee struct {
	ID         string `json:"id,omitempty" validate:"required"`
	EmployeeNo int    `json:"employeeno,omitempty" validate:"required"`
	FullName   string `json:"fullname,omitempty" validate:"required"`
}

and here is the rest of the code :
type EmployeeRepo interface {
	GetEmployees() (*[]db_models.Employee, error)
}

type employeeRepo struct {
	logger *zap.SugaredLogger
	db     db.DBFactory
}

var _ EmployeeRepo = (*employeeRepo)(nil)

func EmployeeRepoProvider(db db.DBFactory, logger *zap.SugaredLogger) EmployeeRepo {
	return &employeeRepo{db: db, logger: logger}
}

func (e *employeeRepo) GetEmployees() (*[]db_models.Employee, error) {
	fmt.Println("======= Getting Employees REPOO=======")
	employees := &[]db_models.Employee{}
	var err error
	err = e.db.AuthDB.Select(employees, `SELECT * FROM testEmployees`)

	if err != nil {
		fmt.Println("err getting emp : ", err)
		return nil, err
	} else {
		return employees, nil
	}
}

whenever I try to get data from db I get this :
*missing destination name EmployeeNo in []db_models.Employee
already check issues 234  and 322 and did not work with me

sqlx uses the struct tag db to map column names to struct fields. So your struct should change from this

type Employee struct {
	ID         string `json:"id,omitempty" validate:"required"`
	EmployeeNo int    `json:"employeeno,omitempty" validate:"required"`
	FullName   string `json:"fullname,omitempty" validate:"required"`
}

to something like this:
type Employee struct {
	ID         string `json:"id,omitempty" validate:"required" db:"id"`
	EmployeeNo int    `json:"employeeno,omitempty" validate:"required" db:"employeeno"`
	FullName   string `json:"fullname,omitempty" validate:"required" db:"fullname"`
}

@mohammed90 tried it and did not work unfortunately

It worked when i named the db columns the same as struct, like this :
type Employee struct {
	EmployeeNo int    `json:"employeeno" db:"EmployeeNo"`
	FullName   string `json:"fullname" db:"FullName"`
	QatariID   string `json:"qatariid" db:"QatariID"`
}

ah ok
thank you for your contribution

It worked when i named the db columns the same as struct, like this :
type Employee struct {
	EmployeeNo int    `json:"employeeno" db:"EmployeeNo"`
	FullName   string `json:"fullname" db:"FullName"`
	QatariID   string `json:"qatariid" db:"QatariID"`
}

For the record, it doesn't have to match the field name in the struct. It has to match the column name in your query.

Ah ok
thank you for your contribution


Flutter 0.10 not compatible

Starting Xcode build...
Xcode build done.                                            1.7s
Failed to build iOS app
Error output from Xcode build:
↳
    ** BUILD FAILED **

Xcode's output:
↳
    /Users/wener/.pub-cache/hosted/pub.dartlang.org/flutter_statusbarcolor-0.1.0/ios/Classes/FlutterStatusbarcolorPlugin.m:18:9: warning: incompatible pointer to integer conversion initializing 'int' with an expression of type 'NSNumber *' [-Wint-conversion]
        int colors = @([color intValue]);
            ^        ~~~~~~~~~~~~~~~~~~~
    /Users/wener/.pub-cache/hosted/pub.dartlang.org/flutter_statusbarcolor-0.1.0/ios/Classes/FlutterStatusbarcolorPlugin.m:24:30: error: use of undeclared identifier 'usewhiteforeground'
        NSNumber numberWithBool:*usewhiteforeground = call.arguments[@"whiteForeground"];
                                 ^
    /Users/wener/.pub-cache/hosted/pub.dartlang.org/flutter_statusbarcolor-0.1.0/ios/Classes/FlutterStatusbarcolorPlugin.m:25:9: error: use of undeclared identifier 'usewhiteforeground'
        if (usewhiteforeground) {
            ^
    1 warning and 2 errors generated.
Could not build the application for the simulator.
Error launching application on iPhone 8.

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel dev, v0.10.0, on Mac OS X 10.13.6 17G2307, locale en-CN)
[✗] Android toolchain - develop for Android devices
    ✗ Unable to locate Android SDK.
      Install Android Studio from: https://developer.android.com/studio/index.html
      On first launch it will assist you in installing the Android SDK components.
      (or visit https://flutter.io/setup/#android-setup for detailed instructions).
      If Android SDK has been installed to a custom location, set $ANDROID_HOME to that location.
      You may also want to add it to your PATH environment variable.

[✓] iOS toolchain - develop for iOS devices (Xcode 10.0)
[✓] Android Studio (version 3.1)
[!] IntelliJ IDEA Ultimate Edition (version 2018.2.2)
    ✗ Flutter plugin not installed; this adds Flutter specific functionality.
    ✗ Dart plugin not installed; this adds Dart specific functionality.
[!] VS Code (version 1.28.0)
[✓] Connected device (1 available)

! Doctor found issues in 3 categories.

Try https://github.com/mchome/flutter_statusbarcolor/commit/f5f67260d58ada0809f49637909c0271a5a8fd0a with this setup:
https://www.dartlang.org/tools/pub/dependencies#git-packages

Works now,thanks

It's in v0.1.1 :)


jump screen selected itens

Hi,
Is it possible to jump this screen?
I would like that when the user clicks the save button on the item selection screen, it does not go through that screen. There is no need for him to confirm or view what he selected.
Thanks

@robertoltrocha Thanks for showing interest in this package.
It's unclear to me that what is the expected behavior you are looking for.
Please explain in more detail. Thanks!

When you enter the MultSelecione screen, you see a home screen that includes the selected items and if you touch the screen, I enter the screen to choose and mark the items. What I want is for the MultiSelection to go directly to the screen of choice with the checkBox, when you leave it does not show the screen of the selected items. I would not like to see the first screen at any time.


Document "jpegoptim" and "zopflipng" requirement

The autoupdate tool use jpegoptim and zopflipng for jpeg and png compression.

I would suggest a dev mode where these compressors are not required

Fixed by: https://github.com/cdnjs/tools/pull/78


[FEATURE] - Release Process Improvements

Is there an existing issue for this?

[X] I have searched the existing issues

Is your feature request related to a problem?
It'd be really nice/helpful for new and existing users to have the following:

Docker images pushed with each new release. Possibly a dev image pushed when PRs are merged into develop.
Generate release binaries for download: Windows, Linux, MacOS, FreeBSD for x86_64 and arm32 and arm64.

Including #404
Describe the solution you'd like
I think the use of Github actions would be the easiest utilizing the existing Dockerfiles.
Describe alternatives you've considered
No response
Additional context
No response

This can be closed now that the following PRs have been merged:
#587
#602
#605


Move badssl.com off google compute into AWS

We had talked about it a while back, but I believe we were going to move badssl.com into AWS.  I setup an Ubuntu 16.04 instance a while back, so we should probably move to that.  It lets us get the latest nginx and ciphers (aka CHACHA20-POLY1305).
The host, if you've forgotten, is:
ec2-52-90-130-29.computer-1.amazonaws.com
If you no longer want to move it there, let me know and I will shut down the EC2 instance.

I don't feel strongly, but having it on Google Cloud has come in handy a few times (like yesterday when I needed to fiddle with the DNS to confirm a cert verification email).
Would you be alright with Google Cloud for now? I'll switch us over to a 16.04 box.
We can always move to AWS later if there are other benefits.

I don't have much skin in this particular game, other than finding the AWS toolchain to be somewhat less annoying than the Google Compute toolchain, which feels altogether too much like magic.
I'll go ahead and kill the AWS 16.04 instance once we've successfully moved to a GC 16.04 system.  :)

I'll go ahead and kill the AWS 16.04 instance once we've successfully moved to a GC 16.04 system. :)

Migrated!

BTW you may want to update your SSH key at https://console.cloud.google.com/compute/metadata/sshKeys?project=mixed-content-test&organizationId=433637338589
The current key is shudder RSA.

Can you add<EMAIL_ADDRESS>to the project?    I do normally use ed25519 ssh keys.  :)
https://pokeinthe.io/about/  <-- at the bottom

Can you add<EMAIL_ADDRESS>to the project?

Done.

https://pokeinthe.io/about/ <-- at the bottom

Okaaaaaaay, done. :-)

Can you add<EMAIL_ADDRESS>to the project?
Done.

Wit, did you mean as project editor, or just the SSH key?

Okay, I've gone ahead and terminated our EC2 instance.  (cc: @gene1wood)


Enhancement - Table Row Selection

Pages throughout the site use a row highlight that implies row-selection is possible, but it doesn't allow it.  Please add capability to click on the row, rather than a particular cell or text label, to open a link.  For example, look at the services.asp page.

Good idea, will require a new function in the API module, but should not be difficult to address.

Turns out to be much more difficult than anticipated, mostly due to insufficient API planning and finding myself boxed into a corner for which only Superman or Dead Pool could magically bust open an escape route, just in time for the commercial break.  Going to shelve this one for a while.


Deposit amount in DB is greater than Amount on Blockchain

If someone deposits a specific amount in USD ex. $5 or $500, In some cases the Blockchain amount will contain many decimals, ex. "0.055796386110991888".
In this case the DB amount will appear as "0.0557963861109919". This is not an issue on DB but the collection fails, Which is pain when we have more than 100 active customers.
I will be happy to submit a PR.

what exactly is the problem? i would suggest to either truncate the deposit or round a 4.9999x$ deposit up to 5.

what exactly is the problem? i would suggest to either truncate the deposit or round a 4.9999x$ deposit up to 5.

@krtschmr I think you missed the point, system is rounding the amount but it is rounding up instead of rounding down.
Amount: 0.58995
Precision: 2
Case "rounding up":
Amount: 0.59
Case "rounding down":
Amount: 0.58
you see if we round up, the amount will be greater than actual deposit and cause issue on blockchain when collecting as the amount on the blockchain is 0.58995 but in the system amount will be 0.59 and system will try to collect 0.59.

I’ve described this issue in more details and opened PR in #2851


Enhance Visibility of EventContextKey Usage

First, some background (there is a TLDR at the bottom, but really you should read this issue)
As the API and official implementations have evolved over the years, @Zidane @bloodmc and I are coming to a head about exposing bits of what we can expect for being able to better use Sponge's implementation for control flow of various events. As most plugin developers are aware, Sponge's tracking system does an impressive job at capturing and emitting objects for Cause, and EventContext. However, we've had a recent discussion to add more EventContextKeys to provide some insight to plugins about using ChangeBlockEvent.Pre as it serves as a "pre-process a bunch of things" event that can safely be used to cancel things like Pistons (because pistons are already requiring a rewiring/re-engineering of some bits about how captures are done...
The point
So, having given some background about how EventContextKeys are being populated, I'd like to get to the root of this discussion: We want to provide visibility via documentation and possibly default provided methods for common expected EventContextKeys that would be more than likely available for various events.
So far, we're agreeing and will be committing to adding Javadoc annotations (like @see) to various Event classes to suggest possible EventContextKeys that would be available to those events, and documenting when those keys would be optionally provided (better to sanely explain the contracts defined in the API for implementations to abide by). What is an option, and the root of this discussion is whether we, the API, will also define default implemented method accessors for these optional EventContexts that we're almost sure will exist, but still having an Optional return. This would be the same treatment that Entity interfaces went through to facilitate "guaranteed" accessors with Data API, except, because the events are still contracted to have no guarantee on what will exist in EventContext, the methods would still be Optional.
Examples
For Javadoc purposes, we'd be attaching a custom tag, named @optionally or something thereof, with a {@link EventContextKeys#FOOO} and explanation when that key would normally be provided (because of the dynamic nature of tracking, there's a multitude of combinations in which contexts can be constructed, none are contractual, all are situational).
/**
 * Base event for when {@link BlockState}s at {@link Location}s are being
 * changed.
 *
 * @optionally {@link EventContextKeys#NOTIFIER} When a User notifier is provided as indirect for the root
 * @optionally {@link EventContextKeys#OWNER} When a User owner is provided as indirect for the root
 * @optionally {@link EventContextKeys#FAKE_PLAYER} When a plugin/mod is acting or performing changes on behalf of a Player/User
 * @optionally {@link EventContextKeys#USED_ITEM} When a Player or FakePlayer has an ItemStack that is performing block changes
 * @optionally {@link EventContextKeys#LIQUID_BREAK} When Fluids are performing changes
 * @optionally {@link EventContextKeys#LIQUID_FLOW} When Fluids are performing changes
 * @optionally {@link EventContextKeys#LIQUID_MIX} When Fluids are performing changes
 */
public interface ChangeBlockEvent extends Event, Cancellable {
// -- stuff
}

As for the default implemented methods, they would look like so:

public interface ChangeBlockEvent extends Event, Cancellable {

    default Optional<Player> getFakePlayer() {
        return getContext().get(EventContextKeys.FAKE_PLAYER);
    }

    default Optional<World> getLiquidMix() {
        return getContext().get(EventContextKeys.LIQUID_MIX);
    }

TLDR
We want to expand the documented contract of which events and when certain EventContextKeys are being used. We will be adding javadocs to the event classes for better visibility, but we are considering adding optional accessor methods like the examples above for events that are more likely to contain those keys.
VOTE YOUR OPINION!
Please react to this issue description with the following reactions:

:rocket: to add default methods using EventContextKeys (Includes having Javadocs on the class with @optionally)
:eyes: to keep just the Javadocs, no default methods
:tada: to be excited about the possibilities this issue will provide for the @SpongePowered/docs to document!

As a noob who's never really been exposed to this kind of pattern before, I found myself looking for examples on different events and the context available to each instead of just using the Javadocs. Default methods would absolutely bridge some of this gap nicely.

excited about the possibilities this issue will provide for the @SpongePowered/docs to document

I strongly oppose adding default methods. Such additions may violate the goal of entity component systems and harms flexible additions.

I agree to @liach . However, I would say that some way to provide code assistance to developers is desirable and would be provided by method definitions in interfaces. Just to make sure: do these methods have to have their default implementations in the interface or wouldn't it be sufficient to have them in their implementations?
This way, proper tool-assisted coding (and possibly deprecation) would be possible.

I strongly oppose adding default methods. Such additions may violate the goal of entity component systems and harms flexible additions.

The point isn't that they would be guarantees, they're commonly found in the events regardless of implementation (hell, one could say it's almost a requirement in certain scenarios). Case in point: ChangeBlockEvent.Pre is fired in two scenarios:

A block update event is being scheduled (such as pistons)
Certain block physics that are complicated to track and roll back have a pre event thrown (such as liquids)

In these scenarios, we will always provide a LocatableBlock instance, or TileEntity instance, or BlockSnapshot instance.
In the case of NotifyNeighborEvent and any successive events, we take advantage of the PhaseTracker to provide a BlockSnaphot of the "final" placement, or combination there of of what block is performing the neighbor notification (the source), after which, if a block event is being scheduled, well, now the NEIGHBOR_NOTIFY_SOURCE or whatever the context key is called, will be populated in the EventContext and visibly, it's something that we'd want to make people aware as a possibility existing, instead of telling people to read the docs, debug their plugins, print out Cause.toString() etc. because they want to be able to deduce and reliably track/prevent/cancel/modify/associate changes to a world with our already powerful event system.
The goal of ECS isn't feasible in Minecraft, and likely won't be until the point when all Entity classes are data driven and composed of functions declared by their configurations. Flexible additions are fine and all, but the default methods again, are only serving as a "here's what you could potentially have with this event" compared to other EventContextKeys.

sounds good. we can just model event context keys and their usages after data keys.


Vue langugage server does not handle objects in bound :style tag.

In my template i am conditionally applying styles with the object syntax. Even though the style is correct the language server is complaining. See screenshot below.

Full error message:
Type '{ 'stroke-width': string; stroke: string; }' is not assignable to type 'string | CSSProperties | undefined'.

Duplicate of #30
Please try change 'stroke-width' to strokeWidth.

Duplicate of #30

That fixes the issue.
Thanks


Developing walk and turn cycles

While the bot can move forward fine, moving left, right, and backwards, as well as turning on the spot also need to be added

Walk cycles are now more advance with capability to move in  2 directions at once


Autocomplete (auto import) of existing import broken

In VSCode 1.40.2 it autocompleted useEffect -> React.useEffect when there already was an import * as React from 'react'. This stopped working as soon as I upgraded VSCode to 1.41.0.

VSCode Version: 1.41.0
OS Version: Windows 10

Steps to Reproduce:

Start typing useEffect
Wait for the "Auto import from 'react'" dialog to appear
Hit enter

Does this issue occur when all extensions are disabled?: Yes

/confirmed
Version: 1.42.0-insider (user setup)
Commit: cbeff45f80213db0ddda2183170281ed97ed3b12
TS: typescript@next
Works as expected when default import used import React from 'react'; however fails with importing as single variable import * as React from 'react';
Behavior may be FAD because in first case it has Add 'useEffect' to existing import declaration from "react" action, but in your case its Change 'useLayoutEffect' to 'React.useLayoutEffect'.
However text Auto import from {0} which adds confusion in this case is added on VS Code side.
/cc @mjbvz


Request for latest version

The publish command gives an error if the version is already in place in the artifacts, is there a way to test the latest version with azure cli (prior trying to upload)?

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 3ae588e5-6e79-0a3e-56fb-78976019b011
Version Independent ID: 70e209c8-948c-8baf-3472-e1920c498a2c
Content: az artifacts universal
Content Source: latest/docs-ref-autogen/artifacts/universal.yml
GitHub Login: @rloutlaw
Microsoft Alias: routlaw

hi @luisve1427 we're routing to correct team to look at it.

What @luisve1427 said. Need a way to get a list of artifacts in a feed. Both to avoid collisions when uploading as per the issue description, but also to allow scripts to decide what to download based on availability.


Archive releases in Sentry once a production deployment finishes

Would need to determine when a release was created and find older ones

Handled in pipeline code


Unable to specify custom alias on manually imported certificates

The certificate choice should be able to specify a optional custom alias entry name the currently generated alias identifier is not good since it changes when the certificate is updated. Hence rendering the alias key useless.

Can you share the plugin config you use and specify the intended behaviour?

Closing due to lack of activity.