VMs with invalid IDE configuration when using Solidfire as primary storage

Description
ISSUE TYPE

Bug Report

COMPONENT NAME
Domain XML with multiple disks attached using Solidfire primary storage
CLOUDSTACK VERSION
Master branch
OS / ENVIRONMENT
Solidfire primary storage
SUMMARY
Example:
When we select "Windows Server 2016 (64-bit)" as OS Type for an W2K16 cd image the resulting
VMs will not start with multiple disks attached. This is due to the usage of multiple IDE interfaces in the VM description XML.
It seems this is not just a problem with this OS Type but with the way the domain XMLs are generated when using solidfire storage.
This only happens when the disks are on Solidfire primary storage. We confirmed that using NFS primary storage this is not the case.
STEPS TO REPRODUCE
Try to use boot a VM with at least two disks on solidfire primary storage. Depending on the OS-Type
that is selected for the image that was used to create the VM, the domain xml generated may be invalid.
In our case we tested this with a W2K16 vm which will not start when using OS Type "Windows Server 2016 (64-bit)". Libvirt does not boot the machine and raise the following error message:
org.libvirt.LibvirtException: unsupported configuration: Only a single IDE controller is supported for this machine type
Logs & Attachments
Here you can see two excerpts from the generated domain xmls. First the working one (NFS) and below that the one not working (Solidfire).
NFS Primary Storage
<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2' cache='none'/>
  <source file='/mnt/e0e5ba2b-15bc-3fd8-a010-40a404c3cdfc/2f4ddade-b93e-47c5-b97f-b738f395d9e1'/>
  <backingStore/>
  <target dev='hda' bus='ide'/>
  <alias name='ide0-0-0'/>
  <address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
<disk type='file' device='cdrom'>
  <driver name='qemu' type='raw'/>
  <source file='/mnt/43c36bb7-1d8d-3405-b9b8-ddd402ef7913/215-34-015cecb6-7c65-3a37-80da-fde928458db4.iso'/>
  <backingStore/>
  <target dev='hdc' bus='ide'/>
  <readonly/>
  <alias name='ide0-1-0'/>
  <address type='drive' controller='0' bus='1' target='0' unit='0'/>
</disk>
<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2' cache='none'/>
  <source file='/mnt/e0e5ba2b-15bc-3fd8-a010-40a404c3cdfc/49e52a7f-1bfb-4034-ad81-1efacb402b24'/>
  <backingStore/>
  <target dev='vdb' bus='virtio'/>
  <alias name='virtio-disk1'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</disk>
<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2' cache='none'/>
  <source file='/mnt/e0e5ba2b-15bc-3fd8-a010-40a404c3cdfc/3b1c3083-6775-4c21-889a-0f80af9b2fc0'/>
  <backingStore/>
  <target dev='vdc' bus='virtio'/>
  <serial>xxxxxxxxxxxxxxxx</serial>
  <alias name='virtio-disk2'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>

Solidfire Primary Storage
<disk  device='disk' type='block'>
  <driver name='qemu' type='raw' cache='none' />
  <source dev='/dev/disk/by-path/ip-10.xx.xx.230:3260-iscsi-iqn.2010-01.com.solidfire:nhjj.root-323.127-lun-0'/>
  <target dev='hda' bus='ide'/>
</disk>
<disk  device='disk' type='block'>
  <driver name='qemu' type='raw' cache='none' />
  <source dev='/dev/disk/by-path/ip-10.xx.xx.230:3260-iscsi-iqn.2010-01.com.solidfire:nhjj.testplatte1-sf.128-lun-0'/>
  <target dev='hdb' bus='ide'/>
</disk>
<disk  device='disk' type='block'>
  <driver name='qemu' type='raw' cache='none' />
  <source dev='/dev/disk/by-path/ip-10.xx.xx.230:3260-iscsi-iqn.2010-01.com.solidfire:nhjj.testplatte2-sf.129-lun-0'/>
  <target dev='hde' bus='ide'/>
</disk>
<disk  device='cdrom' type='file'>
  <driver name='qemu' type='raw' />
  <source file='/mnt/c0aa527c-017e-3cca-b6b8-4b6055b0d03a/219-2-5d32553d-5dc1-3ad5-9275-1ff0ad5c7efc.iso'/>
  <target dev='hdc' bus='ide'/>
</disk>

Logfile excerpt
2018-12-07 15:04:07,604 DEBUG [resource.wrapper.LibvirtStartCommandWrapper] (agentRequest-Handler-4:null) (logid:faa09e72) starting i-61-323-VM: <domain type='kvm'>
<name>i-61-323-VM</name>
<uuid>33fc81ae-68a6-4723-9335-f9bf2c611b71</uuid>
<description>Windows Server 2016 (64-bit)</description>
<cpu mode='host-model'><model fallback='allow'></model><topology sockets='1' cores='4' threads='1' /></cpu><sysinfo type='smbios'>
<system>
<entry name='manufacturer'>Apache Software Foundation</entry>
<entry name='product'>CloudStack KVM Hypervisor</entry>
<entry name='uuid'>33fc81ae-68a6-4723-9335-f9bf2c611b71</entry>
</system>
</sysinfo>
<os>
<type  arch='x86_64' machine='pc'>hvm</type>
<boot dev='cdrom'/>
<boot dev='hd'/>
<smbios mode='sysinfo'/>
</os>
<on_reboot>restart</on_reboot>
<on_poweroff>destroy</on_poweroff>
<on_crash>destroy</on_crash>
<memory>16777216</memory>
<devices>
<memballoon model='none'/>
</devices>
<vcpu>4</vcpu>
<features>
<pae/>
<apic/>
<acpi/>
</features>
<cputune>
<shares>2664</shares>
</cputune>
<clock offset='localtime'>
<timer name='rtc' tickpolicy='catchup' >
</timer>
</clock>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<watchdog model='i6300esb' action='none'/>
<console type='pty'>
<target port='0'/>
</console>
<disk  device='disk' type='block'>
<driver name='qemu' type='raw' cache='none' />
<source dev='/dev/disk/by-path/ip-10.xx.xx.230:3260-iscsi-iqn.2010-01.com.solidfire:nhjj.root-323.127-lun-0'/>
<target dev='hda' bus='ide'/>
<serial>xxxxxxxxxxxxxxxxxxxx</serial></disk>
<disk  device='disk' type='block'>
<driver name='qemu' type='raw' cache='none' />
<source dev='/dev/disk/by-path/ip-10.xx.xx.230:3260-iscsi-iqn.2010-01.com.solidfire:nhjj.testplatte1-sf.128-lun-0'/>
<target dev='hdb' bus='ide'/>
<serial>xxxxxxxxxxxxxxxxxxxx</serial></disk>
<disk  device='disk' type='block'>
<driver name='qemu' type='raw' cache='none' />
<source dev='/dev/disk/by-path/ip-10.xx.xx.230:3260-iscsi-iqn.2010-01.com.solidfire:nhjj.testplatte2-sf.129-lun-0'/>
<target dev='hde' bus='ide'/>
<serial>xxxxxxxxxxxxxxxx</serial></disk>
<disk  device='cdrom' type='file'>
<driver name='qemu' type='raw' />
<source file='/mnt/c0aa527c-017e-3cca-b6b8-4b6055b0d03a/219-2-5d32553d-5dc1-3ad5-9275-1ff0ad5c7efc.iso'/>
<target dev='hdc' bus='ide'/>
</disk>
<serial type='pty'>
<target port='0'/>
</serial>
<graphics type='vnc' autoport='yes' listen='xxxxxxxxxxxx' passwd='xxxxxxxxxxxxxxxxxxxxx'/>
<channel type='unix'>
<source mode='bind' path='/var/lib/libvirt/qemu/i-61-323-VM.org.qemu.guest_agent.0'/>
<address type='virtio-serial'/>
<target type='virtio' name='org.qemu.guest_agent.0'/>
</channel>
<rng model='virtio'>
<rate period='1000' bytes='2048' />
<backend model='random'>/dev/random</backend></rng>
<input type='tablet' bus='usb'/>
<interface type='bridge'>
<source bridge='xxxxxxxx'/>
<mac address='xxxxxxxxxxxxxxx'/>
<model type='e1000'/>
<bandwidth>
<inbound average='25600' peak='25600'/>
<outbound average='25600' peak='25600'/>
</bandwidth>
<virtualport type='openvswitch'>
</virtualport>
<vlan trunk='no'>
<tag id='xxxx'/>
</vlan><link state='up'/>
</interface>
</devices>
</domain>

2018-12-07 15:04:07,609 WARN  [resource.wrapper.LibvirtStartCommandWrapper] (agentRequest-Handler-4:null) (logid:faa09e72) LibvirtException
org.libvirt.LibvirtException: unsupported configuration: Only a single IDE controller is supported for this machine type
        at org.libvirt.ErrorHandler.processError(Unknown Source)
        at org.libvirt.Connect.processError(Unknown Source)
        at org.libvirt.Connect.processError(Unknown Source)
        at org.libvirt.Connect.domainCreateXML(Unknown Source)
        at com.cloud.hypervisor.kvm.resource.LibvirtComputingResource.startVM(LibvirtComputingResource.java:1413)
        at com.cloud.hypervisor.kvm.resource.wrapper.LibvirtStartCommandWrapper.execute(LibvirtStartCommandWrapper.java:84)
        at com.cloud.hypervisor.kvm.resource.wrapper.LibvirtStartCommandWrapper.execute(LibvirtStartCommandWrapper.java:46)
        at com.cloud.hypervisor.kvm.resource.wrapper.LibvirtRequestWrapper.execute(LibvirtRequestWrapper.java:78)
        at com.cloud.hypervisor.kvm.resource.LibvirtComputingResource.executeRequest(LibvirtComputingResource.java:1445)
        at com.cloud.agent.Agent.processRequest(Agent.java:644)
        at com.cloud.agent.Agent$AgentRequestHandler.doTask(Agent.java:1082)
        at com.cloud.utils.nio.Task.call(Task.java:83)
        at com.cloud.utils.nio.Task.call(Task.java:29)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
2018-12-07 15:04:07,609 DEBUG [kvm.storage.KVMStoragePoolManager] (agentRequest-Handler-4:null) (logid:faa09e72) Disconnecting disk /iqn.2010-01.com.solidfire:nhjj.root-323.127/0

@DennisKonrad Do you see this if you use either Windows PV or Other PV Virtio-SCSI (64-bit) OS types?

@kiwiflyer You are right, if we select "Other PV" it is working. But for the users there's no way to know this. Also it's working when using a NFS storage offering. So for them there's no way to find out why it's not working.
So we would like a working "OS Type" also for Solidfire ;)

For the most part, the OS types are legacy in the KVM world. Very few of the actual named OS types are setup out of the box for paravirtualized drivers.
A couple of releases back, we started trying to move that drive control into the template registration:

Also in master (4.12), we've recently added support for Windows HyperV Enlightenment for KVM and that feature is enabled when you use Windows PV.

What I dont understand is why its working with NFS but not with Solidfire...

@kiwiflyer you are right if you use templates but if a user add an iso file so cant change the root controller. thats why my college wrote
"When we select "Windows Server 2016 (64-bit)" as OS Type for an W2K16 cd image the resulting
VMs will not start with multiple disks attached. This is due to the usage of multiple IDE interfaces in the VM description XML."
thats no normal behaviour. normally we should get first a d ide controller and all other disk will be defined as virtio block device. yes we can choose a pv from dropdown but it can not fool over that when we choose a windows 2016 with more than one disk we get on "Netapp Solidfire" a problem and multiple IDE Controller. Thats not the default QEMU behaviour! Normally it should like NFS (IDE, VIRTIO, VIRTIO...)
Its a bug but it will only occur on solidfire.
We will address it to netapp.

CloudOps should be looking into this soon. Technically, it's probably a problem in the iSCSI adapter plug-in of the KVM agent (so all storage systems that use that plug-in should suffer this issue). Thanks!

@mike-tutkowski sounds good. Thx

Reference: @skattoju4 & @syed


Improve FEC user experience

Submitting FECs is currently not very user friendly, lets try and improve the user experience.

At this point the minimal information required is the name of the moleculeset and the target. we could have the command be something like @falcbot run fep on <MoleculeSet name> for <Target> as the most minimal/ easiest to remember form.
If the user makes a mistake in the command we should return the correct formatting of the command. Alternatively, we could let the bot ask specifically what <MoleculeSet name> and <Target> is requested.

Improved but missing target information.


Configuration options need more docs

👋  hello Tom, it would be great if you can add additional docs/examples around the Configuration options you can add. I was trying to figure out why my regression line flat, turned out I needed to increase the precision on the linear method. This was literally the last thing I tried and it just so happened to work. Still, don't completely understand why it worked.

I was have the same issue. Thanks for your note


Cross-compilation for DragonFly fails

$ ldd ./hello
./hello:
        libc.so.7 => not found (0)
        libdl.so.1 => not found (0)
        libthr.so.3 => not found (0)
        libm.so.5 => not found (0)
        libexecinfo.so.1 => /usr/lib/libexecinfo.so.1 (0x80046d000)
        libc.so.8 => /lib/libc.so.8 (0x80067c000)

I assume that when the libsavi_runtime is cross-compiled on a FreeBSD machine, it's using the libc etc from the FreeBSD host and not the one found on DragonFly. For instance, libc has version 8 on DragonFly (not version .7).

@mneumann - can you share the Savi invocation you are using?
Note that you'll need to have a viable DragonFly sys root somewhere on your system, and to use the SAVI_SYS_ROOT environment variable to let the Savi compiler know where to look for that sysroot.
You may also need to first fix linker scripts that are relying on an absolute path.
To see this in action, take a look at the code I wrote for cross-compiling Savi programs to FreeBSD, which downloads the sys root package, checks its hash, and then uses sed -i to patch the linker scripts. Then see that we are setting the SAVI_SYS_ROOT env var to point to this extracted sys root directory before running the build command.
I'd expect that if you do something similar with a DragonFly sys root, you will find success in cross-compiling.
If you do manage to do so successfully, then please also share the steps you did, or do a pull request to that repo so that the build-release action for Savi programs can support DragonFly as well.

@jemc, I was just using -X option. Will try with SAVI_SYS_ROOT. You might get away with the path patching by installing savi into the sysroot and using chroot.

Yeah, so you need to supply both the -X TARGET_TRIPLE option as well as the SAVI_SYS_ROOT option (unless you're in a situation like on MacOS where the same SDK root is used for multiple MacOS architecture.

You might get away with the path patching by installing savi into the sysroot and using chroot.

I'm unsure about this... I haven't dealt with chroot much before, but wouldn't this require the savi binary itself to be compiled for that target system (and depending on the versions of libc.so etc that are in the sys root)? If so, then that would kind of defeat the purpose, because the goal with the cross-compilation capability is to be able to build a Savi program for any supported target platform with one single savi compiler binary running on a single host platform.
This goal is important to the eventual self-hosting of the language (i.e. a Savi compiler written in Savi) - as in such a situation you need the ability to cross-compile from one host platform/binary to many target platforms, such that you only need one working Savi compiler to create Savi compilers for all platforms.

It seems I missed linking in libatomic. The __atomic_compare_exchange is undefined for DragonFly's version of libsavi_runtime, where for FreeBSD's version, that symbol does not appear:
> llvm-nm libsavi_runtime-x86_64-unknown-dragonfly.bc | grep atomic_compare
                 U __atomic_compare_exchange
>

> llvm-nm libsavi_runtime-x86_64-unknown-freebsd.bc | grep atomic_compare
>

@jemc Is there a simple way how I can take the libsavi_runtime.bc for dragonfly and link it with libatomic.a that I have from a DragonFly symbol and get a resulting .bc again?

@jemc I got some more success by linking against libatomic on DragonFly. It has one symbol undefined:
00000000002467e0 D __progname
This is required by DragonFly's libc. Any hints on that?

@mneumann - maybe this could be resolved by adding -lcsu on DragonFly, to link libcsu?
https://github.com/freebsd/pkg/issues/1733#issuecomment-468389407

there is no libcsu on DragonFly. But __progname is defined in crt1.o:
> llvm-nm -U /dfly-sysroot/usr/lib/crt1.o
0000000000000000 D __progname
000000000000008c T _start
0000000000000000 r abitag
000000000000001c r crt_noinit_tag
0000000000000000 B environ
0000000000000048 t finalizer
0000000000000000 t fix_iplta

The built hello binary exports __progname:
> llvm-nm -g hello | grep __progname
00000000002467e0 D __progname

But when I run it on DragonFly, I get:
% ./hello
/lib/libc.so.8: Undefined symbol "__progname"

I am a bit lost here.

binary

I'm unsure about this... I haven't dealt with chroot much before, but wouldn't this require the savi binary itself to be compiled for that target system (and depending on the versions of libc.so etc that are in the sys root)? If so, then that would kind of defeat the purpose, because the goal with the cross-compilation capability is to be able to build a Savi program for any supported target platform with one single savi compiler binary running on a single host platform.

concerning chroot: the only effect this has is that the sysroot would become the real "root" (that is "/"). That would avoid changing absolute paths to point to the sysroot. Dunno if Linux supports chroot though. So before starting to link, you'd chroot into the sysroot, of course every object that you link would have to reside within the new chroot (or in memory or you'd have an open file descriptor for). Any external program that is called by the linking process would also have to reside within the chroot. But I think you use the compiled-in LLVM linker.  There are some package build systems that actually use that technology (or jails) to make package building reproduceable and independent of potentially installed packages.


Refactor Model Class

At some point soon we're looking to refactor the model class so that it can modularly combine different types of moves by using a redefined Class structure and generators (See openforcefield).

@davidlmobley Could you link the generator example from the openforcefield github for reference when you have a chance to?

@sgill2 https://github.com/open-forcefield-group/openforcefield/blob/master/openforcefield/typing/engines/smirnoff/forcefield.py -- search for generators. Basically towards the end of the module it's all definitions of generators.

After thinking about the Model changes, this is the cleanest implementation I came up with, which would change the following:

Move all the different move types into their own class which inherits off of Model

The base Model class itself would not innately have a method which performs the desired move, but would have other methods that would be generally helpful to have (such as the getAtomIndices() and getMasses()). The move itself would be performed by a method with the same name across all children classes called move(). Currently MoveProposal handles the position changes associated with the move.

Allow multiple Models to be passed into MoveProposal
Currently MoveProposal takes in only one Model class at a time. To allow the user to mix and match different types of moves I'd like to change it so MoveProposal can take in a set of Model instances specified by a list or tuple. This set can follow the following conventions:
If the Model are in a tuple then the move is performed in the order listed. If the Model is in a list then one Model out of the ones in the list is randomly chosen to be performed.

For example, say we have A, B, and C Model objects. If (A,B,C) is passed into MoveProposal then during the NCMC simulation A.move() will be performed followed by B.move() then C.move().
However if [A,B,C] is passed in, then A OR B OR C move method will be performed.
It could also be possible to combine these two specifications, so if you passed – say, [A, (B,C)] – then during the move proposal step either A.move() OR B.move() AND C.move() would be performed.
Any thoughts/input on this @nathanmlim @davidlmobley ?

@sgill2 - I'm confused by this. Trying to talk to you IRL.

My pseudocode to illustrate how I imagine the result looking:
(let A = Model for ligand rotation)
(let B = Model for side chain rotation)
A = A(*args)
B = B(*args)
move_list = (A, B)
move_prop = MoveProposal(move_list, nstepsNC)
Simulation(move_prop, everything_else)
Simulation.run()

In the simulation.py script here we have the lines:
self.model, self.nc_context = self.mover.moves['method'](model=self.model, nc_context=self.nc_context)

In mover.moves is a dictionary that stores the list of methods to apply onto the model object. If you want to apply multiple move types on a single ligand you could loop over them like:
for m in mover.moves['method']:
    m(model,nc_context)

@sgill2 - the thing your approach does is weds us to one particularly handling of a move_list in MoveProposal, which is less than ideal, I think.  Seems like this would be fairly hard to code up in this framework.

You could always assign a probability attribute to each Model object that gets checked if you want to do different probability moves. Right now we don't have anything in place to handle that case anyway.

I think what I'm trying to say is that I like the relatively clean behavior of Nathan's existing code. Specifically, @sgill2 , if you wanted to mix multiple kinds of moves in Nathan's existing framework I think you could do it with something like:
for m in mover.moves['method']:
   self.model, self.nc_context = m(model, nc_context)

as Nathan wrote, which is super minimal. But if you wanted to be fancy about it, it would be easy to mix different probabilities:
rigid_rotations = [ m for m in mover.moves if m.name=='rigid_rotation']
sidechain_rotations = [ m for m in mover.moves if m.name=='sidechain_rotation']
r = rand()
if r < 0.2:
  for m in sidechain_rotations:
      self.model, self.nc_context = m(model, nc_context)
else:
  for m in rigid_rotations:
      self.model, self.nc_context = m(model, nc_context)

That just seems clean to me.
Unless there is a very strong argument for making the move be a function of the Model, @sgill2 , I'd really prefer to have it remain separate -- to me, conceptually, a move is something which modifies a model, as in self.model, self.nc_context = m(model, nc_context), but it is not a property/function of a model itself. So it should logically be separate unless there is a profound reason for connecting it.

Just to be clear let me start by reiterating the points I'm trying to make

I think that each type of move to be performed should have it's own separate model
I think that the move should be tied to the model

@davidlmobley I'm not seeing how it would be easier. If you were going to propose probabilities in that fashion you would have to change the base code every time you want to change your probabilities* since that code appears in Simulation. Also I still don't think that suggestion handles multiple regions very gracefully.

rigid_rotations = [ m for m in mover.moves if m.name=='rigid_rotation']
sidechain_rotations = [ m for m in mover.moves if m.name=='sidechain_rotation']
r = rand()
if r < 0.2:
for m in sidechain_rotations:
self.model, self.nc_context = m(model, nc_context)
else:
for m in rigid_rotations:
self.model, self.nc_context = m(model, nc_context)

Say you wanted to select one sidechain to be rotated with a probability of 0.8 and another with a probability of 0.2; how would you specify that since you'd be giving all sidechain_rotation moves the same probability? Separate models with their own probabilities assigned wouldn't have that problem.
Specifying a model for each type of move also has another benefit for developers. You pointed out that it would be possible to specify multiple ligands in rigid_rotation – if the user had foresight to do that. Generalizing code can take quite a bit of work, and allowing separate models for each move makes testing ideas easier.
Also by tying in the move to Model it's much easier for a user to implement their own moves. If a user wants to make their own move in the current framework, first they have to make their own Model class with the proper attributes. THEN they also have to modify MoveProposal so that it can actually perform the move.
It seems like an unnecessary hoop to go through making two custom classes – or changes to the master branch – for one desired modification. At the very least that was my experience while refactoring the smart darting move.  I think lowering barriers to usable code is a good thing.
I feel like I'm more adamant about allowing multiple models to be specified in the move proposal. It mostly just irks me I have to make changes in multiple places when I want to implement a move that requires a new model. That, and it makes more conceptual sense to me that one Model = one move.

I agree that my way wouldn't make it super easy to combine multiple moves with differing probabilities without modifying Simulation. I'm just pointing out that how you'd modify Simulation would be straightforward.
However, @sgill2 - I think you're thinking of the world we're in now, where we don't have many Model classes implemented so each new kind of move involves a new Model AND a new way to propose moves, whereas I'm thinking of the world we're going to be in soon where we want to implement new kinds of move proposals that use properties that are already held by Models we already have. For example, we're going to be doing sidechain rotational moves where we propose random sidechain rotations. But we'll also want to try generating the rotational moves in other ways -- for example, the move proposal engine can match the sidechain being moved to a rotamer library and use that to bias the angles proposed for the move. This would use the same Model and only the move proposal would be different.
More generally, I think we'll want to ultimately be exploring different ways of making the same general kind of move proposals which would use the same input Model but do something different with it. This seems to me to be a strong argument for having Model and move proposals be separate.

Also by tying in the move to Model it's much easier for a user to implement their own moves. If a user wants to make their own move in the current framework, first they have to make their own Model class with the proper attributes. THEN they also have to modify MoveProposal so that it can actually perform the move.

This is not "easier to implement" in terms of "substantially less code", I don't think, I think it's just "fewer places to modify the code".  Or am I missing something?

It seems like an unnecessary hoop to go through making two custom classes – or changes to the master branch – for one desired modification. At the very least that was my experience while refactoring the smart darting move. I think lowering barriers to usable code is a good thing.

Yes, but I'm fairly convinced that keeping these things separate is going to help extensibility -- as argued above, think of the case where we already have a Model which contains the info you need so you only have to implement the requisite move, which is easier than writing a new Model AND move. And if each new type of move needs a new type of Model even if the Model is the same, we're going to accumulate a lot of code duplication, I think.
Finally, I still think these are logically separate things so they should be constructed that way. A move is something which changes the system. A Model has properties of the system.
I'm still open to counterarguments, and we should keep going until we're convinced one way or the other. :) This is an important decision for the long-term future of the code.

Closed via #76


Allow listActions on a ReferencedList field

I think, it would be nice to have the possibility to use the listActions option from the listView also on a ReferencedList field. Hence it would be possible to jump form the ReferencedList table to the edtion, show and/or delete view of the corresponding item.
Since the directive <ma-datagrid> is used  for the ReferencedList too, this shouldn't be a big change in the existing code. I wasn't able to do it, probably because of a lack of knowledge about Angular binding and compiling issues.
In maColumn.js from line 20 on: Instead of parsing an empty array for listActions  you would parse then the new added variable listActions from the ReferencedList instance.
                if (scope.type == 'ReferencedList') {
                    // special case to avoid recursion
                    element.append(
                        '<ma-datagrid name="{{ field.getReferencedView().name() }}"' +
                             'entries="field.entries"' +
                             'fields="field.getReferencedView().fields()"' +
                             'entity="field.getReferencedView().entity"' +
                             'listActions="[]">' +
                        '</ma-datagrid>'
                    );
                    $compile(element.contents())(scope);
                    return;
                }

Yes sir, very easy to add.

Thanks for your always fast support.
(I think my mistake was, that I didn't use the to two colons in front of field (in the line list-actions="::field.listActions()".)

Is this already implemented? I pulled the repository today and I noticed the files were updated but this aparently does not work.
Also. Can you post an usage example?.


[improve][connector-v2][kafka-connector] Add e2e code for Kafka Kerberos authentication

Search before asking

[X] I had searched in the feature and found no similar feature requirement.

Description
Add e2e code for Kafka Kerberos authentication
Usage Scenario
No response
Related issues
No response
Are you willing to submit a PR?

[X] Yes I am willing to submit a PR!

Code of Conduct

[X] I agree to follow this project's Code of Conduct

Please assign it to me


[qcheck-STM] Add support for pure, first-class functions

In the Gospel paper "GOSPEL -Providing OCaml with a Formal Specification Language" I see in Sec.2.3 "Higher-Order Functions"

"we cover in this paper only the simpler case where f is a pure function. In this case, we specify map as follows: [...]
We leave the generalization to the general case of an effectful f to future work."

We should be able to support this with QCheck/STM too.
An example from multicoretests:
https://github.com/ocaml-multicore/multicoretests/blob/fa3f668e45e86995adb0e7dbb8ed0f26772ac503/src/lazy/stm_tests.ml#L36-L70
  type cmd =
    | [...]
    | Map of int_fun
    | Map_val of int_fun
  and int_fun = (int -> int) fun_

  let pp_int_fun par fmt f =
    Format.fprintf fmt (if par then "(%s)" else "%s") (Fn.print f)

  let pp_cmd par fmt x =
    let open Util.Pp in
    match x with
    | [...]
    | Map x -> cst1 pp_int_fun "Map" par fmt x
    | Map_val x -> cst1 pp_int_fun "Map_val" par fmt x

  let show_cmd = Util.Pp.to_show pp_cmd

  let arb_cmd _s =
    [...]
    QCheck.make ~print:show_cmd
      (Gen.oneof
         [ [...]
          Gen.map (fun f -> Map f)     (fun1 Observable.int int').gen;
          Gen.map (fun f -> Map_val f) (fun1 Observable.int int').gen;
         ])

Notes:

The initial recursive type above is not needed. It is a left-over artifact from when we used ppx_deriving.show to derive print functions
QCheck's function printers do not necessarily produce syntactically correct OCaml code
For testing something like val Hashtbl.fold : ('a -> 'b -> 'c -> 'c) -> ('a, 'b) t -> 'c -> 'c more type instantiation (of 'c) will be needed. Here one could just go with a default (int? char? ...) or instantiate to the same as 'a or 'b or ... :thinking:

The lack of higher-order function support is the main blocker for achieving higher test coverage:

Fixed in #277


.NET HTTP -> HTTPS redirect

Move these to configuration-files/aws-provided/security-configuration. They are using the old folder names.
Thanks,
-Michael

Ah, right. I've moved these in a different PR. Thanks.


Incorporate pymgrid data

Incorporate real life data from pymgrid into the simulator:

PV data
Load data

Mimic the way pymgrid's microgrid are built (e.g. battery capacity in hours of mean load)

Codecov Report

Merging #19 (e244bf6) into main (db81011) will not change coverage.
The diff coverage is 100.00%.

@@            Coverage Diff            @@
##              main       #19   +/-   ##
=========================================
  Coverage   100.00%   100.00%
=========================================
  Files            7         8    +1
  Lines          244       304   +60
  Branches        30        38    +8
=========================================
+ Hits           244       304   +60

Impacted Files
Coverage Δ

src/easygrid/types.py
100.00% <ø> (ø)

src/easygrid/__main__.py
100.00% <100.00%> (ø)

src/easygrid/config/pymgrid_config.py
100.00% <100.00%> (ø)

src/easygrid/config/realistic_config.py
100.00% <100.00%> (ø)

src/easygrid/data/data_utils.py
100.00% <100.00%> (ø)

src/easygrid/microgrid.py
100.00% <100.00%> (ø)

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


Add return types to PUT, POST and PATCH methods.

Also add return types for proxy and redirect handlers.
Partial solution for https://github.com/GoogleCloudPlatform/kubernetes/issues/6455
@bgrant0607 @nikhiljindal

Looks OK to me, but I don't know much about this code. @nikhiljindal

LGTM, modulo existing comments.
Can you please regenerate swagger spec as well.
Thanks!

Comments addressed, ptal.
Thanks!
--brendan

Comments addressed, fixed the swagger gen (not sure what happened there...)
ptal.
Thanks!
--brendan

The swagger generation script doesn't do a build. It executes ${KUBE_OUTPUT_HOSTBIN}/kube-apiserver.

Comment addressed.  ptal
Thanks
--brendan

LGTM.
I think ListOptions is still busted, but unused.
And, it looks like there's another go-restful bug, since Status is referred to as a "type" rather than as "$ref".
cc @smarterclayton

LGTM


Does the add-on show new files instantly after adding them to my RD downloads or torrents?

I just added a movie file to RD
DEBRID search addon isn't showing the file or even loads the addon when I opened the movie in STREMIO ( I tried this 5  minutes after adding the file to my RD downloads)
I unrestricted a gdrive file to my links in RD
Doesn't it show new files instantly?
Need help Sir
Edit:It now shows all the files after 8 hours ,
(I just woke up)
Sir , exactly how many hours does it take for a
movie/show to show up in DEBRID SEARCH addon after adding it in MY REAL DEBRID account?

The catalog in home page or discover page refreshes after 4hrs I think. But stream links in movie/show details page will refresh within around 1 minute


Dump PraxisMapper stats at debug level

Dump PraxisMapper stats at debug level
This removes the need to for the debug level above debug when running specs and prevents noisy logs. Also, I updated the plugin to NOT log the stats if no queries have been done.
This fixes https://github.com/rightscale/praxis/issues/107
Signed-off-by: Justin Gaylor<EMAIL_ADDRESS>

Looks good. One hesitation I have though is whether not having the stats logged out could be confusing if you're expecting to find something there.

@justingaylor why do we want to log them at debug? Those stats are completely useful in normal operations, including production.
I think that it'd be much more powerful if you could configure the logging level you want them to be at.

I also think that we shouldn't skip logging the stats if no queries were made. Consistency is important, and the lack of stats might be very confusing like @careo is suggesting.

@blanquer Well, I tend to agree with you. However, they end up being quite noisy in logs due to things like health checking. This is, of course, abated a bit thanks to my second commit. I don't really care which way we go here.

Coming late to the party and I think this issue has been superceded by #109, but I see Josep's point -- if stats aren't consistently printed for every request, then it gets harder to collect an accurate picture of DB usage over many requests (i.e. "no DB queries" counts as a data point).
The proposal in #109 seems favorable; for requests that are known to be always "boring," the app can configure the mapper plugin not to emit stats.


UseOrEmpty rule is not active

Expected Behavior
UseOrEmpty should report instances like y ?: emptyList().
Observed Behavior
Violating code doesn't trigger the rule.
Steps to Reproduce
detekt 1.16.0
The rule is enabled in the config:
style:
  UseOrEmpty:
    active: true

The snippet is taken directly from the detekt tests for the rule but for some reason it passes perfectly in an actual project.
fun test(x: List<Int>?) {
    val a = x ?: emptyList()
}

Context
After updating to 1.16.0 and enabling some of the new rules (at least some of which worked and produced new reports), I noticed UseOrEmpty specifically wasn't getting triggered in a large project riddled with ?: empty*s.
I can try to provide a sample project if this is not easily reproducible in other environments.
Your Environment

Version of detekt used: 1.16.0

This rule requiters type solving, do you have it enabled?

Ah, thank you, missed this in one of the release notes. Then this bug is not relevant.
On another note though, I'm using a custom task and, from the docs, I couldn't figure out what exactly I need to pass to classpath to make it work...

I couldn't figure out what exactly I need to pass to classpath to make it work...

There is a page about this exactly: https://detekt.github.io/detekt/type-resolution.html

I couldn't figure out what exactly I need to pass to classpath to make it work...

There is a page about this exactly: detekt.github.io/detekt/type-resolution.html

Yep, thanks, I found as much. But there aren't many examples and this is gradle we're talking about.
Through quite a few experiments, the best I have come up with in a multi-module android project is:
...
	jvmTarget = "1.8"
	classpath.from(fileTree(projectDir) {
		include("*/build/**/*.class")
	})
...

This results in 22k UnusedImport reports and I don't really know why. My best guess is this happens because the class files from libraries are not included in the matcher above. But I'm not sure how to proceed right now.

But there aren't many examples and this is gradle we're talking about.

Is there a reason why you're not using the detektMain and other generated tasks that already configure the classpath for you?

But there aren't many examples and this is gradle we're talking about.

Is there a reason why you're not using the detektMain and other generated tasks that already configure the classpath for you?

The only way to enable this is to apply the detekt gradle plugin to each gradle module in the project, right?
In the past I found it resulted in much slower lint runs as compared to a single detekt task that runs once over all sources in the project:
task detektAll(type: io.gitlab.arturbosch.detekt.Detekt) {
	parallel = true
	failFast = false
	autoCorrect = !project.hasProperty("ci")
	buildUponDefaultConfig = true
	dependsOn(":custom-detekt-rules:build")
	source = files(projectDir)
	config.from = project.file(".static/config/default-detekt-config.yml")
	include("**/*.kt")
	exclude("*/build/")
	reports {
		html {
			enabled = true
			destination = project.file("build/reports/detekt.html")
		}
		xml.enabled = false
	}
}

The only way to enable this is to apply the detekt gradle plugin to each gradle module in the project, right?

Yes

In the past I found it resulted in much slower lint runs as compared to a single detekt task that runs once over all sources in the project:

I see. Doing a singe run without the classpath is obviously faster as you don't have type resolution enabled. I'm unsure you can have a single task and compute a classpath that would work for all the modules (i.e. the "sum" of all the classpaths) to enable type resolution.

In the past I found it resulted in much slower lint runs as compared to a single detekt task that runs once over all sources in the project

We fixed that issue in the gradle plugin sobre versions ago. Now the time is nearly the same. So you are safe.

@cortinico @BraisGabin thank you for the help and the tips, I will play with moving back to the per-module tasks.


Add support for gt and gT switching tabs

@bronson pulling your change in.

Haha, right on.  I've been meaning to clean up these old branches/forks, now I'm glad I didn't.

:)


Feature request: support options for suppressing InsecurePlatformWarning and requests.exceptions.InvalidHeader

I think the requests is designed for keep high security. But when prototype use or trial use, that restrictions are pesty. Especially two errors below.

InsecurePlatformWarning: A true SSLContext object is not available
requests.exceptions.InvalidHeader: Invalid return character or leading space in header

I'll show the code below.
...
# [Pesty Case-1]
# This application-specific header includes spaces and marks,
# but the requests outputs 'requests.exceptions.InvalidHeader' error.
headers ={
    "Authorization" : " Basic q3io5yaFA="
}
# [Pesty Case-2]
# If you use 'verify=False' option, the requests outputs 'InsecurePlatformWarning' warning.
r = requests.get(url, headers=headers, verify=False)
...

I think supporting a option for suppressing them is benefit, like this.
r = requests.get(url, headers=headers, disable_security_assertion=True)
#                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ like this!

What do you think?

Thanks for this report! However, we will not be disabling either of these features.
Firstly, the warning. You've identified it as an InsecurePlatformWarning, but I suspect it's actually an InsecureRequestWarning, as InsecurePlatformWarning is not caused by passing verify=False. This warning is intended to be a reminder to you to remove verify=False as soon as feasibly possible. There is almost never a reason to pass verify=False. If you're using a self-signed cert on your service, you can simply download the self-signed certificate using a web browser or OpenSSL, save it to a PEM file, and then pass the path to that file to verify instead. This will prevent you bumping into errors. Certainly you should never allow your software to enter production with verify=False in place. That's why this error is there, and providing an extra switch to easily defeat it would entirely remove the purpose of it.
Secondly, the exception. This exception is a hard fail, and again we will not provide tools to circumvent it. You should never, under any circumstances, emit a header with leading whitespace. While in principle such a header is syntactically valid HTTP/1.1, in practice other HTTP/1.1 implementations frequently interpret such a header incorrectly, most commonly by failing to parse it entirely. This opens up the possibility of subtle errors or request smuggling attacks, and the risk is doubly strong in the case of any code that passes user-specified data to Requests. Given that there is no legitimate purpose for disabling this test (there is no reason you should ever need leading whitespace in your header field value), there is no reason to make this bypassable. Simply adjust the code that is generating your headers. =)

:+1:

My goodness. Really?
If you absolutely must do that, you can use the PreparedRequest flow which will let you modify headers after we have prepared them, at which point we won't do further validation.
Boy that's silly though. =P


SW-4989 Reorg accelerator router code

moved code into individual subdirs
extracted out routing for cohorts and deliverables
replaced AcceleratorMain usage with the 'Page' component which already has built-in header wrappers and snackbar message
kept the original AcceleratorMain usage in DeliverablesList for a later cleanup
if there are any styling/spacing issues we can cleanup later

Nice, thanks for the refactor and getting getting rid of AcceleratorMain

We still have AcceleratorMain and an equivalent used for both deliverables list use-cases. I will clean those up separately.


Dronekit supported drone Recommendation

I am willing to test drone kit custom application, can anyone recommend me the state of the art drone (low cost) that fully support drone kit?

Any drone running ArduPilot will be "particularly compatible". Suggest you ask for recommendations on ArduPilot forums. You will need to specify if DroneKit is to run on a ground station or on a companion computer, as it will change the recommendation.


Add writable_setgid_group option to enable sticky gid writable dirs

Q
A

Bug fix?
no

New feature?
yes

BC breaks?
no

Deprecations?
no

Fixed tickets
n/a

The new option 'writable_setgid_group' allows deployments that use a common group between web server user and project user, using the existing deploy:writable task.
It's similar to https://github.com/deployphp/deployer/issues/404#issuecomment-126986068, but it also works with default recipes.
Test included.

What's different?
$ setfacl -R -m u:"www-data":rwX -m u:`whoami`:rwX tmp
$ setfacl -dR -m u:"www-data":rwX -m u:`whoami`:rwX tmp

Vs
$ setfacl -R -m u:"www-data":rwX g:deployers:rwX u:`whoami`:rwX tmp
$ setfacl -dR -m u:"www-data":rwX  g:deployers:rwX u:`whoami`:rwX tmp

We need document and more test cases.
$hasfacl = run("getfacl -p $dir | grep \"^user:$httpUser:.*w\" | wc -l")->toString();

May be add fallback to this:
run("chgrp {{common_group}} $dirs");
run("chmod 775 $dirs");

I do intend to get back to this update and get the docs updated, been busy with other things.
0775 would be marginally better but my 2775 is better still as an option, once I get around to documenting it.

Cool!

I've been looking at this.  I've taken the code in the first comment for #404 and added my extra setgid method.
I'd like to write a test that confirms each mode runs the expected command.  I don't think that I can write a reliable test that tries to examine the outcome of each of the commands because they depend on things such as a group the user is in, or an OSX command in a Linux environment.
I don't see a simple way to set an expected flag. I've passed ['verbosity' => 999] options to $this- >exec in the test and captured the output, so I could scan the output for Run: lines.  Eugh.
Any better suggestions?

Documentation will be very helpful.

I've made a start on the docs:
https://github.com/nosnickid/docs/blob/master/recipes.md#deploywritable_dirs

Hi,
Since in this PR no progress, i'm closing it.


What is the Course field in database?and is the speed per mile or kilometer?

What is the Course field in database?and is the speed per mile or kilometer?

Course represents direction of vehicle/tracker, i.e. angle where it is moving right now. Speed is in knots (additional info here http://en.wikipedia.org/wiki/Knot_(unit)).

How can i change speed unit to KM/H?

In web UI you can change how to display it in 'Settings' >> 'Preferences' menu. You cannot change the way traccar stores it in database.

Official web app also supports various speed units.


Breadcrumbs do not update on Model change/update

Package
filament/filament
Package Version
v2.12.7
Laravel Version
v9.12.2
Livewire Version
No response
PHP Version
PHP 8.1.0
Bug description
There are issues with the breadcrumbs when updating the model, as they do not update on change.
This affects both record title attribute as well as the route key (Browser URL gets updated - e.g. from categories/1/edit to categories/2/edit, yet breadcrumb link still has old route key - e.g. categories/1/edit).
(Page title doesn't seem to update either.)
Examples from filament demo
Before:

After:

=> Breadcrumb still shows 'doloremque in laudantium' instead of 'changed record title'
Steps to reproduce

Open edit page of an existing model.
Change record title attribute or route key attribute
Save changes

Title and/or url will update. Breadcrumb will still have old title and url anchor.
Relevant log output
No response

Maybe firing an event via livewire on update / save and using alpine to listen to it?

Yeah I don't think this is a bug, if someone wants to PR it as a feature then they're more than welcome. I have no plans to though, so no point keeping this thread open.


AbstractVAE methods

I have an issue with methods such as
encoder_mean(m::AbstractVAE, x::AbstractArray) = m.encoder(x)
This is not gonna work with a classical VAE where the last layer of encoder contains both means and sigmas. Maybe change this to
encoder_mean(m::AbstractVAE, x::AbstractArray) = mean(m,m.encoder(x))
or something similar? That would however require that the model contains some label with what kind of VAEit is. This is also ttrue for decoder, where you can have fixed/scalar/diagonal sigmas. Or is there some advantage of using the TrackedArray sigmas separated as in your case?

Yes, good point. I have been wondering how to implement VAE with fixed/loose sigmas elegantly. Maybe it would be easiest to have distinct subtypes for each variant instead of labels? not sure how much extra code that would cause....
regarding the seperated sigma, I just want to use a shared sigma for all data points.

Yes, but this could lead to a lot of different subtypes. However if we keep some methods mutual than it could still work.
I see, however this should also cover the case when you don't want to share sigma and instead have sigma(x).
I think we will have to trade between generality of the code and its applicability to the different applications that we have.

The answer to the first question is the same as to whether we should have a separate type for VAE with KL divergence and VAE with Wasserstein, where the prior can be basically anything, or try to fit everything into one type with different loss functions.

I do not think so. We can define elbo() and wasserstein() which one is used in training is up to the user.
The number of cases for variance of encoder is not too big. We can have fixed, scalar(x), diagonal(x) and that is pretty much it. The same for sigma_e. So, I would vote for a general model with this kind of switch. I admit that it may lead to little mess in the attributes -- we need scalar attibute  for the constant which will be unused when variance is from the network. But it is not a big deal, right?


Fix outdated / broken links

Fixes outdated / broken links

https://phonito.io/?b=b seems having temporary (?) issues =>we’ll keep it for now
microbadger shut down => removed from list, also see https://github.com/microscaling/microbadger/issues/75#issuecomment-641906355
codenvy.com is now RedHat CodeReady Workspaces => changed entry
OpenShift Dedicated is now Red Hat OpenShift Dedicated => changed URL and description
AppDynamics docker-monitoring-extension is now open source => changed URL to Github repository https://github.com/Appdynamics/docker-monitoring-extension
YouTube still uses their https://consent.youtube.com/ml?continue= redirects for non logged in users => suggestion: remove monitoring for YouTube (Playlists) (?)
Docker Events don’t use a subdomain anymore => adjusted URL

see test results in https://github.com/veggiemonk/awesome-docker/pull/957
@johackim fyi

@agebhar1 as YouTube links are sometimes redirected and sometimes not, we should keep them to at least sometimes get notified that a video / playlist went offline or isn't available anymore


Help me with Hacking Atom Core

I cant seem to get setting up atom with the github repo working. can someone give me a step by step tutorial and the requirements for the setup??? Thanks, Ducky123456

Hi @ducky123456 what problems are you facing? have you tried https://flight-manual.atom.io/hacking-atom/sections/hacking-on-atom-core/

I have this problem that atom is not in path. can you give me step by step

@ducky123456 if you build Atom from source instead of running an installer you will have to add atom to your path manually. You can search google to find out how to do that in your OS.

What @UziTech described should be sufficient to get you up and running. Am going to close this for now.

Thanks for reaching out!
Because we treat our issues list as the Atom team's backlog, we close issues that are questions since they don't represent a task needing to be completed. For most questions about Atom there are a lot of options, check out:

User Documentation — The Atom Flight Manual
Developer Documentation — Atom API Documentation
FAQ — The Atom FAQ on Discuss
Message Board — Discuss, the official Atom and Electron message board
Chat — Join the Atom Slack team

On Discuss and in the Atom Slack team, there are a bunch of helpful community members that should be willing to point you in the right direction.


Added getter for Sanctuary

Adding getter for Sanctuary.ttslua for when SaveFile Writing becomes a thing
I hate the usage of local variable "sanctuary" when it overlaps with the global table "sanctuary".  I did it like this to match with prosperity.ttslua.  In the other functions (from previous commit) I had to use sanctuaryContent so I could call a function without overlapping variable.
Consider redoing how both this and Prosperity calculates this.  Consider instead just grabbing the "largest" value.  This would ensure if a checkbox was accidentally clicked in the middle, it wouldn't just "subtract one" from when the save/load occurred.

Use lua log(sanctuary.get_value()) from TTS Console to test


Updates to ledger publication engine

Clean up the publication engine, add inline comments, add information to README.md file, make two tiny functional changes.
Reviewers: @vinniefalco, @nbougalis

Rebooted Travis for the new year.  Try a rebase?

Still failing - always the same timeout...!

I wonder if something breaks in standalone mode.

This doesn't even build!  :-)
Closing it without prejudice, you can always reopen it.


Don't block the screen while saving a Hunger Games answer

What

Don't block the screen while saving a Hunger Games answer

Part of

#4019

Video
https://github.com/openfoodfacts/smooth-app/assets/1689815/b099ec3f-41fd-4317-b72d-0289831d7253

@teolemon I'm working on it: with background tasks the response to a hunger games question is "immediately" sent to the server.
The problem is that you still have to wait, before the next question is asked, for its product to be downloaded. In that case you don't wait with a "running..." dialog, but you wait with an empty hunger games card with a shimmering effect. I'm not convinced it is that significantly faster with low connectivity, and I'm not convinced the UI/UX is good either.

we can ask for a larger number of Robotoff questions
Do we really need to load all the whole products? Can we not load the whole images, data, on a per product basis when needed ?

we can ask for a larger number of Robotoff questions

Actually I think we already download a set of questions. Each may be about a different product.
What we could do is then to download all products in bulk first, instead of stuttering after each answer waiting for the next product to be loaded.

Do we really need to load all the whole products? Can we not load the whole images, data, on a per product basis when needed ?

That would make sense, but with a better UI. For the moment we already get the relevant image url and the name from the question. But when we click on the small image, we go to the downloaded product image page. We could instead go to a full screen zoomable page only with the question image. That would make sense, as the question is only about that image.


Words on operator precedence

Ohh, this is really nitpicking ;-) Ok, to make you sleep well I will rewrite the text.
On the other hand I really find it good that you take this seriously. My students are
way too sloppy on the copyright issues.
Cheers,
Martin

On 25 Sep, 2019, at 23:39, Schuyler Eldridge<EMAIL_ADDRESS>wrote:
@seldridge requested changes on this pull request.
Generally this looks great.
@schoeberl https://github.com/schoeberl: I do have a licensing question. This text is verbatim from your book https://github.com/schoeberl/chisel-book/blob/master/chisel-book.tex#L669 which is CC by SA 4.0 https://creativecommons.org/licenses/by-sa/4.0/. My understanding of that license is that it is viral. My non-legal understanding is that that would require re-licensing the entire website under CC by SA 4.0 due to the SA clause. The website is Apache 2.0 and should probably stay Apache 2.0 due to intended inclusion of code examples.
I don't know how to handle this, but I would prefer if this was rewritten from scratch and not CC by SA 4.0.
It may be useful if @jackkoenig https://github.com/jackkoenig chimes in here.
In docs/src/main/tut/chisel3/operators.md https://github.com/freechipsproject/www.chisel-lang.org/pull/29#discussion_r328349588:

@@ -51,3 +51,14 @@ Chisel defines a set of hardware operators:
We have to use triple equals=== for equality and =/=
for inequality to allow the
native Scala equals operator to remain usable.

+The Chisel operator precedence is determined by the evaluation order of the circuit,
+which follows the Scala operator precedence.
+If in doubt, it is always a good praxis to use parentheses.
"praxis" sounds a bit antiquated, but it's technically correct. As a nit, "practice" would sound better.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub https://github.com/freechipsproject/www.chisel-lang.org/pull/29?email_source=notifications&email_token=AAE63GB3KSYOIJXR24XCFMLQLPLBHA5CNFSM4I2ACIYKYY3PNVWWK3TUL52HS4DFWFIHK3DMKJSXC5LFON2FEZLWNFSXPKTDN5WW2ZLOORPWSZGOCF6I7TQ#pullrequestreview-293375950, or mute the thread https://github.com/notifications/unsubscribe-auth/AAE63GDQ4XUBM4DDBNCJ2M3QLPLBHANCNFSM4I2ACIYA.

BTW, about copyright and CC. As the words are mine and I have the copyright I think I can also use them under a different license, such as Apache 2.0. The relicensing would be for those who do not own the copyright. E.g., you would not be allowed to copy from my book into this Apache-licensed text. Which makes sense.
Cheers,
Martin

On 26 Sep, 2019, at 0:01, Martin Schoeberl<EMAIL_ADDRESS>wrote:
Ohh, this is really nitpicking ;-) Ok, to make you sleep well I will rewrite the text.
On the other hand I really find it good that you take this seriously. My students are
way too sloppy on the copyright issues.
Cheers,
Martin

On 25 Sep, 2019, at 23:39, Schuyler Eldridge<EMAIL_ADDRESS>wrote:
@seldridge requested changes on this pull request.
Generally this looks great.
@schoeberl https://github.com/schoeberl: I do have a licensing question. This text is verbatim from your book https://github.com/schoeberl/chisel-book/blob/master/chisel-book.tex#L669 which is CC by SA 4.0 https://creativecommons.org/licenses/by-sa/4.0/. My understanding of that license is that it is viral. My non-legal understanding is that that would require re-licensing the entire website under CC by SA 4.0 due to the SA clause. The website is Apache 2.0 and should probably stay Apache 2.0 due to intended inclusion of code examples.
I don't know how to handle this, but I would prefer if this was rewritten from scratch and not CC by SA 4.0.
It may be useful if @jackkoenig https://github.com/jackkoenig chimes in here.
In docs/src/main/tut/chisel3/operators.md https://github.com/freechipsproject/www.chisel-lang.org/pull/29#discussion_r328349588:

@@ -51,3 +51,14 @@ Chisel defines a set of hardware operators:
We have to use triple equals=== for equality and =/=
for inequality to allow the
native Scala equals operator to remain usable.

+The Chisel operator precedence is determined by the evaluation order of the circuit,
+which follows the Scala operator precedence.
+If in doubt, it is always a good praxis to use parentheses.
"praxis" sounds a bit antiquated, but it's technically correct. As a nit, "practice" would sound better.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub https://github.com/freechipsproject/www.chisel-lang.org/pull/29?email_source=notifications&email_token=AAE63GB3KSYOIJXR24XCFMLQLPLBHA5CNFSM4I2ACIYKYY3PNVWWK3TUL52HS4DFWFIHK3DMKJSXC5LFON2FEZLWNFSXPKTDN5WW2ZLOORPWSZGOCF6I7TQ#pullrequestreview-293375950, or mute the thread https://github.com/notifications/unsubscribe-auth/AAE63GDQ4XUBM4DDBNCJ2M3QLPLBHANCNFSM4I2ACIYA.

—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub https://github.com/freechipsproject/www.chisel-lang.org/pull/29?email_source=notifications&email_token=AAE63GAU4U34AUHZRWY4A7TQLPNSTA5CNFSM4I2ACIYKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD7TRY3Y#issuecomment-535239791, or mute the thread https://github.com/notifications/unsubscribe-auth/AAE63GAMOGOL6IJRMMLG36TQLPNSTANCNFSM4I2ACIYA.


Improve test hygiene in ConvertSubcommandTests

Bug/issue #, if applicable: None
Summary
This PR adds some setup and teardown for the tests in SwiftDocCUtilitiesTests.ConvertSubcommandTests to clean up the process environment and working directory before and after each test. This resolves some test flakiness that depended on specific environmental conditions. In particular, it resolves testParameterValidationFeatureFlag failing when tests are run sequentially, and resolves testTreatWarningAsError failing when a symlink is present in the Swift-DocC directory tree.
Dependencies
None
Testing
Steps:

touch test && ln -s test test2
swift test (Important: not bin/test, as the test only failed when run sequentially due to unclean environment)
Ensure that all tests pass.
rm test test2 (to clean up your repo state)

Checklist
Make sure you check off the following items. If they cannot be completed, provide a reason.

[ n/a ] Added tests
[x] Ran the ./bin/test script and it succeeded
[ n/a ] Updated documentation if necessary

@swift-ci Please test

@swift-ci Please test

It looks like the Linux CI is running Swift 5.8; was the path() method added in 5.9?

You're right 👀

SWIFT_VERSION=5.8.1
SWIFT_WEBROOT=https://download.swift.org
SWIFT_TAG=swift-5.8.1-RELEASE
SWIFT_BRANCH=swift-5.8.1-release

This seems to have been like this for at least a month, but possibly for longer.

@swift-ci Please test


How to add a text on a link between to node?

Hello,
first thank you for this integration for angular it works great.
I'm wondering how can I acheive my goal that is to add a text on a link between 2 nodes (the text is in the datas).
Is it possible with the module?
Thank you.

Hi, you probably want to utilize either onNodeUpdate or onLinkUpdate method. this refers to the DOM element and you can use that reference to add text where you want (you also have an access to data, x,y,width, height properties)

Hi, ok thanks, I tried it but I can't find a clean way to "override" linkUpdate" and keep the default beahaviour + adding the new text on the link. Do you have some examples?
Thank you for your time :)
Julian

No, unfortunately I don't have any examples


[docs] Broken Copyright line

I was browsing RTD and noticed the following at the bottom of the pages:

© Copyright 2020-2023, {.

I suppose it has something to do with what this does: https://github.com/mondeja/mdpo/blob/b60c57d/docs/conf.py#L29-L34. Though I haven't looked any deeper.
FYI.

Thanks!


Updated a typo for PV in local persistent storage user guide.

It looks correct for me, note that a few lines below it references "/mnt/disks/ssd1" https://github.com/kubernetes-incubator/external-storage/pull/367/files#diff-9b844848b242ecd63b17e6b28df8ea71R163

/area local-volume

@wongma7 done

/lgtm


New Project - Temperature Converter

Related Issue

Added a new project called Temperature Converter

Closes: #1143
Describe the changes you've made

Added a project called Temperature Converter which converts temperature given in any unit to others.
Added html, css and js file.
Added a menu bar icon
Added back cover gif
The project is completely responsive for all kind of devices.
Tried to keep the UI clean

Describe if there is any unusual behaviour of your code(Write NA if there isn't)
NA
Checklist:

[x] My code follows the style guidelines of this project.
[x] I have performed a self-review of my own code.
[x] I have commented my code, particularly in hard-to-understand areas.
[x] I have made corresponding changes to the documentation.
[x] New and existing unit tests pass locally with my changes.

Screenshots

Hey @Vishal-raj-1 @urvashi-code1255 @991rajat @ridsuteri @harshgupta20 ,
Please review the PR.
Thanks.

Thanks for this awesome contribution. Keep Contributing.

Good work. Looks great.

Hey @991rajat , Thanks for encouraging.


Better KDE unit tests

This PR adds unit testing for the "stashing" feature of the KDE to ensure that scaling stashed histograms with a subsequent weighting stage is strictly equivalent to scaling the weights first before applying the KDE. The behavior of errors is tested with both bootstrapped errors and errors set ad-hoc with the set_variance stage (the latter is aimed at backward compatibility with the verification sample).
The KDE unit test also uses a much faster testing pipeline now, reducing the runtime for this unit test from 20 s to ~1 s.
One further small tidbit is that I tracked down the origin of the UnitStrippedWarning one always gets when running the KDE stage and fixed the offending line. This has annoyed me for a long time.

great, thank you!!


Show number of dependencies / dependents on the web

Currently number of dependencies / dependents are not available on the web.

I find them super useful to quickly check how many dependencies / dependents it has.

Why is package_lastest_version a optional?

@aspizu Because a package might have been created on JSR with no code being been published to it yet. Creating a package on JSR just means mostly registering the package name. It's required before being able to publish to it. In that time frame there are no package versions.

so, number of dependencies / dependents would need to be optional? I'm trying to get the toolchain working on my system but sqlx is failing to permission errors, I was running the first command with sudo.

Could you please guide me on setting up the test database.
error returned from database: password authentication failed for user "aspizu"

My api/.env is
DATABASE_URL=postgres://aspizu@localhost/registry

Hey, i'd like to work on this feature,
Is there any requirements to follow ?


update to work with sonarqube 7.6

Hi @maksat-software ,
thanks for this!
Currently this is introducing a lot of whitespace changes. Could you minimize these?

Also it seems to me, this PR breaks compat with SQ 6.7.
sonar-stash tries to preserve compatibility with the latest LTS version of SQ, which currently is 6.7.
Do you think it would be possible to support both 6.7 and 7.6 at the same time?

Also, the release file should not be part of the source repository.

@maksat-software I created a new PR #199 that

Implements support for 7.6, without dropping 6.7
Adds a new integrationtest to make validate multi-module projects

If you want, you can test it.
I will update the dependencies separately.


Error building odb

After checking out master and running ./build_openroad.sh --local, I get several errors when building odb:
/home/oguz286/Software/OpenROAD-flow-scripts/tools/OpenROAD/src/odb/src/def/def/def_keywords.cpp: In member function ‘void LefDefParser::defrData::defInfo(int, const char*)’:
/home/oguz286/Software/OpenROAD-flow-scripts/tools/OpenROAD/src/odb/src/def/def/def_keywords.cpp:1028:19: error: argument 1 is null but the corresponding size argument 2 value is 64 [-Werror=nonnull]
 1028 |             printf("WARNING(DEFPARS-8500): Unable to open the file defRWarning.log in %s.\n",
      |             ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 1029 |             getcwd(NULL, 64));
      |             ~~~~~~~~~~~~~~~~~
In file included from /home/oguz286/Software/OpenROAD-flow-scripts/tools/OpenROAD/src/odb/src/def/def/def_keywords.cpp:49:
/usr/include/unistd.h:520:14: note: in a call to function ‘char* getcwd(char*, size_t)’ declared with attribute ‘access (write_only, 1, 2)’
  520 | extern char *getcwd (char *__buf, size_t __size) __THROW __wur
      |              ^~~~~~
/home/oguz286/Software/OpenROAD-flow-scripts/tools/OpenROAD/src/odb/src/def/def/def_keywords.cpp:1039:19: error: argument 1 is null but the corresponding size argument 2 value is 64 [-Werror=nonnull]
 1039 |             printf("WARNING (DEFPARS-8500): Unable to open the file defRWarning.log in %s.\n",
      |             ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 1040 |             getcwd(NULL, 64));
      |             ~~~~~~~~~~~~~~~~~
In file included from /home/oguz286/Software/OpenROAD-flow-scripts/tools/OpenROAD/src/odb/src/def/def/def_keywords.cpp:49:
/usr/include/unistd.h:520:14: note: in a call to function ‘char* getcwd(char*, size_t)’ declared with attribute ‘access (write_only, 1, 2)’
  520 | extern char *getcwd (char *__buf, size_t __size) __THROW __wur
      |              ^~~~~~
/home/oguz286/Software/OpenROAD-flow-scripts/tools/OpenROAD/src/odb/src/def/def/def_keywords.cpp: In member function ‘void LefDefParser::defrData::defWarning(int, const char*)’:
/home/oguz286/Software/OpenROAD-flow-scripts/tools/OpenROAD/src/odb/src/def/def/def_keywords.cpp:1083:19: error: argument 1 is null but the corresponding size argument 2 value is 64 [-Werror=nonnull]
 1083 |             printf("WARNING (DEFPARS-7500): Unable to open the file defRWarning.log in %s.\n",
      |             ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 1084 |             getcwd(NULL, 64));
      |             ~~~~~~~~~~~~~~~~~
In file included from /home/oguz286/Software/OpenROAD-flow-scripts/tools/OpenROAD/src/odb/src/def/def/def_keywords.cpp:49:
/usr/include/unistd.h:520:14: note: in a call to function ‘char* getcwd(char*, size_t)’ declared with attribute ‘access (write_only, 1, 2)’
  520 | extern char *getcwd (char *__buf, size_t __size) __THROW __wur
      |              ^~~~~~
/home/oguz286/Software/OpenROAD-flow-scripts/tools/OpenROAD/src/odb/src/def/def/def_keywords.cpp:1094:19: error: argument 1 is null but the corresponding size argument 2 value is 64 [-Werror=nonnull]
 1094 |             printf("WARNING (DEFAPRS-7501): Unable to open the file defRWarning.log in %s.\n",
      |             ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 1095 |             getcwd(NULL, 64));
      |             ~~~~~~~~~~~~~~~~~
In file included from /home/oguz286/Software/OpenROAD-flow-scripts/tools/OpenROAD/src/odb/src/def/def/def_keywords.cpp:49:
/usr/include/unistd.h:520:14: note: in a call to function ‘char* getcwd(char*, size_t)’ declared with attribute ‘access (write_only, 1, 2)’
  520 | extern char *getcwd (char *__buf, size_t __size) __THROW __wur
      |              ^~~~~~
/home/oguz286/Software/OpenROAD-flow-scripts/tools/OpenROAD/src/odb/src/def/def/def_keywords.cpp: In member function ‘void LefDefParser::defrData::pathIsDone(int, int, int, int*)’:
/home/oguz286/Software/OpenROAD-flow-scripts/tools/OpenROAD/src/odb/src/def/def/def_keywords.cpp:1347:13: error: ‘void free(void*)’ called on pointer ‘<unknown>’ with nonzero offset 632 [-Werror=free-nonheap-object]
 1347 |         free((char*) &PathObj);
      |         ~~~~^~~~~~~~~~~~~~~~~~
In function ‘void LefDefParser::lefWarning(int, const char*)’,
    inlined from ‘void LefDefParser::lefWarning(int, const char*)’ at /home/oguz286/Software/OpenROAD-flow-scripts/tools/OpenROAD/src/odb/src/lef/lef/lef_keywords.cpp:1158:1:
/home/oguz286/Software/OpenROAD-flow-scripts/tools/OpenROAD/src/odb/src/lef/lef/lef_keywords.cpp:1208:23: error: argument 1 is null but the corresponding size argument 2 value is 64 [-Werror=nonnull]
 1208 |                 printf("WARNING (LEFPARS-2500): Unable to open the file lefRWarning.log in %s.\n",
      |                 ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 1209 |                        getcwd(NULL, 64));
      |                        ~~~~~~~~~~~~~~~~~
In file included from /home/oguz286/Software/OpenROAD-flow-scripts/tools/OpenROAD/src/odb/src/lef/lef/lef_keywords.cpp:45:
/usr/include/unistd.h: In function ‘void LefDefParser::lefWarning(int, const char*)’:
/usr/include/unistd.h:520:14: note: in a call to function ‘char* getcwd(char*, size_t)’ declared with attribute ‘access (write_only, 1, 2)’
  520 | extern char *getcwd (char *__buf, size_t __size) __THROW __wur
      |              ^~~~~~
In function ‘void LefDefParser::lefWarning(int, const char*)’,
    inlined from ‘void LefDefParser::lefWarning(int, const char*)’ at /home/oguz286/Software/OpenROAD-flow-scripts/tools/OpenROAD/src/odb/src/lef/lef/lef_keywords.cpp:1158:1:
/home/oguz286/Software/OpenROAD-flow-scripts/tools/OpenROAD/src/odb/src/lef/lef/lef_keywords.cpp:1219:23: error: argument 1 is null but the corresponding size argument 2 value is 64 [-Werror=nonnull]
 1219 |                 printf("WARNING (LEFPARS-2501): Unable to open the file lefRWarning.log in %s.\n",
      |                 ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 1220 |                        getcwd(NULL, 64));
      |                        ~~~~~~~~~~~~~~~~~
In file included from /home/oguz286/Software/OpenROAD-flow-scripts/tools/OpenROAD/src/odb/src/lef/lef/lef_keywords.cpp:45:
/usr/include/unistd.h: In function ‘void LefDefParser::lefWarning(int, const char*)’:
/usr/include/unistd.h:520:14: note: in a call to function ‘char* getcwd(char*, size_t)’ declared with attribute ‘access (write_only, 1, 2)’
  520 | extern char *getcwd (char *__buf, size_t __size) __THROW __wur
      |              ^~~~~~
In function ‘void LefDefParser::lefInfo(int, const char*)’,
    inlined from ‘void LefDefParser::lefInfo(int, const char*)’ at /home/oguz286/Software/OpenROAD-flow-scripts/tools/OpenROAD/src/odb/src/lef/lef/lef_keywords.cpp:1087:1:
/home/oguz286/Software/OpenROAD-flow-scripts/tools/OpenROAD/src/odb/src/lef/lef/lef_keywords.cpp:1132:23: error: argument 1 is null but the corresponding size argument 2 value is 64 [-Werror=nonnull]
 1132 |                 printf("WARNING (LEFPARS-3500): Unable to open the file lefRWarning.log in %s.\n",
      |                 ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 1133 |                        getcwd(NULL, 64));
      |                        ~~~~~~~~~~~~~~~~~
In file included from /home/oguz286/Software/OpenROAD-flow-scripts/tools/OpenROAD/src/odb/src/lef/lef/lef_keywords.cpp:45:
/usr/include/unistd.h: In function ‘void LefDefParser::lefInfo(int, const char*)’:
/usr/include/unistd.h:520:14: note: in a call to function ‘char* getcwd(char*, size_t)’ declared with attribute ‘access (write_only, 1, 2)’
  520 | extern char *getcwd (char *__buf, size_t __size) __THROW __wur
      |              ^~~~~~
In function ‘void LefDefParser::lefInfo(int, const char*)’,
    inlined from ‘void LefDefParser::lefInfo(int, const char*)’ at /home/oguz286/Software/OpenROAD-flow-scripts/tools/OpenROAD/src/odb/src/lef/lef/lef_keywords.cpp:1087:1:
/home/oguz286/Software/OpenROAD-flow-scripts/tools/OpenROAD/src/odb/src/lef/lef/lef_keywords.cpp:1143:23: error: argument 1 is null but the corresponding size argument 2 value is 64 [-Werror=nonnull]
 1143 |                 printf("WARNING (LEFPARS-3500): Unable to open the file lefRWarning.log in %s.\n",
      |                 ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 1144 |                        getcwd(NULL, 64));

I am using GCC version 11.1.0 (and clang 13.0.0 if that is used).

@vijayank88 can you test this?

Can you try building with ALLOW_WARNINGS=ON

@maliberty I assume like this ALLOW_WARNINGS=ON ./build_openroad.sh --local?

You would need ./build_openroad.sh --local --openroad-args ALLOW_WARNINGS=ON

That gives me the following:
❯ ./build_openroad.sh --local --openroad-args ALLOW_WARNINGS=ON
[INFO FLW-0002] Updating git submodules.
[INFO FLW-0001] Using local build method. This will create binaries at 'tools/install unless overwritten.
[INFO FLW-0017] Compiling Yosys.
make: Entering directory '/home/oguz286/Software/OpenROAD-flow-scripts/tools/yosys'
mkdir -p /home/oguz286/Software/OpenROAD-flow-scripts/tools/install/yosys/bin
cp yosys yosys-config yosys-abc yosys-filterlib yosys-smtbmc /home/oguz286/Software/OpenROAD-flow-scripts/tools/install/yosys/bin
strip -S /home/oguz286/Software/OpenROAD-flow-scripts/tools/install/yosys/bin/yosys
strip /home/oguz286/Software/OpenROAD-flow-scripts/tools/install/yosys/bin/yosys-abc
strip /home/oguz286/Software/OpenROAD-flow-scripts/tools/install/yosys/bin/yosys-filterlib
mkdir -p /home/oguz286/Software/OpenROAD-flow-scripts/tools/install/yosys/share/yosys
cp -r share/. /home/oguz286/Software/OpenROAD-flow-scripts/tools/install/yosys/share/yosys/.
make: Leaving directory '/home/oguz286/Software/OpenROAD-flow-scripts/tools/yosys'
[INFO FLW-0018] Compiling OpenROAD.
CMake Error: The source directory "/home/oguz286/Software/OpenROAD-flow-scripts/ALLOW_WARNINGS=ON" does not exist.
Specify --help for usage, or press the help button on the CMake GUI.

Perhaps
./build_openroad.sh --local --openroad-args "-D ALLOW_WARNINGS=ON"

That did the trick! I can now try the GUI mode that you demonstrated :)

Great.  The plan is to swap so that is the default outside of CI but at least you have a solution for now.


set display none when hidden

Connected to https://github.com/vaadin/vaadin-combo-box/issues/568

This change is

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

Comments from Reviewable

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

Comments from Reviewable


CARDS-2442: Include LICENSE and NOTICE files in the generated jars

To test:

first build this PR
build this branch
open a few of the generated jar files, e.g. modules/data-entry/target/cards-dataentry-0.9.23-SNAPSHOT.jar, and check that in the META-INF directory there is a LICENSE file with the Apache2 license, and a NOTICE describing the module and listing all dependencies, like:

CARDS - Data entry module

Copyright 2019-2024 DATA Team at UHN.

This software is made available under the Apache License, Version 2.0. See the LICENSE file for more details.

This product includes/uses software developed by 'an unknown organization'
  - FindBugs-jsr305 (http://findbugs.sourceforge.net/)
      License: The Apache Software License, Version 2.0
  - Guava InternalFutureFailureAccess and InternalFutures (https://github.com/google/guava/failureaccess)
      License: The Apache Software License, Version 2.0
...

tested


dat.Save() has issues creating directories.

If a plugin tries to save to a file in a directory that doesn't exist, the directory will not be created and an empty NOEOL directory (with weird permissions) will be created at the bot's root, but a file won't be stored there either. If the directory exists, but the file doesn't, the save will create a NOEOL file and data persistence will work. beta 2's absolute path check should have fixed it but it didn't.
How do I go about fixing this? and how can I resolve the NOEOLs?

Fixed


Do not handle authResponse in new activity

The documentation suggests to call handleAuthResponse in onCreate:
if (intent?.action == Intent.ACTION_VIEW) {
            handleAuthResponse(intent)
        }

This fails

because the blockstacksession might not yet be initialized.
because the transitkey might have changed when creating a new blockstack session.

To reproduce

remove android:launchMode="singleTask" from the manifest of the example app.

Once a blockstack session can be recreated from a user state object, the authResponse can be handled in onCreate again...

The SDK can handle authResponse in new activities through the AndroidSessionStore since #103


Problem with receipt class

Hi Mark,
today I saw the following error in the log:
nexus-test_node01    | Exception occurred during processing of request from ('<IP_ADDRESS>', 50998)
nexus-test_node01    | Traceback (most recent call last):
nexus-test_node01    |   File "/usr/local/lib/python3.9/socketserver.py", line 683, in process_request_thread
nexus-test_node01    |     self.finish_request(request, client_address)
nexus-test_node01    |   File "/usr/local/lib/python3.9/socketserver.py", line 360, in finish_request
nexus-test_node01    |     self.RequestHandlerClass(request, client_address, self)
nexus-test_node01    |   File "/usr/local/lib/python3.9/socketserver.py", line 747, in __init__
nexus-test_node01    |     self.handle()
nexus-test_node01    |   File "/usr/local/lib/python3.9/http/server.py", line 425, in handle
nexus-test_node01    |     self.handle_one_request()
nexus-test_node01    |   File "/usr/local/lib/python3.9/http/server.py", line 413, in handle_one_request
nexus-test_node01    |     method()
nexus-test_node01    |   File "/bsb/nexus_server/nexus_server.py", line 1322, in do_POST
nexus-test_node01    |     command_result = process_command(post)
nexus-test_node01    |   File "/bsb/nexus_server/nexus_server.py", line 1386, in process_command
nexus-test_node01    |     success = cmd_add_message(message)
nexus-test_node01    |   File "/bsb/nexus_server/nexus_server.py", line 1495, in cmd_add_message
nexus-test_node01    |     distribute_message(message)
nexus-test_node01    |   File "/bsb/nexus_server/nexus_server.py", line 1800, in distribute_message
nexus-test_node01    |     NEXUS_LXM_SOCKET.send_message(
nexus-test_node01    |   File "/bsb/nexus_server/nexus_server.py", line 745, in send_message
nexus-test_node01    |     self.lxm_router.handle_outbound(lxm_message)
nexus-test_node01    |   File "/usr/local/lib/python3.9/site-packages/LXMF/LXMF.py", line 1110, in handle_outbound
nexus-test_node01    |     self.process_outbound()
nexus-test_node01    |   File "/usr/local/lib/python3.9/site-packages/LXMF/LXMF.py", line 1634, in process_outbound
nexus-test_node01    |     lxmessage.send()
nexus-test_node01    |   File "/usr/local/lib/python3.9/site-packages/LXMF/LXMF.py", line 285, in send
nexus-test_node01    |     receipt.set_delivery_callback(self.__mark_delivered)
nexus-test_node01    | AttributeError: 'bool' object has no attribute 'set_delivery_callback'
nexus-test_node01    | -------------------------------

at the code the error was at:
    def send(self):
        self.determine_transport_encryption()

        if self.method == LXMessage.OPPORTUNISTIC:
            self.__as_packet().send().set_delivery_callback(self.__mark_delivered)
            self.state = LXMessage.SENT

        elif self.method == LXMessage.DIRECT:
            self.state = LXMessage.SENDING

            if self.representation == LXMessage.PACKET:
                receipt = self.__as_packet().send()
->            receipt.set_delivery_callback(self.__mark_delivered)
                receipt.set_timeout_callback(self.__link_packet_timed_out)

            elif self.representation == LXMessage.RESOURCE:
                self.resource_representation = self.__as_resource()

        elif self.method == LXMessage.PROPAGATED:
            self.state = LXMessage.SENDING

            if self.representation == LXMessage.PACKET:
                receipt = self.__as_packet().send()
                if receipt:
                    receipt.set_delivery_callback(self.__mark_propagated)
                    receipt.set_timeout_callback(self.__link_packet_timed_out)
                else:
                    self.__delivery_destination.teardown()

            elif self.representation == LXMessage.RESOURCE:
                self.resource_representation = self.__as_resource()

I have no clue why that hapens.
I does not happen all the time, so probably is a kind of corner case when something goes wrong with the send() function above.
The code runs not in my IDE but within a docker container.
And I see that one once in a while ...
Any idea whats happenenig here?
How can the member beeing called not be there?
The callback is set like this:
        # Create lxmessage and handle outbound to the target Nexus server with the lxm router
        lxm_message = LXMF.LXMessage(
            to_destination,
            destination_hash=destination_hash,
            source=self.socket_destination,
            content=content,
            title=title,
            fields=fields,
            desired_method=LXMF.LXMessage.DIRECT
        )

        # Register message handler
        # This is the good case - message is processed successfully
        lxm_message.register_delivery_callback(NexusLXMSocket.lxmf_delivery_callback)
        # Log delivery failure
        lxm_message.register_failed_callback(NexusLXMSocket.lxmf_delivery_callback)

And of course works for all other messages sent.
So I think it might be a problem somewhere around the receipt handling of LXMF in case something goes wrong or is run in parallel...
Any help would be appreciated.
Cheers
Stephan

It looks like it happens in case there is no interface aktive to deliver the packet.
[2022-04-23 19:30:41] [Error] No interfaces could process the outbound packet
Maybe you can check if the error handling for that case could be improved a bit as well.

Thanks for reporting this. The error handling there should definitely be improved. But would you mind sharing the interface configuration for that system? It is a bit weird that the outbound packet could not be processed by any interfaces (which is why the error occurs, since a receipt is not instantiated in that case).

Also just migrating this to the issue tracker for Reticulum, since that is where the fix actually needs to occur.


Cannot persist status update for job

I'm trying MongoDB instead of MapDB. I have in the config file:
  <crawlDataStoreFactory
      class="com.norconex.collector.http.data.store.impl.mongo.MongoCrawlDataStoreFactory">
  </crawlDataStoreFactory>

I've run the collector once with MongoDB, with start and it has finished right. I've run it , again with start, and I've gotten this fatal error, related to \progress\latest\status\ status file. Any idea?.
[non-job]: 2015-09-24 13:27:18 INFO - Starting execution.
MongoDB (crawler): 2015-09-24 13:27:18 INFO - Running MongoDB (crawler): BEGIN (Thu Sep 24 13:27:18 CEST 2015)
MongoDB (crawler): 2015-09-24 13:27:18 INFO - MongoDB (crawler): RobotsTxt support: false
MongoDB (crawler): 2015-09-24 13:27:18 INFO - MongoDB (crawler): RobotsMeta support: true
MongoDB (crawler): 2015-09-24 13:27:18 INFO - MongoDB (crawler): Sitemap support: false
MongoDB (crawler): 2015-09-24 13:27:18 INFO - MongoDB (crawler): Canonical links support: true
MongoDB (crawler): 2015-09-24 13:27:18 INFO -           CRAWLER_STARTED
MongoDB (crawler): 2015-09-24 13:27:18 INFO - MongoDB (crawler): Crawling references...
MongoDB (crawler): 2015-09-24 13:27:19 INFO -          DOCUMENT_FETCHED: http://www.federacionpiraguismodeextremadura.com
MongoDB (crawler): 2015-09-24 13:27:19 INFO -       CREATED_ROBOTS_META: http://www.federacionpiraguismodeextremadura.com
MongoDB (crawler): 2015-09-24 13:27:19 INFO -            URLS_EXTRACTED: http://www.federacionpiraguismodeextremadura.com
MongoDB (crawler): 2015-09-24 13:27:19 INFO -          DOCUMENT_FETCHED: http://www.federacionpiraguismodeextremadura.com/flateral.php
MongoDB (crawler): 2015-09-24 13:27:19 INFO -       CREATED_ROBOTS_META: http://www.federacionpiraguismodeextremadura.com/flateral.php
MongoDB (crawler): 2015-09-24 13:27:19 INFO -            URLS_EXTRACTED: http://www.federacionpiraguismodeextremadura.com/flateral.php
MongoDB (crawler): 2015-09-24 13:27:19 INFO -          DOCUMENT_FETCHED: http://www.federacionpiraguismodeextremadura.com/central.php
MongoDB (crawler): 2015-09-24 13:27:19 INFO -       CREATED_ROBOTS_META: http://www.federacionpiraguismodeextremadura.com/central.php
MongoDB (crawler): 2015-09-24 13:27:19 INFO -            URLS_EXTRACTED: http://www.federacionpiraguismodeextremadura.com/central.php
MongoDB (crawler): 2015-09-24 13:27:20 INFO -         DOCUMENT_IMPORTED: http://www.federacionpiraguismodeextremadura.com
MongoDB (crawler): 2015-09-24 13:27:20 INFO -         DOCUMENT_IMPORTED: http://www.federacionpiraguismodeextremadura.com/flateral.php
MongoDB (crawler): 2015-09-24 13:27:20 INFO -       REJECTED_UNMODIFIED: http://www.federacionpiraguismodeextremadura.com/flateral.php
MongoDB (crawler): 2015-09-24 13:27:20 INFO -       REJECTED_UNMODIFIED: http://www.federacionpiraguismodeextremadura.com
MongoDB (crawler): 2015-09-24 13:27:20 FATAL - MongoDB (crawler): An error occured that could compromise the stability of the crawler. Stopping excution to avoid further issues...
com.norconex.jef4.JEFException: Cannot persist status update for job: MongoDB (crawler)
	at com.norconex.jef4.suite.JobSuite$2.statusUpdated(JobSuite.java:359)
	at com.norconex.jef4.status.JobStatusUpdater.setProgress(JobStatusUpdater.java:50)
	at com.norconex.collector.core.crawler.AbstractCrawler.setProgress(AbstractCrawler.java:430)
	at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:377)
	at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:703)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: Cannot create status file: c:\CRAWLER\collectors\MongoDB\work\progress\latest\status\MongoDB_32__40_crawler_41___MongoDB_32__40_crawler_41_.job
	at com.norconex.jef4.status.FileJobStatusStore.write(FileJobStatusStore.java:125)
	at com.norconex.jef4.suite.JobSuite$2.statusUpdated(JobSuite.java:355)
	... 7 more
MongoDB (crawler): 2015-09-24 13:27:20 INFO - MongoDB (crawler): Stopping the crawler.
MongoDB (crawler): 2015-09-24 13:27:20 INFO -         DOCUMENT_IMPORTED: http://www.federacionpiraguismodeextremadura.com/central.php
MongoDB (crawler): 2015-09-24 13:27:20 INFO -       REJECTED_UNMODIFIED: http://www.federacionpiraguismodeextremadura.com/central.php
MongoDB (crawler): 2015-09-24 13:27:20 INFO -          DOCUMENT_FETCHED: http://www.federacionpiraguismodeextremadura.com/Bases/IVOlimpiadas2015.jpg
MongoDB (crawler): 2015-09-24 13:27:20 INFO -       CREATED_ROBOTS_META: http://www.federacionpiraguismodeextremadura.com/Bases/IVOlimpiadas2015.jpg
MongoDB (crawler): 2015-09-24 13:27:20 INFO -            URLS_EXTRACTED: http://www.federacionpiraguismodeextremadura.com/Bases/IVOlimpiadas2015.jpg
MongoDB (crawler): 2015-09-24 13:27:20 INFO -         DOCUMENT_IMPORTED: http://www.federacionpiraguismodeextremadura.com/Bases/IVOlimpiadas2015.jpg
MongoDB (crawler): 2015-09-24 13:27:20 INFO -    DOCUMENT_COMMITTED_ADD: http://www.federacionpiraguismodeextremadura.com/Bases/IVOlimpiadas2015.jpg
MongoDB (crawler): 2015-09-24 13:27:20 INFO - MongoDB (crawler): Crawler stopping: committing documents.
MongoDB (crawler): 2015-09-24 13:27:20 INFO - Committing 1 files
MongoDB (crawler): 2015-09-24 13:27:20 INFO - Sending 1 documents to Solr for update/deletion.
MongoDB (crawler): 2015-09-24 13:27:20 INFO - Done sending documents to Solr for update/deletion.
MongoDB (crawler): 2015-09-24 13:27:20 INFO - MongoDB (crawler): 4 reference(s) processed.
MongoDB (crawler): 2015-09-24 13:27:20 INFO - MongoDB (crawler): Crawler stopped.
MongoDB (crawler): 2015-09-24 13:27:20 INFO - MongoDB (crawler): Crawler executed in 2 seconds.
MongoDB (crawler): 2015-09-24 13:27:20 INFO - Running MongoDB (crawler): END (Thu Sep 24 13:27:18 CEST 2015)

Hi @csaezl,
According to the stack trace, this error happens when the .job file is written to disk. If I look at the code of FileJobStatusStore (line 125), I see that it will send an IOException if the file already exists. At the moment, I don't think this is related specifically to the Mongo data store. Can you reproduce this issue every time you run the crawler? And can you check if you have this issue with another data store (like the default one)?
@essiembre why do you think the .job file already exists? Should the code handle this possibility?

Doing some investigation, having removed all the records from MongoDB_(crawler) data base and deleted previously the work folder where the progress\latest\status\MongoDB_32__40_crawler_41___MongoDB_32__40_crawler_41_.job file will be created:
a) I run the crawler with:
<url>http://www.federacionpiraguismodeextremadura.com</url>

I got the error mentioned in my previous post (even thought the file didn't exist previously) with the result:
reference(s) processed: 4
DOCUMENT_COMMITTED_ADD: 4
Documents in MongoDB: 35
From the .job file: note=4 references processed out of 35
The difference I can see from the first run in my previous post (that processed 1812 references)  is that in the previous post the MongoDB_(crawler) data base didn't exist yet.
b) I run the crawler with:
<url>http://www.ideextremadura.es</url>

I got the result:
reference(s) processed: 39
DOCUMENT_COMMITTED_ADD: 37
REJECTED_REDIRECTED: 1
REJECTED_NOTFOUND: 1
Documents in MongoDB: 39
c) I run the crawler with:
<url>http://www.organicsextremadura.com</url>

I got the result:
reference(s) processed: 94
DOCUMENT_COMMITTED_ADD: 50
Read timed out: 37
REJECTED_CANONICAL: 7
Documents in MongoDB: 94
So it only seems to fail with the first URL.
Finally I have deleted the MongoDB_(crawler) data base and run the crawler with:
http://www.federacionpiraguismodeextremadura.com
but still get the status file error. Don't know what the problem is with this URL.

I suspect it may be a concurrency issue when trying to write the file.  As a test, do you have the same problem if you run with only 1 thread?

No, with 1 thread it doesn't produce any error. I've run the config file twice and both ended without error, The second one with REJECTED_UNMODIFIED.

I believe to have fixed this issue in this new snapshot release. Please give it a try.

I've run it twice (ADD/UNMODIFIED) and work fine

With 3 threads

Great! Thanks for testing.


fix(types): import Authflow from prismarine-auth

Import Authflow from prismarine-auth to prevent errors in typescript projects.
Previously an error was thrown:
node_modules/prismarine-realms/index.d.ts:9:27 - error TS2304: Cannot find name 'Authflow'.

9     constructor(authflow: Authflow, platform: 'bedrock' | 'java')
                            ~~~~~~~~

node_modules/prismarine-realms/index.d.ts:11:27 - error TS2304: Cannot find name 'Authflow'.

11     static from(authflow: Authflow, platform: 'bedrock' | 'java'): BedrockRealmAPI | JavaRealmAPI
                             ~~~~~~~~

Found 2 errors in the same file, starting at: node_modules/prismarine-realms/index.d.ts:9

Thanks!

Do you know when the next release will be?

You can make a release PR (see the previous ones for example)

Release PR is open here #33


Extra line breaks in output

Extra line breaks sometimes appear in the print output.

Not sure this is true...


Redesign LinkGenerator API: Expose methods which make link generation easy from middleware

For reference: This issue was created as part of https://github.com/aspnet/Routing/issues/531#issuecomment-409031317
In MVC, EndpointRoutingUrlHelper does things in 2-phases

Find endpoints
Generate link out of those enpoints

We want to provide a universal approach for this through LinkGenerator interface itself. i.e LinkGenerator would act as a facade where it will both find and generate links and also will expose useful methods for common scenarios.
cc @rynowak @JamesNK

c8946a40e4311b535d50a79c35279f1a4ca27255


Blank Screen (Image.File)

Hi, I tried to open a file that I downloaded, it is 6386px by 5688px png
DiagonalScrollView(
            enableFling: true,
            enableZoom: true,
            maxHeight: _boxSize,
            maxWidth: _boxSize,
            child: Image.file(snapshot.data) ,
            )

I can see the image if I use any other widget such as a SizedBox or Container but when I use the diagonalScrollView I just have a blank screen. There are no errors in the debug console.
flutter doctor -v
[✓] Flutter (Channel dev, v1.10.14, on Mac OS X 10.15 19A602, locale en-GB)
    • Flutter version 1.10.14 at /Users/xxxxxx/Documents/Programming/flutter
    • Framework revision 1946fc4da0 (4 weeks ago), 2019-10-07 15:23:31 -0700
    • Engine revision 1d62160fdb
    • Dart version 2.6.0 (build 2.6.0-dev.1.0 d6c6d12ebf)

[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
    • Android SDK at /Users/xxxxxx/Library/Android/sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-28, build-tools 28.0.3
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 11.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 11.1, Build version 11A1027
    • CocoaPods version 1.8.3

[✓] Android Studio (version 3.5)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 39.0.3
    • Dart plugin version 191.8423
    • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)

[✓] VS Code (version 1.39.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.6.0

[✓] Connected device (2 available)
    • Nexus 7    • xxxxxxx        • android-arm   • Android 6.0.1 (API 23)
    • ASUS X00TD • xxxxxxx • android-arm64 • Android 9 (API 28)

After a little digging changing Flutter to the master channel appears to have solved the issue.


fix dataframe gzip export

it borked

:white_check_mark: Build carball 0.6.79-reviubhv completed (commit https://github.com/SaltieRL/carball/commit/c6eb2b46f0 by @Longi94)

:white_check_mark: Build carball 0.6.79-reviubhv completed (commit https://github.com/SaltieRL/carball/commit/c6eb2b46f0 by @Longi94)

:white_check_mark: Build carball 0.6.106-wgvdaqvp completed (commit https://github.com/SaltieRL/carball/commit/796816e211 by @dtracers)

:white_check_mark: Build carball 0.6.106-wgvdaqvp completed (commit https://github.com/SaltieRL/carball/commit/796816e211 by @dtracers)


Update tools version

cf #160

Done for current version.
Will had a changelog containing which version of which tool is used for which version of CAW

As it is an ongoing task, I will close it for the current version


fix fix runtime filter expr order

Proposed changes
Current runtime filter pushing down to cte internal, we construct the runtime filter expr_order with incremental number, which is not correct. For cte internal rf pushing down, the join node will be always different, the expr_order should be fixed as 0 without incrementation, otherwise, it will lead the checking for expr_order and probe_expr_size illegal or wrong query result.
This pr will revert 2827bc1a3968f3c9bcda3ebd485a90e0d0a17e31 temporarily, it will break the cte rf pushing down plan pattern.

Further comments
If this is a relatively large or complex change, kick off the discussion at<EMAIL_ADDRESS>by explaining why you chose the solution you did and what alternatives you considered, etc...

run buildall

run buildall

run buildall

run buildall

run buildall