Does it support only NOR flash?

Hello,
I am currently working on nand flash chip .
Datasheet - http://pro0fc108.hkpic1.websiteonline.cn/upload/PN26Q01AWSIUG.pdf
It would be of great help if you can suggest in what way should I proceed for SPI nand flash
Thanks & Regards
Asmita

As explained in PyFtdi ticket, it should be quite easy to add support for this type of flash device, as there is nothing NAND specific to support this device, only two-stage read accesses.
Note that the supported AT45 NOR flash use a similar two-stage management, but for write accesses:

transfer to RAM buffer
prog buffer into flash cells.

Hello @eblot
Thanks for the response. I tried , I am able to read the data from flash. But only the partial data is correct. I am bit confused in section 7.6.2 of the datasheet.

Let say that I want to read complete flash i.e. all 64 pages in each 1024 blocks. So my approach is :
(1) page read command 0x13 followed by block/page address
(2) check for read status and error bit
(3) read from cache command 0x03 followed by byte address (0) with wrap length of 2176
(4) next page read command (0x31)
I am confused that since there are 1024 blocks and 64 pages for each block,
Then do I need to put while loop like :
while blockNum <= 1023:
(1)
(2)
(3)
while pageNum <= 63:
(4)
pageNum +=1
blockNum += 1
or the other way :
while blockNum <= 1023
while pageNum <= 63
(1)
(2)
(3)
Kindly suggest.
Thanks & Regards
Asmita

You really need to use markdown syntax, it is quite unreadable as plain text. Moreover, please copy/paste text as text, not as static images.
The PN25Q datasheet is a pure piece of sh*t, I think it is one of the worst flash datasheet I read, it does not help to understand how the flash works.
If I'd ever have to work with this product, I would contact their customer support and report how many typos, contradictory wordings, references to undocumented commands, lack of definitions, inconsistent wordings for the same command, etc.  plague the rubbish they dare to call a datasheet. They should call this a datashite...
AFAIU, you need to write this kind of loop:
# 1. initiate read from flash, starting @ address 0
0x13 0x00 0x00 0x00
  # and create an empty Python output buffer

# 2. poll status ("get features")
0x0f ..
# - loop till not busy
# - abort if ECC fails
# - break the loop here if you read all the data you wanted
#   i.e. the whole flash size for example.
#   return the Python output buffer

# 3.: this is either 3A (loop=1), 3B (loop>1), 3C (loop=last):

 # 3A. read from cache, first block, first time in the loop
   0x0b H L 0x00 0x00
   # H, L: use 2048 wrap length (you do not want ECC data)
   # 0x00: always zero
   # 0x00: output an extra dummy byte to match command behaviour

   # 3B: read next page, all other loops
   0x31

   # 3C: read last page, undocumented...
   # for now, use 0x31, once it works, optimize using this opcode
   0x3F

# 4. read 2048 bytes
#  append the 2KiB block to the Python output buffer

# 5. jump to 2.

Notes: I do not think you should use a 2176 (2048+128) wrapping, as this is likely to include the 128 ECC data bits you do not care about as part of the actual data. That would require to discard the 128 last bytes of every read output: more complex, less effective. You only need to check the ECC status every time you read a new page from flash to data buffer.

Hello @eblot
Thank you so much for detailed explanation. True, it's really difficult to understand this datasheet because of so many errors inside it. I tried two read the complete flash in two ways (code snippet mentioned below ) but was unsuccessful.
### Method 1
'''
`     def _reset_device(self):
reset_cmd = bytes(self.CMD_RESET)
self._spi.exchange(reset_cmd)
 def _read_page(self)  :
     page_read_cmd = bytes((self.CMD_PAGE_READ,0x00, 0x00, 0x00)) #PageRead 0x13
     self._spi.exchange(page_read_cmd)

 def _check_busy_status(self):
     val = self._get_featureC()[0]
     if((val & (0x01) == 1)) :
         return False
     else :
         return True

 def _check_eccFail_status(self):
     val = self._get_featureC()[0]
     if(((val) & (0x30))== (0x20)) :
        print("ECC Failed")
         return False
     else :
         return True

 def _read_from_cache(self) -> bytes:
     cache_read_cmd = bytes((self.CMD_READ_FROM_CACHE, 0x40, 0x00,0x00))   # # CMD_READ_FROM_CACHE = 0x0B
     self._spi.exchange(cache_read_cmd, 2048)
     #return self._spi.exchange(cache_read_cmd, 2048)

 def _read_next_page(self) :
     next_page_read_cmd = bytes((self.CMD_NEXT_PAGE_READ))
     self._spi.exchange(next_page_read_cmd)

 def _read_last_page(self) :
     last_page_read_cmd = bytes((self.CMD_LAST_PAGE_READ))
     self._spi.exchange(last_page_read_cmd, 2048)

 def read(self) -> bytes:
     buf = bytearray()
     self._reset_device()
     # Set ECC_EN
     self._set_featureB(0x10)
     print("\nFeature A : %s, Feature B : %s, Feature C : %s" % (self._get_featureA(), self._get_featureB(), self._get_featureC()))
     blockCount = 0
     self._read_page()         ## PageRead 0x13 0x00 0x00 0x00
     while blockCount < 1024 : ## To read whole flash i.e. 1024 blocks
         pageCount = 0
         print(blockCount)
         while self._check_busy_status() != True :
             if self._check_eccFail_status() == False :
                 break
         blockCount+=1
        for pageCountLoop in range(0,64) :  ## Each block has 64 pages
             if pageCountLoop == 0 :
                 self._read_from_cache()      ## First page of the block
            else :
                 self._read_next_page()       ## Next 63 pages

             dataV = self._spi.exchange('', 2048)
             buf.extend(dataV)
     return bytes(buf)

`
'''
### Method 2
`def read(self) -> bytes:
buf = bytearray()
self._reset_device()
# Set ECC_EN
self._set_featureB(0x10)
print("\nFeature A : %s, Feature B : %s, Feature C : %s" % (self._get_featureA(), self._get_featureB(), self._get_featureC()))
blockCount = 0
while blockCount < 1024 :
print(blockCount)
self._read_page(blockCount)               # Whole flash i.e. 1024 blocks, 0x13 with block addresses
while self._check_busy_status() != True :
if self._check_eccFail_status() == False :
break
blockCount+=1
for pageCountLoop in range(0,64) :  ## Each block has 64 pages
if pageCountLoop == 0 :
self._read_from_cache()      ## First page of the block
else :
self._read_next_page()       ## Next 63 pages
            dataV = self._spi.exchange('', 2048)
            buf.extend(dataV)
    return bytes(buf)`

I would write something like:
CMD_GET_FEATURES = 0x0F
CMD_SET_FEATURES = 0x1F
CMD_PAGE_READ_ADDRESS = 0x13
CMD_RESET = 0xFF
CMD_READ_FROM_CACHE = 0x0B
CMD_READ_NEXT_PAGE = 0x31
CMD_READ_LAST_PAGE = 0x3F

FEATURE_LOCK = 0xA0
FEATURE_FEATURE = 0xB0
FEATURE_STATUS = 0xC0

STATUS_OIP = 1 << 0
STATUS_ECCS0 = 1 << 4
STATUS_ECCS1 = 1 << 5

FEATURE_ECC = 1 << 4

PAGE_SIZE = 2048
BLOCK_COUNT = 1024
PAGE_PER_BLOCK = 64
FLASH_SIZE = BLOCK_COUNT*PAGE_PER_BLOCK*PAGE_SIZE

def _reset_device(self) -> None:
     self._spi.write([self.CMD_RESET])

def _check_busy(self) -> Bool:
    status = self._spi.exchange([self.CMD_GET_FEATURES, self.FEATURE_STATUS],
                                1)
    return bool(status[0] & self.STATUS_OIP)

def _enable_ecc(self) -> None:
    feature = self._spi.exchange([self.CMD_GET_FEATURES, self.FEATURE_FEATURE],
                                 1)
    feature[0] |= self.FEATURE_ECC
    self._spi.write([self.CMD_SET_FEATURES, feature[0]])

def _check_ecc(self) -> bool:
    status = self._spi.exchange([self.CMD_GET_FEATURES, self.FEATURE_STATUS],
                                1)
    ecc = status[0] & (self.STATUS_ECCS0 | STATUS_ECCS1)
    return not (status[0] == STATUS_ECCS1)

def _set_read_address(self, address: int) -> None:
    addrs = struct.pack('>I', address)
    self._spi.write([self.CMD_PAGE_READ_ADDRESS, addrs[2], addrs[1], addrs[0]])

def _read_first_page(self, address) -> bytes:
    return self._spi.exchange([self.CMD_READ_FROM_CACHE, 0x40, 0x00, 0x00],
                              self.PAGE_SIZE)

def _read_next_page(self) -> bytes:
    return self._spi.exchange([self.CMD_READ_NEXT_PAGE], self.PAGE_SIZE)

def _read_last_page(self) -> bytes:
    return self._spi.exchange([self.CMD_READ_LAST_PAGE], self.PAGE_SIZE)

def read_all(self) -> bytes:
    buf = bytearray()
    self._reset_device()
    self._enable_ecc()
    self._set_read_address(0)
    while len(buf) < self.FLASH_SIZE:
        while self._check_busy():
            pass  # tRD is too short (~240 us) to be worth calling time.sleep()
        if self._check_ecc():
            raise IOError('Corrupted, non recoverable flash content')
        if not buf:
            data = self._read_first_page()
        elif len(buf) < FLASH_SIZE-2*PAGE_SIZE:
            data = self._read_next_page()
        else:
            data = self._read_last_page()
        buf.extend(data)
    return bytes(buf)

Hello,
Thank you so much. I tried but not successful. I have few queries.
In give part of the code
def _check_ecc(self) -> bool:
    status = self._spi.exchange([self.CMD_GET_FEATURES, self.FEATURE_STATUS],
                                1)
    ecc = status[0] & (self.STATUS_ECCS0 | STATUS_ECCS1)
    return not (status[0] == STATUS_ECCS1)
`
As per the doc,

> ECCS provides ECC status as follows:
> 00b = No bit errors were detected during the previous read algorithm. 01b = bit
> error was detected and corrected, error bit number = 1~7. 10b = bit error was
> detected and not corrected.
> 11b = bit error was detected and corrected, error bit number = 8. ECCS is set to
> 00b either following a RESET, or at the beginning of
> the READ. It is then updated after the device completes a valid READ operation.
> ECCS is invalid if internal ECC is disabled (via a SET FEATURES command
> to reset ECC_EN).

That is , _check_ecc_ should fail at ECCS1:ECCS0  10

i.e. I think it should be

```
def _check_ecc(self) -> bool:
    status = self._spi.exchange([self.CMD_GET_FEATURES, self.FEATURE_STATUS],
                                1)
    ecc = status[0] & (self.STATUS_ECCS0 | STATUS_ECCS1)
    return (ecc == STATUS_ECCS1)
```

### Another query

In code section,

```
      if not buf:
            data = self._read_first_page()
        elif len(buf) < FLASH_SIZE-2*PAGE_SIZE:
            data = self._read_next_page()
        else:
            data = self._read_last_page()
```
why is that len(buf) condition check with FLASH_SIZE-2*PAGE_SIZE

And another query is as per doc,in instruction table, command  0x31 and 0x3F  are not returning anything.
And read_page command 0x13 asks for block address, do we need to pass it everytime, here we have set it as 0 in start.
I am confused her. Kindly suggest

Thanks & Regards
Asmita

(fix block quote)

_check_ecc() is correct, but the test is not, it should be read as
if not _check_ecc():
    raise IOError(...)

Ya, I later did changes by using
if not _check_ecc():
    raise IOError(...)

But no success.

why is that len(buf) condition check with FLASH_SIZE-2*PAGE_SIZE

_read_last_page() should be only called once, for the last PAGE_SIZE read chunk.
However, as we test of the length of the buffer before appending a new chunk, so we must account for the chunk of data that is about to be appended.
You are right, I misread the doc, it should be:
CMD_GET_FEATURES = 0x0F
CMD_SET_FEATURES = 0x1F
CMD_PAGE_READ_ADDRESS = 0x13
CMD_RESET = 0xFF
CMD_READ_FROM_CACHE = 0x0B
CMD_READ_NEXT_PAGE = 0x31
CMD_READ_LAST_PAGE = 0x3F

FEATURE_LOCK = 0xA0
FEATURE_FEATURE = 0xB0
FEATURE_STATUS = 0xC0

STATUS_OIP = 1 << 0
STATUS_ECCS0 = 1 << 4
STATUS_ECCS1 = 1 << 5

FEATURE_ECC = 1 << 4

PAGE_SIZE = 2048
BLOCK_COUNT = 1024
PAGE_PER_BLOCK = 64
FLASH_SIZE = BLOCK_COUNT*PAGE_PER_BLOCK*PAGE_SIZE

def _reset_device(self) -> None:
     self._spi.write([self.CMD_RESET])

def _check_busy(self) -> Bool:
    status = self._spi.exchange([self.CMD_GET_FEATURES, self.FEATURE_STATUS],
                                1)
    return bool(status[0] & self.STATUS_OIP)

def _enable_ecc(self) -> None:
    feature = self._spi.exchange([self.CMD_GET_FEATURES, self.FEATURE_FEATURE],
                                 1)
    feature[0] |= self.FEATURE_ECC
    self._spi.write([self.CMD_SET_FEATURES, feature[0]])

def _check_ecc(self) -> bool:
    status = self._spi.exchange([self.CMD_GET_FEATURES, self.FEATURE_STATUS],
                                1)
    ecc = status[0] & (self.STATUS_ECCS0 | STATUS_ECCS1)
    return not (status[0] == STATUS_ECCS1)

def _set_first_page(self, address: int) -> None:
    addrs = struct.pack('>I', address)
    self._spi.write([self.CMD_PAGE_READ_ADDRESS, addrs[2], addrs[1], addrs[0]])

def _set_next_page(self) -> bytes:
    return self._spi.exchange([self.CMD_READ_NEXT_PAGE], self.PAGE_SIZE)

def _set_last_page(self) -> bytes:
    return self._spi.exchange([self.CMD_READ_LAST_PAGE], self.PAGE_SIZE)

def _read_cache(self, address) -> bytes:
    return self._spi.exchange([self.CMD_READ_FROM_CACHE, 0x40, 0x00, 0x00],
                              self.PAGE_SIZE)

def read_all(self) -> bytes:
    buf = bytearray()
    self._reset_device()
    self._enable_ecc()
    while len(buf) < self.FLASH_SIZE:
        if not buf:
            self._set_first_page()
        elif len(buf) >= FLASH_SIZE-PAGE_SIZE:
            self._set_last_page()
        else:
            self._set_next_page()
        while self._check_busy():
            pass  # tRD is too short (~240 us) to be worth calling time.sleep()
        if not self._check_ecc():
            raise IOError('Corrupted, non recoverable flash content')
        data = self._read_cache()
        buf.extend(data)
    return bytes(buf)

About ECC: are you sure your flash is programmed?
At this point, you need to use a logical analyser or an oscilloscope to trace whatever is exchange with the flash.

I'm not sure who ECC should be interpreted with a blank flash, is it documented?

I'm not sure how ECC should be interpreted with a blank flash, is it documented?

Yes , it's documented in its so-called datasheet on page 33, section 8.
It's screenshot i am attaching below.

About ECC: are you sure your flash is programmed?
At this point, you need to use a logical analyser or an oscilloscope to trace whatever is exchange with the flash.

Yes, flash is programmed

why is that len(buf) condition check with FLASH_SIZE-2*PAGE_SIZE

_read_last_page() should be only called once, for the last PAGE_SIZE read chunk.
However, as we test of the length of the buffer before appending a new chunk, so we must account for the chunk of data that is about to be appended.
You are right, I misread the doc, it should be:
CMD_GET_FEATURES = 0x0F
CMD_SET_FEATURES = 0x1F
CMD_PAGE_READ_ADDRESS = 0x13
CMD_RESET = 0xFF
CMD_READ_FROM_CACHE = 0x0B
CMD_READ_NEXT_PAGE = 0x31
CMD_READ_LAST_PAGE = 0x3F

FEATURE_LOCK = 0xA0
FEATURE_FEATURE = 0xB0
FEATURE_STATUS = 0xC0

STATUS_OIP = 1 << 0
STATUS_ECCS0 = 1 << 4
STATUS_ECCS1 = 1 << 5

FEATURE_ECC = 1 << 4

PAGE_SIZE = 2048
BLOCK_COUNT = 1024
PAGE_PER_BLOCK = 64
FLASH_SIZE = BLOCK_COUNT*PAGE_PER_BLOCK*PAGE_SIZE

def _reset_device(self) -> None:
     self._spi.write([self.CMD_RESET])

def _check_busy(self) -> Bool:
    status = self._spi.exchange([self.CMD_GET_FEATURES, self.FEATURE_STATUS],
                                1)
    return bool(status[0] & self.STATUS_OIP)

def _enable_ecc(self) -> None:
    feature = self._spi.exchange([self.CMD_GET_FEATURES, self.FEATURE_FEATURE],
                                 1)
    feature[0] |= self.FEATURE_ECC
    self._spi.write([self.CMD_SET_FEATURES, feature[0]])

def _check_ecc(self) -> bool:
    status = self._spi.exchange([self.CMD_GET_FEATURES, self.FEATURE_STATUS],
                                1)
    ecc = status[0] & (self.STATUS_ECCS0 | STATUS_ECCS1)
    return not (status[0] == STATUS_ECCS1)

def _set_first_page(self, address: int) -> None:
    addrs = struct.pack('>I', address)
    self._spi.write([self.CMD_PAGE_READ_ADDRESS, addrs[2], addrs[1], addrs[0]])

def _set_next_page(self) -> bytes:
    return self._spi.exchange([self.CMD_READ_NEXT_PAGE], self.PAGE_SIZE)

def _set_last_page(self) -> bytes:
    return self._spi.exchange([self.CMD_READ_LAST_PAGE], self.PAGE_SIZE)

def _read_cache(self, address) -> bytes:
    return self._spi.exchange([self.CMD_READ_FROM_CACHE, 0x40, 0x00, 0x00],
                              self.PAGE_SIZE)

def read_all(self) -> bytes:
    buf = bytearray()
    self._reset_device()
    self._enable_ecc()
    while len(buf) < self.FLASH_SIZE:
        if not buf:
            self._set_first_page()
        elif len(buf) >= FLASH_SIZE-PAGE_SIZE:
            self._set_last_page()
        else:
            self._set_next_page()
        while self._check_busy():
            pass  # tRD is too short (~240 us) to be worth calling time.sleep()
        if not self._check_ecc():
            raise IOError('Corrupted, non recoverable flash content')
        data = self._read_cache()
        buf.extend(data)
    return bytes(buf)

I have query in this section of code
 if not buf:             self._set_first_page()         elif len(buf) >= FLASH_SIZE-PAGE_SIZE:             self._set_last_page()         else:             self._set_next_page()         while self._check_busy():
Instead of len(buf) >= FLASH_SIZE-PAGE_SIZE, I think it should be len(buf) >= FLASH_SIZE-(63*PAGE_SIZE) and then buf should be cleared also, we need to set first page for each block

I see nothing it the doc that says that when the last page of a block is read, the address wraps up to the start of the same block. It looks like other flashes: subsequent read resume on the next block. Block segmentation is mostly for erasure operation. For read operation, the flash seems linear - at least nothing seem to indicate it is not.

Also, I think self._set_last_page() and self._set_first_page() should not return anything.
True I forgot to clear the return statements in the second version of the code

Hello @eblot ,
I tried all the possible methods but was able to read the flash using following below script. There are 3 partitions inside flash, I am able to extract complete two partitions but some files in partition 3 are missing, while extracting using ubireader, I am getting error extract_files Fatal: 1624 . But when I am doing Binwalk , I am not at all getting the files of 3rd partition. Any suggestions would be useful, thanks for your support. Once finalized, I would send you the pull request to merge for this NAND flash chip. Similarly I would like to add SPI EEPROM 25LC256 support.
`def _reset_device(self) -> None:
self._spi.write([self.CMD_RESET])
def _check_busy(self) -> bool:
    status = self._spi.exchange([self.CMD_GET_FEATURES, self.FEATURE_STATUS],1)
    return bool(status[0] & self.STATUS_OIP)

def _enable_ecc(self) -> None:
    feature = self._spi.exchange([self.CMD_GET_FEATURES, self.FEATURE_FEATURE],1)
    feature[0] |= self.FEATURE_ECC
    self._spi.write([self.CMD_SET_FEATURES, feature[0]])

def _check_ecc(self) -> bool:
    status = self._spi.exchange([self.CMD_GET_FEATURES, self.FEATURE_STATUS],1)
    ecc = status[0] & (self.STATUS_ECCS0 | self.STATUS_ECCS1)
    return not (status[0] == self.STATUS_ECCS1)
    #return (ecc == self.STATUS_ECCS1)

def _read_page(self, blockAddress: int, pageAddress: int) -> bytes :
    return self._spi.exchange([self.CMD_PAGE_READ, 0x00,blockAddress>>2,pageAddress|(blockAddress<<6 & 192)])

def _read_cache(self) -> bytes:
     return self._spi.exchange([self.CMD_READ_FROM_CACHE, 0x40, 0x00, 0x00], self.PAGE_SIZE)

def read_all(self):
    buf = bytearray()
    self._reset_device()
    self._enable_ecc()

    for j in range(0,1024):
        for i in range(0,64):

            dataList = []
            self._read_page(j,i)
            while self._check_busy():
                pass
            if not self._check_ecc():
                raise IOError('Corrupted, non recoverable flash content')

            dataList = self._read_cache()
            buf.extend(dataList)
    return bytes(buf)`


Aos vis support

meta-aos-tune: add support of aos 'Monitoring' feature
The idea is to allow the users to monitor the system state via the
resource aoscloud.io.
The by-the-way fix: recipe capture, the revision is fixed
PR has been built and tested

Reviewed-by: Oleksandr Grytsov<EMAIL_ADDRESS>


Update fluentd-gcp gems

To address problem from https://github.com/kubernetes/kubernetes/pull/45892
/cc @piosz @igorpeshansky

This change is

@igorpeshansky Could you please approve the new set of gems?


Fix request response mixup

Tested on simulated inverter with lolin32

Just wanted to state my appreciation on making this mqtt battery/ grid first stuff work!

@Chreutz did you test this pr?

Oh, yeah! Didn't figure to actually report on that, sorry. It works for me, with an SPH10K TL3.


marpa_o_ambiguity_metric and marpa_o_high_rank_only

The docs don't make it clear whether marpa_o_high_rank_only can affect marpa_o_ambiguity_metric, i.e. whether the ambiguity metric is reporting whether there are multiple parses accessible through the Marpa_Order, or whether there are multiple valid parses at all.

Fixed in commit https://github.com/jeffreykegler/libmarpa/commit/4d4af8af761aeb37c7fd5e986a63266f4606f820.  Absent feedback to the contrary, I will close this issue after a couple of days.

Closed per https://github.com/jeffreykegler/libmarpa/issues/112#issuecomment-1189601414.


Blocks are not listed in game correctly crashing inventory and not appearing on item list of give command.

Solved through adding block to ModItems Correctly.


Update app-service-value-prop-what-is.md

Line 72: Changed spelling "form" to "from"

Hi @ranshers, I'm your friendly neighborhood Microsoft Pull Request Bot (You can call me MSBOT). Thanks for your contribution!

This seems like a small (but important) contribution, so no Contribution License Agreement is required at this point. Real humans will now evaluate your PR.

TTYL, MSBOT;

@ranshers : Thanks for your contribution to the Azure documentation! The author, @omarkmsft, has been notified to review your proposed change.

#sign-off


docs: Document dns visibility limitations

Document the limitation that DNS visibility is only supported on egress.

RST check is a false signal, https://github.com/cilium/cilium/pull/16786 fixes that issue. Safe to ignore.


python310Packages.allure-behave,allure-pytest: 2.9.45 -> 2.10.0

Description of changes
fix build by bumping version to 2.10.0
Things done

Built on platform(s)

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

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

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

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

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

[ ] Fits CONTRIBUTING.md.

Thank you @fabaff for reviewing :)


Added Meta tags for description and keywords

Thanks for your contribution, but since the site redirects, we aren't looking at add SEO or other descriptions to this site for now.


[BUG] Android build pasesession fail when I use the pairing code from the open-commission-window

Reproduction steps
1、I use App-A complete matter commission
2、Use App-A open the commission window
3、capture the qrcode from the App-A
4、Use App-B parse the qrcode , the get the device IP .    App-B use the chipDeviceController#discoverCommissionableNodes and chipDeviceController.getDiscoveredDevice(i) method to find the IP which discriminator is match.
5、get IP success
6、try  build PASE session with IP , but meet time-out issue.    Using chipDeviceController#pairDeviceWithAddress method.
Bug prevalence
always
GitHub hash of the SDK that was being used
TAG <IP_ADDRESS>
Platform
android
Platform Version(s)
No response
Anything else?
There is the logs:
2023-04-28 14:50:23.505 21468-21468/com.tplink.tpm5.trial D/NsdManagerServiceBrowser: Starting service discovering for '_matterc._udp'
2023-04-28 14:50:23.505 21468-10283/com.tplink.tpm5.trial D/DL: _OnPlatformEvent
2023-04-28 14:50:23.512 21468-10282/com.tplink.tpm5.trial I/NsdManagerServiceBrowser: Started service '_matterc._udp'
2023-04-28 14:50:23.513 21468-10282/com.tplink.tpm5.trial I/NsdManagerServiceBrowser: Found service 'FF106CFB6207D4BC'
2023-04-28 14:50:23.513 21468-10282/com.tplink.tpm5.trial I/NsdManagerServiceBrowser: Found service '46986CE91C6F94F1'
2023-04-28 14:50:28.509 21468-10282/com.tplink.tpm5.trial W/NsdManagerServiceBrowser: Succeed to stop discovery service '_matterc._udp
2023-04-28 14:50:28.509 21468-21468/com.tplink.tpm5.trial D/NsdManagerServiceResolver: resolve: Starting service resolution for 'FF106CFB6207D4BC' type '_matterc._udp'
2023-04-28 14:50:28.510 21468-21468/com.tplink.tpm5.trial D/NsdManagerServiceResolver: resolve: Starting service resolution for '46986CE91C6F94F1' type '_matterc._udp'
2023-04-28 14:50:28.513 21468-10282/com.tplink.tpm5.trial W/NsdManagerServiceResolver: Failed to resolve service '46986CE91C6F94F1': 3
2023-04-28 14:50:28.517 21468-10282/com.tplink.tpm5.trial I/NsdManagerServiceResolver: Resolved service 'FF106CFB6207D4BC' to /fe80::32de:4bff:fef6:8ed
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS:  ----- entry [0] : D 1682
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS:  ----- entry [1] : T 1
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS:  ----- entry [2] : CM 2
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS:  ----- entry [3] : DN Mini Smart Wi-Fi Plug
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS:  ----- entry [4] : DT 266
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS:  ----- entry [5] : PH 36
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS:  ----- entry [6] : PI NULL
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS:  ----- entry [7] : RI 0200C24B04AC974EA68427082E5701114313
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS:  ----- entry [8] : VP 4488+257
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS:  ----- entry [9] : SAI 300
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS:  ----- entry [10] : SII 5000
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS: Discovered node:
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS: 	Hostname: fe80::32de:4bff:
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS: 	IP Address #1: fe80::32de:4bff:fef6:8ed
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS: 	Port: 5540
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS: 	Mrp Interval idle: 5000 ms
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS: 	Mrp Interval active: 300 ms
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS: 	TCP Supported: 1
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS: 	Rotating ID: 0200C24B04AC974EA68427082E5701114313
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS: 	Device Name: Mini Smart Wi-Fi Plug
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS: 	Vendor ID: 4488
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS: 	Product ID: 257
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS: 	Device Type: 266
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS: 	Long Discriminator: 1682
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS: 	Pairing Hint: 36
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS: 	Instance Name: FF106CFB6207D4BC
2023-04-28 14:50:28.518 21468-10282/com.tplink.tpm5.trial D/DIS: 	Commissioning Mode: 2
... ...
2023-04-28 14:51:13.610 21468-9475/com.tplink.tpm5.trial D/CTL: newDeviceController() called
2023-04-28 14:51:13.613 21468-9475/com.tplink.tpm5.trial D/CTL: Stopping commissioning discovery over DNS-SD
2023-04-28 14:51:13.613 21468-9475/com.tplink.tpm5.trial D/CTL: Setting attestation nonce to random value
2023-04-28 14:51:13.613 21468-9475/com.tplink.tpm5.trial D/CTL: Setting CSR nonce to random value
2023-04-28 14:51:13.613 21468-9475/com.tplink.tpm5.trial D/CTL: Setting attestation nonce to random value
2023-04-28 14:51:13.613 21468-9475/com.tplink.tpm5.trial D/CTL: Setting CSR nonce to random value
2023-04-28 14:51:13.613 21468-9475/com.tplink.tpm5.trial D/CTL: add paa from paaArray:38
2023-04-28 14:51:13.613 21468-9475/com.tplink.tpm5.trial D/CTL: Setting failsafe timer from parameters
2023-04-28 14:51:13.613 21468-9475/com.tplink.tpm5.trial D/CTL: Setting attempt thread scan from parameters
2023-04-28 14:51:13.613 21468-9475/com.tplink.tpm5.trial D/CTL: Setting attempt wifi scan from parameters
2023-04-28 14:51:13.613 21468-9475/com.tplink.tpm5.trial D/CTL: Setting attestation nonce from parameters
2023-04-28 14:51:13.613 21468-9475/com.tplink.tpm5.trial D/CTL: Setting CSR nonce from parameters
2023-04-28 14:51:13.613 21468-9475/com.tplink.tpm5.trial D/CTL: Setting PASE-only commissioning from parameters
2023-04-28 14:51:13.613 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Getting key AndroidDeviceControllerKey
2023-04-28 14:51:13.613 21468-9475/com.tplink.tpm5.trial D/CTL: No existing credentials provided: generating ephemeral local NOC chain with OperationalCredentialsIssuer
2023-04-28 14:51:13.616 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Getting key AndroidCARootCert1
2023-04-28 14:51:13.616 21468-9475/com.tplink.tpm5.trial D/CTL: Generating NOC
2023-04-28 14:51:13.618 21468-9475/com.tplink.tpm5.trial E/CTL: Device Controller Factory already initialized...
2023-04-28 14:51:13.619 21468-9475/com.tplink.tpm5.trial D/CTL: Intermediate CA is not needed
2023-04-28 14:51:13.619 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Getting key f/1/r
2023-04-28 14:51:13.619 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Getting key f/1/r
2023-04-28 14:51:13.619 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Getting key f/1/n
2023-04-28 14:51:13.619 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Getting key f/1/r
2023-04-28 14:51:13.619 21468-9475/com.tplink.tpm5.trial D/FP: Validating NOC chain
2023-04-28 14:51:13.623 21468-9475/com.tplink.tpm5.trial D/FP: NOC chain validation successful
2023-04-28 14:51:13.623 21468-9475/com.tplink.tpm5.trial D/FP: Updated fabric at index: 0x1, Node ID: 0x000000000001B669
2023-04-28 14:51:13.623 21468-9475/com.tplink.tpm5.trial D/TS: Last Known Good Time: 2023-04-26T20:14:24
2023-04-28 14:51:13.623 21468-9475/com.tplink.tpm5.trial D/TS: New proposed Last Known Good Time: 2021-06-10T00:00:00
2023-04-28 14:51:13.623 21468-9475/com.tplink.tpm5.trial D/TS: Retaining current Last Known Good Time
2023-04-28 14:51:13.623 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Getting key g/sri
2023-04-28 14:51:13.623 21468-9475/com.tplink.tpm5.trial D/KeyValueStoreManager: Key 'g/sri' not found in shared preferences
2023-04-28 14:51:13.623 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Setting key g/fs/c
2023-04-28 14:51:13.624 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Setting key f/1/m
2023-04-28 14:51:13.624 21468-9475/com.tplink.tpm5.trial D/FP: Metadata for Fabric 0x1 persisted to storage.
2023-04-28 14:51:13.624 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Setting key f/1/n
2023-04-28 14:51:13.624 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Deleting key f/1/i
2023-04-28 14:51:13.624 21468-9475/com.tplink.tpm5.trial D/TS: Committing Last Known Good Time to storage: 2023-04-26T20:14:24
2023-04-28 14:51:13.624 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Setting key g/lkgt
2023-04-28 14:51:13.624 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Deleting key g/fs/c
2023-04-28 14:51:13.624 21468-9475/com.tplink.tpm5.trial D/CTL: Joined the fabric at index 1. Fabric ID is 0x0000000000000001 (Compressed Fabric ID: D36AD0DA7902D3C9)
2023-04-28 14:51:13.624 21468-9475/com.tplink.tpm5.trial D/CTL: *** Missing DeviceAttestationVerifier configuration at DeviceCommissioner init: using global default, consider passing one in CommissionerInitParams.
2023-04-28 14:51:13.624 21468-9475/com.tplink.tpm5.trial D/CTL: Setting up group data for Fabric Index 1 with Compressed Fabric ID:
2023-04-28 14:51:13.624 21468-9475/com.tplink.tpm5.trial D/SPT: 0xd3, 0x6a, 0xd0, 0xda, 0x79, 0x02, 0xd3, 0xc9,
2023-04-28 14:51:13.624 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Getting key f/1/g
2023-04-28 14:51:13.624 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Getting key f/1/k/0
2023-04-28 14:51:13.624 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Setting key f/1/k/0
2023-04-28 14:51:13.705 21468-9475/com.tplink.tpm5.trial D/CTL: newDeviceController() called
2023-04-28 14:51:13.706 21468-9475/com.tplink.tpm5.trial D/CTL: Stopping commissioning discovery over DNS-SD
2023-04-28 14:51:13.706 21468-9475/com.tplink.tpm5.trial D/CTL: Setting attestation nonce to random value
2023-04-28 14:51:13.706 21468-9475/com.tplink.tpm5.trial D/CTL: Setting CSR nonce to random value
2023-04-28 14:51:13.706 21468-9475/com.tplink.tpm5.trial D/CTL: Setting attestation nonce to random value
2023-04-28 14:51:13.706 21468-9475/com.tplink.tpm5.trial D/CTL: Setting CSR nonce to random value
2023-04-28 14:51:13.706 21468-9475/com.tplink.tpm5.trial D/CTL: add paa from paaArray:38
2023-04-28 14:51:13.706 21468-9475/com.tplink.tpm5.trial D/CTL: Setting failsafe timer from parameters
2023-04-28 14:51:13.706 21468-9475/com.tplink.tpm5.trial D/CTL: Setting attempt thread scan from parameters
2023-04-28 14:51:13.706 21468-9475/com.tplink.tpm5.trial D/CTL: Setting attempt wifi scan from parameters
2023-04-28 14:51:13.706 21468-9475/com.tplink.tpm5.trial D/CTL: Setting attestation nonce from parameters
2023-04-28 14:51:13.706 21468-9475/com.tplink.tpm5.trial D/CTL: Setting CSR nonce from parameters
2023-04-28 14:51:13.706 21468-9475/com.tplink.tpm5.trial D/CTL: Setting PASE-only commissioning from parameters
2023-04-28 14:51:13.706 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Getting key AndroidDeviceControllerKey
2023-04-28 14:51:13.710 21468-9475/com.tplink.tpm5.trial E/CTL: Device Controller Factory already initialized...
2023-04-28 14:51:13.710 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Getting key f/4/r
2023-04-28 14:51:13.710 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Getting key f/4/r
2023-04-28 14:51:13.710 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Getting key f/4/n
2023-04-28 14:51:13.711 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Getting key f/4/r
2023-04-28 14:51:13.727 21468-9475/com.tplink.tpm5.trial D/FP: NOC chain validation successful
2023-04-28 14:51:13.727 21468-9475/com.tplink.tpm5.trial D/FP: Updated fabric at index: 0x4, Node ID: 0x0000000000000024
2023-04-28 14:51:13.727 21468-9475/com.tplink.tpm5.trial D/TS: Last Known Good Time: 2023-04-26T20:14:24
2023-04-28 14:51:13.727 21468-9475/com.tplink.tpm5.trial D/TS: New proposed Last Known Good Time: 2023-04-27T14:51:13
2023-04-28 14:51:13.727 21468-9475/com.tplink.tpm5.trial D/TS: Updating pending Last Known Good Time to 2023-04-27T14:51:13
2023-04-28 14:51:13.727 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Getting key g/sri
2023-04-28 14:51:13.727 21468-9475/com.tplink.tpm5.trial D/KeyValueStoreManager: Key 'g/sri' not found in shared preferences
2023-04-28 14:51:13.727 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Setting key g/fs/c
2023-04-28 14:51:13.727 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Setting key f/4/m
2023-04-28 14:51:13.727 21468-9475/com.tplink.tpm5.trial D/FP: Metadata for Fabric 0x4 persisted to storage.
2023-04-28 14:51:13.727 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Setting key f/4/n
2023-04-28 14:51:13.727 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Setting key f/4/i
2023-04-28 14:51:13.727 21468-9475/com.tplink.tpm5.trial D/TS: Committing Last Known Good Time to storage: 2023-04-27T14:51:13
2023-04-28 14:51:13.727 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Setting key g/lkgt
2023-04-28 14:51:13.728 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Deleting key g/fs/c
2023-04-28 14:51:13.728 21468-9475/com.tplink.tpm5.trial D/CTL: Joined the fabric at index 4. Fabric ID is 0x0000000000000001 (Compressed Fabric ID: CF8ACB2A23A289AD)
2023-04-28 14:51:13.728 21468-9475/com.tplink.tpm5.trial D/CTL: *** Missing DeviceAttestationVerifier configuration at DeviceCommissioner init: using global default, consider passing one in CommissionerInitParams.
2023-04-28 14:51:13.728 21468-9475/com.tplink.tpm5.trial D/CTL: Setting up group data for Fabric Index 4 with Compressed Fabric ID:
2023-04-28 14:51:13.728 21468-9475/com.tplink.tpm5.trial D/SPT: 0xcf, 0x8a, 0xcb, 0x2a, 0x23, 0xa2, 0x89, 0xad,
2023-04-28 14:51:13.728 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Getting key f/4/g
2023-04-28 14:51:13.728 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Getting key f/4/k/0
2023-04-28 14:51:13.728 21468-9475/com.tplink.tpm5.trial D/TOO: KVS: Setting key f/4/k/0
2023-04-28 14:51:13.728 21468-9475/com.tplink.tpm5.trial D/CTL: Setting failsafe timer from parameters
2023-04-28 14:51:13.728 21468-9475/com.tplink.tpm5.trial D/CTL: Setting adminSubject from parameters
2023-04-28 14:51:13.728 21468-9475/com.tplink.tpm5.trial D/CTL: Setting attempt thread scan from parameters
2023-04-28 14:51:13.728 21468-9475/com.tplink.tpm5.trial D/CTL: Setting attempt wifi scan from parameters
2023-04-28 14:51:13.728 21468-9475/com.tplink.tpm5.trial D/CTL: Setting attestation nonce from parameters
2023-04-28 14:51:13.728 21468-9475/com.tplink.tpm5.trial D/CTL: Setting CSR nonce from parameters
2023-04-28 14:51:13.728 21468-9475/com.tplink.tpm5.trial D/CTL: Setting PASE-only commissioning from parameters
2023-04-28 14:51:13.728 21468-9475/com.tplink.tpm5.trial D/CTL: setUseJavaCallbackForNOCRequest() called
2023-04-28 14:51:13.728 21468-9475/com.tplink.tpm5.trial D/CTL: setDeviceAttestationDelegate() called
2023-04-28 14:51:13.731 21468-9475/com.tplink.tpm5.trial D/CTL: pairDeviceWithAddress() called
2023-04-28 14:51:13.731 21468-9475/com.tplink.tpm5.trial D/IN: SecureSession[0xb400007b293d9de0]: Allocated Type:1 LSID:32358
2023-04-28 14:51:13.731 21468-9475/com.tplink.tpm5.trial D/SC: Assigned local session key ID 32358
2023-04-28 14:51:13.731 21468-9475/com.tplink.tpm5.trial D/EM: <<< [E:42452i M:240388959] (U) Msg TX to 0:0000000000000000 [0000] --- Type 0000:20 (SecureChannel:PBKDFParamRequest)
2023-04-28 14:51:13.731 21468-9475/com.tplink.tpm5.trial D/IN: (U) Sending msg 240388959 to IP address 'UDP:[fe80::32de:4bff:fef6:8ed]:5540'
2023-04-28 14:51:13.731 21468-9475/com.tplink.tpm5.trial D/SC: Sent PBKDF param request
2023-04-28 14:51:13.731 21468-9475/com.tplink.tpm5.trial D/CTL: Setting failsafe timer from parameters
2023-04-28 14:51:13.731 21468-9475/com.tplink.tpm5.trial D/CTL: Setting adminSubject from parameters
2023-04-28 14:51:13.731 21468-9475/com.tplink.tpm5.trial D/CTL: Setting attempt thread scan from parameters
2023-04-28 14:51:13.731 21468-9475/com.tplink.tpm5.trial D/CTL: Setting attempt wifi scan from parameters
2023-04-28 14:51:13.731 21468-9475/com.tplink.tpm5.trial D/CTL: Setting attestation nonce from parameters
2023-04-28 14:51:13.731 21468-9475/com.tplink.tpm5.trial D/CTL: Setting CSR nonce from parameters
2023-04-28 14:51:13.731 21468-9475/com.tplink.tpm5.trial D/CTL: Setting PASE-only commissioning from parameters
2023-04-28 14:51:13.731 21468-9475/com.tplink.tpm5.trial D/CTL: Commission called for node ID 0x0000000000000025
2023-04-28 14:51:14.108 21468-10283/com.tplink.tpm5.trial D/EM: Retransmitting MessageCounter:240388959 on exchange 42452i Send Cnt 1
2023-04-28 14:51:14.108 21468-10283/com.tplink.tpm5.trial D/IN: (U) Sending msg 240388959 to IP address 'UDP:[fe80::32de:4bff:fef6:8ed]:5540'
2023-04-28 14:51:14.509 21468-10283/com.tplink.tpm5.trial D/EM: Retransmitting MessageCounter:240388959 on exchange 42452i Send Cnt 2
2023-04-28 14:51:14.509 21468-10283/com.tplink.tpm5.trial D/IN: (U) Sending msg 240388959 to IP address 'UDP:[fe80::32de:4bff:fef6:8ed]:5540'
2023-04-28 14:51:15.145 21468-10283/com.tplink.tpm5.trial D/EM: Retransmitting MessageCounter:240388959 on exchange 42452i Send Cnt 3
2023-04-28 14:51:15.145 21468-10283/com.tplink.tpm5.trial D/IN: (U) Sending msg 240388959 to IP address 'UDP:[fe80::32de:4bff:fef6:8ed]:5540'
2023-04-28 14:51:16.140 21468-10283/com.tplink.tpm5.trial D/EM: Retransmitting MessageCounter:240388959 on exchange 42452i Send Cnt 4
2023-04-28 14:51:16.140 21468-10283/com.tplink.tpm5.trial D/IN: (U) Sending msg 240388959 to IP address 'UDP:[fe80::32de:4bff:fef6:8ed]:5540'
2023-04-28 14:51:17.647 21468-10283/com.tplink.tpm5.trial E/EM: Failed to Send CHIP MessageCounter:240388959 on exchange 42452i sendCount: 4 max retries: 4
2023-04-28 14:51:19.958 21468-10283/com.tplink.tpm5.trial E/SC: PASESession timed out while waiting for a response from the peer. Expected message type was 33
2023-04-28 14:51:19.959 21468-10283/com.tplink.tpm5.trial D/IN: SecureSession[0xb400007b293d9de0]: Released - Type:1 LSID:32358

@luobosu Do you have the device log by any chance?  Did the device receive the PBKDFParamRequest message and fail to respond?  Or did it not receive it at all?
Was the discovered IP the right one?

Do you have the device log by any chance? Did the device receive the PBKDFParamRequest message and fail to respond? Or did it not receive it at all?

Sorry, I can not fetch the device logs , so I can not judge whether the device receive PBKDFParamsRequest.
I think the IP is right ( fe80::32de:4bff:fef6:8ed) . It was discovered by matter sdk .
@bzbarsky-apple

Sorry, I can not fetch the device logs , so I can not judge whether the device receive PBKDFParamsRequest.

Well, then it's hard to say whether the problem is with the network or with the device.

Sorry, I can not fetch the device logs , so I can not judge whether the device receive PBKDFParamsRequest.

Well, then it's hard to say whether the problem is with the network or with the device.

this device can be connected by iOS matter sdk  ,  so I think the device is no error .
Maybe it is Android SDK  issue or network issue ?

I found the issue.
I use Controller-A to call chipDeviceController#discoverCommissionableNodes  ,  and use  Controller-B to call chipDeviceController#pairDeviceWithAddress. It is wrong.
Before Controller-B to call chipDeviceController#pairDeviceWithAddress , it must call chipDeviceController#discoverCommissionableNodes , too.


Custom S3 File name

Hi, I already deploy the cloud formation, everything works fine, however I would like to have control over the video name from the recording.
I saw this old pull request  (https://github.com/aws-samples/amazon-chime-sdk-recording-demo/pull/42), I know I can edit the lambda function as the PR suggest, but, where can I find the record.js file to edit too? or do I have to deploy the cloud formation again with the record.js file edited? or is there another way to change the name?

The record.js file is part of the docker image that runs when we try to start the recording. (Ref: It's called from run.sh script which is called inside the Dockerfile)
If you want to have a control over the name of the recording file, here is something you can do.
Option 1: As you mentioned, you need to update the record.js file and re-deploy the application.
Option 2: Control the recording artifact from the lambda function (This would require a deploy as well for the first time, but after that, if you want to update it, it can be done from the Lambda console too.)

From the index.js (which is the Lambda code), instead of passing the bucket name, you can also pass the file name which we are computing here. It will look something like this.{
      name: "RECORDING_ARTIFACTS_FILE_NAME",
      value: recordingArtifactsFileName
}

You can capture the file name here in run.shS3_FILE_NAME=${RECORDING_ARTIFACTS_FILE_NAME}

Pass the file name as a parameter to the record.js function here. e.gexec node /recording/record.js ${S3_BUCKET_NAME} ${S3_FILE_NAME} ${SCREEN_WIDTH} ${SCREEN_HEIGHT}

Capture the file name here in record.js. e.g const FILE_NAME = args[1];
Use the file name here in record.js

As I mentioned before, this approach would require a deployment for the first time. But after that, if you want to change the path or name of the file, you can just directly change the logic from the Lambda console and that should immediately come into effect for the subsequent recordings.

Let me know if this helps. Feel free to re-open if you have further questions about it.


verify_ca not working

In my Rails 6.1 application, I have
ssl_mode: verify_ca
sslca: /opt/homebrew/var/mysql/ca.pem

It works with the mysql2 adapter, but when i try to switch to trilogy I get the following error when trying to make a request of the database:

/Users/mohamed/.rbenv/versions/truffleruby+graalvm-24.1.0/lib/gems/gems/activerecord-trilogy-adapter-3.1.2/lib/active_record/connection_adapters/trilogy_adapter.rb:84:in `new_client': trilogy_ssl_upgrade: SSL Error: certificate verify failed (ActiveRecord::ConnectionNotEstablished)

Does Trilogy not support verify_ca? Or perhaps it's just a bug when using TruffleRuby? (it works just fine once I switch to ssl_mode: required)

(I wasn't sure where the correct place to file this bug was, there's a duplicate at: https://github.com/trilogy-libraries/trilogy/issues/202, feel free to close the one that's in the wrong place)

Same error occurs under Rails <IP_ADDRESS>, Ruby 3.3.5,  activerecord-trilogy-adapter 3.1.2, trilogy 2.8.1:
trilogytest $ bin/rails db:migrate
bin/rails aborted!
ActiveRecord::ConnectionNotEstablished: trilogy_ssl_upgrade: SSL Error: certificate verify failed (ActiveRecord::ConnectionNotEstablished)

(works just fine with the mysql2 gem)

Closing as this was delt with in https://github.com/trilogy-libraries/trilogy/issues/202


Cannot create glib schema

Issue description
I'm attempting to package the on-screen keyboard 'onboard' and I've run into a few problems with glib schemas.
Steps to reproduce
From what I can find on other packages I looked through, the right way to install a glib schema is to run:
${glib.dev}/bin/glib-compile-schemas $out/share/glib-2.0/schemas

For some reason in my package whenever I attempt to move my schema to that location and run the command, it doesn't seem to work and the $out/share/glib-2.0 folder is empty.
    postInstall = ''
      mkdir -p $out/share/glib-2.0/schemas/ $out/lib/girepository-1.0
      cp onboard-default-settings.gschema.override.example $out/share/glib-2.0/schemas/10_onboard-default-settings.gschema.override
      ${glib.dev}/bin/glib-compile-schemas $out/share/glib-2.0/schemas
      '';

Even the schemas folder I created is gone. I've tried creating the directory in different sections of the package build and nothing seems to work. Is there a reason this directory would be getting deleted? And am I running the schema command correctly?
Technical details

System: (NixOS: `17.03.1298.5bafc71b61 (Gorilla))
Nix version: (nix-env (Nix) 1.11.9)
Nixpkgs version: ("17.03.1298.5bafc71b61")
Sandboxing enabled: (Yes)

IIRC the schemas are moved automatically in some of the later phases; we use a different path than the standard one to avoid file collisions when installing by nix-env.

@vcunat So the schema was probably in $out/share/glib-2.0/schemas and was just moved? Is the $out/share/glib-2.0 folder usually empty?

Here's the setup hook: https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/libraries/glib/setup-hook.sh#L12  There are make flags passed to install gschemas into a different location, etc.

@vcunat So should I be running ${glib.dev}/bin/glib-compile-schemas $out/share/gsettings-schemas/$name/glib-2.0/schemas/?

Yes, I think so.

Hmm, now i'm getting this in the postInstall. Should I need to be running it, or does the hook do it automatically? The schemas were already in that folder.

Error opening directory '/nix/store/gl7bz9dks0145gfm0afz4nk0i5m8c35n-onboard-1.4.1/share/gsettings-schemas/onboard-1.4.1/glib-2.0/schemas/': No such file or directory

It looks like the error I was getting was unrelated to where the glib schema was being installed. The fix for my problem was to install pkgs.gnome3.dconf system-wide.


Styles seem to be a bit off

Not a major issue, but would be nice to have it cleaned up, seems like padding is missing for some reason

yea, it would be great if this could be fixed as it makes it kinda unusable.

yeah, I had to look for other options cause of that


added oneOf functionality and tests

Coverage remained the same at 100.0% when pulling 3b0ddb8a1ada276eb01df99cc361c0441e75b5b4 on claudiobmgrtnr:master into 598c6cd953f3db0377eb7cf08d198fa1de3bc6cd on namics:master.

Coverage remained the same at 100.0% when pulling 3b0ddb8a1ada276eb01df99cc361c0441e75b5b4 on claudiobmgrtnr:master into 598c6cd953f3db0377eb7cf08d198fa1de3bc6cd on namics:master.


Temporary workaround set-env deprecation

This is an attempt to temporarily re-enable the set-env command, to make sure our CI stays green, before we figure out how to use the new system.
For #3341

Merging to master since GitHub workflows only run there (per our configuration).


fix bug #41

based on #41 when cache is on true
$database->where('email','like','gmail')->select('email')->results();
in first time will be Right "return array"  but on reload from cache will "return object"
for fix a private method replaced with some part of run methods code

please recheck this

;)

@faryar76 This looks good and since its a bug fix I'll patch this tonight. Thanks!


feat: add methods

added GetTokenAccountBalance
added GetProgramAccounts

thank you but I have a local branch to do this stuff.
maybe I can merge it quickly.
thank you again for your contribute.

I have merged more rpc function into main. 😎😎😎


Incorrect spans reported for toplevel tables

In a document such as:
[key]
value = 42

The span being reported is (0, 0).
See test:
#[derive(Deserialize)]
struct Foo {
    key: Spanned<HashMap<String, Spanned<toml::Value>>>,
}

let foo: Foo = toml::from_str("[key]\nvalue = 42")?;
assert_eq!(foo.key.span(), (0, 0));

Maintenance of this crate has moved to the https://github.com/toml-rs/toml repo.  As a heads up, we plan to move toml to be on top of toml_edit, see https://github.com/toml-rs/toml/issues/340.
Closing this out.  If this is still a problem, feel free to recreate this issue in the new repo.


Install wal2json install by commit sha

Installs wal2json by a commit sha so we can get the latest few bugfixes that aren't in a release yet
Resolves #186

@darora could you pls add a rough timeline for when this is expected to hit new and existing projects when you get a sec?
thanks!
cc @w3b6x9

@darora just wanted to confirm that this has been completed.


Clear command throws errors

Whenever the clear command comes across files that do not have a license being added, it fails. This is not needed, as we might have only a few files that have licenses, and we just want clear things. Also, it avoids to run this command twice (i.e. in CI).
A warning could be fine, but event that is no needed from my pov.
Anyway, thanks for adding this feature!

v2.3.4 should contain the fix for this


[FEATURE REQUEST] Add display icon + text + status bar

Describe the solution / feature you'd like
The idea of a new version of the display is "icon_status_bar", an icon with text and a bar status bar at the bottom, which is set by the parameter "percent_status_bar" and is counted as 4% per 1 pixel, the brightness of the next pixel is done incrementally, or completely fill the remaining ones with dim, the parameter "fill_rem". The color of the status bar is also configurable, but if not specified, then we take the text color (rgb).
New parameters:
percent_status_bar - the bar under the text, % of 100
fill_rem - fill the remaining part with dim
r_sb, g_sb, b_sb - colors of the status bar
API:
icon_status_bar => {"icon_name", "text", "percent_status_bar", "lifetime", "screen_time", "default_font", "fill_rem", "r", "g", "b", "r_sb", "g_sb", "b_sb"}
Service:
void icon_status_bar(std::string icon, std::string text, int percent_status_bar, int lifetime=D_LIFETIME, int screen_time=D_SCREEN_TIME,bool default_font=true, bool fill_rem=false, int r=C_RED, int g=C_GREEN, int b=C_BLUE,int r_sb=?, int g_sb=?, int b_sb=?);
Additional context
As an example of use, you can display the status of printing with a 3d printer and in the status bar % completed, and the text of the remaining time. For a timer that would clearly show the time ratio. Show completed cases and % of cases from all.

Interesting alternative to Gauge, which can now be displayed only vertically, and will eat up less space on the left, and in my opinion more informative and convenient.

Yes this would be nice but i have redesign the code before. I am planning a more object orientated design which will make also the screen identifier https://github.com/lubeda/EspHoMaTriXv2/issues/83 thingy possible.

Yes this would be nice but i have redesign the code before. I am planning a more object orientated design which will make also the screen identifier #83 thingy possible.

Can you give me an approximate time frame, I can make my proposed changes to 83.
I can also try to make an Icon with data display. But I would not like to disturb you, if everything will be well with my free time, I plan to do it today tomorrow.

I made the changes (2023.09 based), but I need to check them since I did them in a regular editor on my phone (no access to a computer), I'll try to check for errors and typos today, build the firmware, upload it to the display.
If I don't notice any regression, I will do a Pull Request, only thing is that it will be one commit (sorry).

@andrewjswan thank you, I tested the screen, and so far I haven't noticed any problems. Is it possible as a suggestion to consider specifying a color for the strip? for example, by analogy with the id, through the sign | if an array of colors is specified, then we take it, if not, then as now from red to green.

@malinovsku You can't use | because it's int, but I can suggest red to green and green to red, it's very easy to do. It is possible to specify one color for the whole progress, or an array of colors as it is done in Gauge, but it must be stored somewhere, and this is at least one Color or an array of Color[100], and it is necessary to make a separate call to specify the array or to specify the color.
I haven't found how to specify for HA this parameter is optional in the service registered in ESPHome.
Maybe @lubeda has some ideas.

Progress in MODE_ICON_PROGRESS screen:

0 .. -100 - from Green to Red
0 .. 100 - from Red to Green
https://github.com/lubeda/EspHoMaTriXv2/pull/94/commits/d6127445260fa1f02a44e990544f42d41a7b05db

2023,9,1 Released ...

I still don't like the +/- percent to determine the color and adding progress to the queue.  The color must be a parameter and the progress (or even better percentage) must not be a "global" variable.  Theses are all reasons to put effort into this https://github.com/lubeda/EspHoMaTriXv2/issues/96.
But at last, the result on the display is nice and useful.

The color must be a parameter

I think it is more convenient to set only a percentage, and get automatic color, rather than to set separately, r, g, b, in my opinion, we need to get away from the individual channel to an array of rgb.

I still don't like the +/- percent to determine the color and adding progress to the queue.

Me too, but it was the easiest option :)

Is it possible as a suggestion to consider specifying a color for the strip?

I can add a function to set the color for the progress bar and background, ie by default colors will be Black, and then will work automatically calculate the color depending on the progress, if set colors, it will be filled with them.

setting the progress color also works fine, an example on the screenshot where the parts are of a different shade

Complete... We can close. :)


Missing git tag for 2.0.2 release

It would be nice to keep PyPI releases and git tags in sync :)

Yes, I'm sorry. Fixed!


THEEDGE-1874 adding logging for interrupts

Signed-off-by: Jonathan Holloway<EMAIL_ADDRESS>Description
Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change.
Fixes # (issue)
Type of change
What is it?

[ ] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Documentation update
[ ] Tests update
[ ] Refactor

Checklist:

[ ] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[ ] I have added tests that prove my fix is effective or that my feature works
[ ] New and existing unit tests pass locally with my changes
[ ] I run go fmt ./... to check that my code is properly formatted
[ ] I run go vet ./... to check that my code is free of common Go style mistakes

Codecov Report

Merging #814 (1fbe887) into main (40f0936) will decrease coverage by 0.01%.
The diff coverage is 0.00%.

@@            Coverage Diff             @@
##             main     #814      +/-   ##
==========================================
- Coverage   30.90%   30.89%   -0.02%
==========================================
  Files          44       44
  Lines        4915     4917       +2
==========================================
  Hits         1519     1519
- Misses       3193     3195       +2
  Partials      203      203

Impacted Files
Coverage Δ

pkg/services/images.go
16.12% <0.00%> (-0.05%)
:arrow_down:

Continue to review full report at Codecov.

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


Modify base path?

Is there a way to modify the base path used for finding fixtures? My project doesn't use specs/fixtures, and it would be hard to switch. It looks like this should be modifiable (https://github.com/billtrik/karma-fixture/blob/master/src/fixture.coffee#L3), it just seems that the option is not passed from anywhere.

Sorry, duplicate of #3.


dev-fix version gives: "Error: No /configs/config.json or specified config"

Expected Behavior
start pokecli.py
Actual Behavior
Error: No /configs/config.json or specified config
Steps to Reproduce
After succesfully using the master version i want to use dev version, so:
$ git clone -b dev-fix https://github.com/PokemonGoF/PokemonGo-Bot
$ cd PokemonGo-Bot
$ pip2 install -r requirements.txt
$ git submodule init
$ git submodule update
i have 1 config file with the same login parameters as i used for the master version.
config.json contains:
{
"auth_service": "google",
"username": "####",
"password": "####",
"location": "#######",
"gmapkey": "###",
"max_steps": 5,
"catch_pokemon": true,
"forts": {
"spin": true,
"avoid_circles": true,
"max_circle_size": 50
},
"walk": 4.16,
"action_wait_min": 1,
"action_wait_max": 4,
"debug": false,
"test": false,
"health_record": true,
"location_cache": true,
"distance_unit": "km",
"reconnecting_timeout": 15,
"item_filter": {
"1": { "keep" : 100 },
"101": { "keep" : 10 },
"102": { "keep" : 30 },
"103": { "keep" : 30 },
"201": { "keep" : 30 },
"701": { "keep" : 100 }
},
"evolve_all": "NONE",
"evolve_speed": 20,
"evolve_cp_min": 300,
"use_lucky_egg": false,
"hatch_eggs": true,
"longer_eggs_first": true,
"evolve_captured": false,
"release_pokemon": true,
"catch": {
"any": {"catch_above_cp": 0, "catch_above_iv": 0, "logic": "or"},
"// Example of always catching Rattata:": {},
"// Rattata": { "always_catch" : true }
},
"release": {
"any": {"release_below_cp": 1000, "release_below_iv": 0.9, "logic": "and"},
"// Example of always releasing Rattata:": {},
"// Rattata": {"always_release": true},
"// Example of keeping 3 stronger (based on CP) Pidgey:": {},
"// Pidgey": {"keep_best_cp": 3},
"// Example of keeping 2 stronger (based on IV) Zubat:": {},
"// Zubat": {"keep_best_iv": 2},
"// Also, it is working with any": {},
"// any": {"keep_best_iv": 3},
"// Example of keeping the 2 strongest (based on CP) and 3 best (based on IV) Zubat:": {},
"// Zubat": {"keep_best_cp": 2, "keep_best_iv": 3}
}
}
when i run "python pokecli.py" i am getting the error:  "No /configs/config.json or specified config"
Other Information
OS: windows 10
Git Commit: (run 'git log -n 1 --pretty=format:"%H"' and paste it here)

You have to specific the config file.
python pokecli.py --config configs/fullfilenamehere

C:\PokemonGo-Bot>python pokecli.py --config configs/config.json
this gives the same error sadly, or am i still doing something wrong?

Are you sure the file is config.json?

yes i`m sure, see:

configs\config.json
You have the slash the wrong way.

Thanks for noticing my mistake there!, But it still doesnt run.
If not, you should just pass -cf config.json

i have config.json in configs directory, also tried with -cf parameter, nothing works

I believe I know the issue. I solved it on my pc.
Check the type file. On windows, it never changed my file to a json file, it stayed as a .example file. Easy fix.
New text document, copy everything over, save as .json
Worked for me

@X1xMadex1X then it wouldn't show in the screenshot he took as JSON-bestand, would've been a good idea though otherwise.

@xorinzor Ahh I passed over the screenshot. It has to be a path error since the auth is the first thing it would try to read from the file. Should have a catch to catch no file for opening.
I had the exact same error but thats how i fixed it.
Btw, love the bot.  Hoping to contribute soon!


Is PDFRenderer working now?

I saw couple of commits related to PDFRenderer, is it working now? I tried following code but didn't give any output
        InputStream inputStream = assetManager.open("Test.pdf");
        PDDocument pdDocument = PDDocument.load(inputStream);;
        PDFRenderer pdfRenderer = new PDFRenderer(pdDocument);
        Bitmap pageBitmap = pdfRenderer.renderImage(0);
        ImageView imageView = (ImageView)findViewById(R.id.imageView);
        imageView.setImageBitmap(pageBitmap);

If it is working now please provide a sample code for how to use it

I've made some progress, but it still isn't done yet. If you try to render, you should still probably be getting a white/black blank image.


Check self correlations for non-monatomic pairs

For non-monatomic pairs (oxygen-hydrogen), we shouldn't calculate any self-interactions even if self_correlation=True .  This PR adds a check to compute_partial_van_hove which sets self_correlation to False if selection1 != selection2.  User is warned if this happens.
Test case has also been added to check that warning is properly raised.

It looks good to me. The only thing I can think of is: should the default behavior of compute_van_hove have detection built in such that it calls compute_partial_van_hove with self_correlation = False for polyatomic pairs and self_correlation = User_Input (default: True) for monoatomic pairs? Otherwise, every system with more than one atom type will print a warning on the call to compute_van_hove.

Sounds good, something like?
for elem1, elem2 in it.combinations(...):
    if elem1 != elem2:
        compute_partial_van_hove(self_correlation=False)
   else:
        compute_partial_van_hove(self_correlation=True)

Yep! Might be easier to have a boolean variable and just reference that in the existing code.
`
for elem1, elem2 in it.combinations(...):
myBool = self_correlation          # User Input
if elem1 == elem2:
myBool = False
data.append(
            [
                ...
                self_correlation = myBool,
                ...
            ]
        )

`

Look's good!


Workaround for duplicate resource srcDir entries gradle build issue

PR Description
Thanks to @asanso for reporting this issue:
Gradle build under some conditions fails with the error below when executing gradle task  :eth-reference-tests:processReferenceTestResources:

Entry eth2.0-spec-tests/tests/general/phase0/ssz_generic/uints/valid/uint_256_zero_2/value.yaml is a duplicate but no duplicate handling strategy has been set. Please refer to https://docs.gradle.org/7.0.2/dsl/org.gradle.api.tasks.Copy.html#org.gradle.api.tasks.Copy:duplicatesStrategy for details.

The problem for some reasons only appears:

On Windows with running gradlew.bat :eth-reference-tests:processReferenceTestResources
On Windows when executing the mentioned gradle task in Intellij IDEA (2020.x)
On Mac when executing the mentioned gradle task in Intellij IDEA (2020.x)

Executing ./gradlew :eth-reference-tests:processReferenceTestResources on Mac works however
The actual file may depend on platform, but while experimenting I was leaving the only one file in resources and shorten it path and the issue still persisted.
I was trying to debug the gradle build and indeed saw duplicating resource src paths somewhere deep in gradle classes:

I've found the suggested workaround in this gradle issue discussion: https://github.com/gradle/gradle/issues/17236
Initially tried the DuplicatesStrategy.WARN but it print enormous number of messages (for every reference test file)
Documentation

[x] I thought about documentation and added the documentation label to this PR if updates are required.

Changelog

[x] I thought about adding a changelog entry, and added one if I deemed necessary.

BTW to workaround this issue in IDEA and just run reference tests there one just need to change the default compile/run methods to IDEA built-in :

I suppose a better fix would be to get rid of those duplicates but I just gave up with it

Thanks for picking this up Anton.
I'm a bit nervous about this work around because we generally shouldn't get duplicates that we're copying and with this we'd silently ignore them and then potentially not ship files we should have. It may be the only option but given we have a work-around I'd like to spend a bit of time poking around to see if I can understand more about why its happening.

As far as I can tell #4149 solved this so will close this one.  Big thanks for looking into this, I think I would have gone insane just trying to reproduce it.


Change HTTP link to HTTPs

See #419.

:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

mixed-reality-docs/add-custom-home-environments.md
:white_check_mark:Succeeded
View

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.

Hey @opbld32 (if that is your real name...), the preview url doesn't seem to work... just spins seemingly forever (well, that's an exaggeration, I only left it for a few minutes).
I'm approximately 68% sure this change won't break anything though, you can trust me.
Thanks 🙃

@DanTup Thanks for contributing!


Make it easy to check progress of a commit propagating through the DAG

What is the goal / desired outcome?
I want to get the progress of how my commit to an input repo is trickling down the DAG, including being able to easily do a binary check of whether or not it has finished trickling
If there is a way to accomplish this today via workaround, what does that require?

Learn what subvenance is
get subvenance (which is not directly exposed through either the CLI or dash)
for each subvenant commit, check whether it is still open

(Optional) What is your proposal for a feature to solve this?
Add more options for flush-commit (or some similar endpoint with similar functionality):
flush-commit --blocking=false -- immediately return the list of downstream commits that are finished and exit. perhaps use exit code to indicate whether there are more commits to be completed?
Edit: according to @jdoliner  this is already the behavior of flush-commit ~flush-commit --progress -- stream back the list of downstream commits as they are finished (any that are already complete should stream back immediately)~

This is much better implemented as fields on CommitInfo like so:
message CommitInfo {
  ...
  int64 subvenance_success = 15;
  int64 subvenance_failure = 16;
}

Which keep a count of how many subvenant commits have been closed with output trees (success) and how many have been closed without one (failure). This could then be reflected list commit as a progress meter similar to those in list job.

Implemented in #4203


Algorithm for reversing a singly linked list without using extra space.

Issue will be closed if:

You mention more than one algorithm. You can create a separate issue for each algorithm once the current one is completed.
You propose an algorithm that is already present or has been mentioned in a previous issue.
You create a new issue without completing your previous issue.

Note: These actions will be taken seriously. Failure to follow the guidelines may result in the immediate closure of your issue.

Name:
Algorithm for reversing a singly linked list without using extra space.
About:
Propose a new algorithm to be added to the repository

Labels:
new algorithm, gssoc-ext, hacktoberfest, level1

Assignees:

[x] Contributor in GSSoC-ext
[x] Want to work on it

I will work on it.

@AnshDhingraAD I will work on it. Please assign it to me.

@susrithasabbini May I know your designation in the project?

I am the contributor for gssoc-ext


Refine OIDC sample

Add signout remote scenario
Use bootstrap to enhance the view
Improve readability

Effect:

Hi @troydai, I'm your friendly neighborhood .NET Foundation Pull Request Bot (You can call me DNFBOT). Thanks for your contribution!
You've already signed the contribution license agreement. Thanks!
The agreement was validated by .NET Foundation and real humans are currently evaluating your PR.
TTYL, DNFBOT;

/cc @Tratcher @BrennanConroy

Stylish. Planning to do this to any of the other samples? Just doing one would be out of place.
:shipit:

Yup. I'll refurbish other samples as well.

Looks nice :smile:
One remark tho: I know these samples are more "sandboxes" than real samples, but I think it's worth adding a tiny comment indicating that nothing is HTML-encoded and that copying the code as-is in a real world app is not recommended.

Or you could actually encode properly ...

Add html encoding for user names. I left out the claims' types and values and access token. I assume these are not user input and expect them to be save. Concerns?

/cc @Tratcher updated

:shipit:


Support for P2SH is missing

Trezor locks up when attempting to pay to script hash ("multisig") addresses.

Added support for P2SH address exploration.
To verify, build the latest develop-SNAPSHOT then review MultiBit HD #591.
Ready for review and close.

This has been working in production for some time - closing.


Support configuration cache

Detekt is not compatible with config cache:
https://docs.gradle.org/current/userguide/configuration_cache.html
Expected Behavior
No config cache errors/warnings
Observed Behavior
2 problems were found storing the configuration cache.
- Task `:app:detekt` of type `io.gitlab.arturbosch.detekt.Detekt`: cannot serialize object of type 'java.net.URLClassLoader', a subtype of 'java.lang.ClassLoader', as these are not supported with the configuration cache.
  See https://docs.gradle.org/6.8.3/userguide/configuration_cache.html#config_cache:requirements:disallowed_types
- Task `:detekt` of type `io.gitlab.arturbosch.detekt.Detekt`: cannot serialize object of type 'java.net.URLClassLoader', a subtype of 'java.lang.ClassLoader', as these are not supported with the configuration cache.
  See https://docs.gradle.org/6.8.3/userguide/configuration_cache.html#config_cache:requirements:disallowed_types

with this path:
⌄fieldfirst📋 of kotlin.Pair📋
⌄bean of type kotlin.Pair📋
⌄fieldloaderAndClasspathFiles📋 of io.gitlab.arturbosch.detekt.internal.DefaultClassLoaderCache📋
⌄bean of type io.gitlab.arturbosch.detekt.internal.DefaultClassLoaderCache📋
⌄field$$delegate_0📋 of io.gitlab.arturbosch.detekt.internal.GlobalClassLoaderCache📋
⌄bean of type io.gitlab.arturbosch.detekt.internal.GlobalClassLoaderCache📋
⌄fieldclassLoaderCache📋 of io.gitlab.arturbosch.detekt.invoke.DefaultCliInvoker📋
⌄bean of type io.gitlab.arturbosch.detekt.invoke.DefaultCliInvoker📋
⌄fieldinvoker📋 of io.gitlab.arturbosch.detekt.Detekt📋
■task:app:detekt📋 of type io.gitlab.arturbosch.detekt.Detekt📋
■task:detekt📋 of type io.gitlab.arturbosch.detekt.Detekt📋

Steps to Reproduce

Create a blank kotlin project
add detekt
run ./gradlew build  --configuration-cache

Context

Config cache can be a huge performance boost to builds with lots of module. Detekt plugin should work with config cache.
Your Environment

Version of detekt used: 1.16.0
Version of Gradle used (if applicable): 6.8.3

#3574 started the work to fix this. But, quoting @3flex:

There are changes required in some Gradle plugins used by the detekt build before this will work:

Kotlin 1.4.30 or higher
Gradle 7.0 (or 6.8.4 which should include a backported fix for an issue)
https://github.com/Kotlin/dokka/issues/1217 to be fixed
https://github.com/Kotlin/binary-compatibility-validator/pull/50 to be merged & released

I need to clarify, #3574 is only about enabling the cache for the detekt project build, which benefits contributors only. It wouldn't help users of detekt.
There should be support for users using configuration cache already and there are Gradle plugin tests for that but there may be some issue the tests aren't picking up. I haven't looked into this issue yet.

Oh! So I misunderstood the issue and the PR completely. I just saw our tests related with this.

I took a stab at this in #3822, but I wasn't able to reproduce the scenario in tests environment :/
I don't understand this well enough to figure out where the URLClassLoader comes from and when Gradle tries to serialize things. So if someone has an idea how to reproduce it in tests, feel free to use code I pushed.


Follow-ups from mute user backend commit merge.

This contains follow-up work from 3bfcaa39689c9996cb7eb0ec65bd37f727074f6e (#16915)

Link to /help/ for muted users from API docs for the feature, both the main docs and the events.

The /help docs will be added in the commit which enables muting/unmuting from the UI. I'll add these links in that commit when I update it.

We should change the do_ functions to record entries in RealmAuditLog when muting another user. I think modified_user needs to be the current user, as well as acting_user, so probably we need to store the other user in extra_data (no need to record timestamp, since that's there anyway).

This PR doesn't handle this yet. I didn't understand this. Should I create a new event-type in AbstractRealmAuditLog? Would USER_MUTED be a fine name or maybe MUTED_USERS_CHANGED? And what should be the number-key for it?

For unmute_user, would it be cleaner to pass the MutedUser object from the user_is_muted check to the remove_user_mute function? This would avoid a second fetch.

Done.

The backend tests should be tweaked to (1) do everything via the API, rather than calling do_ functions directly -- it's better to have tests be more end-to-end, and (2) do all the repeated times in variables. (I changed a few bits in this direction before merging, but decided to leave the rest to you).

Done!

Nice, merged, thanks @abhijeetbodas2001!

This PR doesn't handle this yet. I didn't understand this. Should I create a new event-type in AbstractRealmAuditLog? Would USER_MUTED be a fine name or maybe MUTED_USERS_CHANGED? And what should be the number-key for it?

Yep!  I think we can go with USER_MUTED = 350

Thanks, I'll make a commit for it when working on the other backend commits from the main PR.


Update Ensemble Z Matrix Search

The main update of this PR is the addition of a --dataset flag that allows for the specification of either TCGA, TARGET, or GTEX as input data.
I also optimize saving results. The results can get quite large , so I needed to decrease variable storage.

Just curious how big do the results get?

The individual files themselves are not too large - all well under 1G but there are many of them (10 x 28 x 3 = 840)


[BUG] - test_generate_constructor_installer[simple_specification] is flaky on CI

Describe the bug
A number of the unit tests rely on connections to other servers which can intermittently fail. I think this is an instance of that. See https://github.com/conda-incubator/conda-store/actions/runs/8425949310/job/23073173256?pr=797 for details.
Expected behavior
test_generate_constructor_installer[simple_specification] passes without being flaky.
How to Reproduce the problem?
Run the unit test github workflow.

        The returned instance will have attributes args, returncode, stdout and
        stderr. By default, stdout and stderr are not captured, and those attributes
        will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them.
        If check is True and the exit code was non-zero, it raises a
        CalledProcessError. The CalledProcessError object will have the return code
        in the returncode attribute, and output & stderr attributes if those streams
        were captured.
        If timeout is given, and the process takes too long, a TimeoutExpired
        exception will be raised.
        There is an optional argument "input", allowing you to
        pass a string to the subprocess's stdin.  If you use this argument
        you may not also use the Popen constructor's "stdin" argument, as
        it will be used internally.
        The other arguments are the same as for the Popen constructor.
        If universal_newlines=True is passed, the "input" argument must be a
        string and stdout/stderr in the returned object will be strings rather than
        bytes.
        """
        input = kwargs.pop("input", None)
        timeout = kwargs.pop("timeout", None)
        check = kwargs.pop("check", False)
        if input is not None:
            if "stdin" in kwargs:
                raise ValueError("stdin and input arguments may not both be used.")
            kwargs["stdin"] = PIPE

        process = Popen(*popenargs, **kwargs)
        try:
            process.__enter__()  # No-Op really... illustrate "with in 2.4"
            try:
                stdout, stderr = process.communicate(input, timeout=timeout)
            except TimeoutExpired:
                process.kill()
                stdout, stderr = process.communicate()
                raise TimeoutExpired(
                    process.args, timeout, output=stdout, stderr=stderr
                )
            except:
                process.kill()
                process.wait()
                raise
            retcode = process.poll()
            if check and retcode:
>               raise CalledProcessError(
                    retcode, process.args, output=stdout, stderr=stderr
                )
E               conda_lock._vendor.poetry.utils._compat.CalledProcessError: Command '['constructor', '-v', '--cache-dir', '/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/tmpgxxzyro4/pkgs', '--platform', 'osx-64', '/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/tmpgxxzyro4/build']' returned non-zero exit status 1.

/Users/runner/miniconda3/envs/test/lib/python3.10/site-packages/conda_lock/_vendor/poetry/utils/_compat.py:217: CalledProcessError
---------------------------- Captured stderr setup -----------------------------
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade  -> 48be4072fe58, initial schema
INFO  [alembic.runtime.migration] Running upgrade 48be4072fe58 -> 8d63a091aff8, Add Environment.description
INFO  [alembic.runtime.migration] Running upgrade 8d63a091aff8 -> 5ad723de2abd, Adding CONTAINER_REGISTRY value to enum
INFO  [alembic.runtime.migration] Running upgrade 5ad723de2abd -> 16f65805dc8f, split conda_package into conda_package and conda_package_build
INFO  [alembic.runtime.migration] Running upgrade 16f65805dc8f -> abd7248d5327, adding a settings table
INFO  [alembic.runtime.migration] Running upgrade abd7248d5327 -> b387747ca9b7, role mapping
INFO  [alembic.runtime.migration] Running upgrade b387747ca9b7 -> d78e9889566a, add status_info
INFO  [alembic.runtime.migration] Running upgrade d78e9889566a -> 30b37e725c32, add build_key_version
INFO  [alembic.runtime.migration] Running upgrade 30b37e725c32 -> 771180018e1b, add v2 role mappings
INFO  [alembic.runtime.migration] Running upgrade 771180018e1b -> 0f7e23ff24ee, add worker
INFO  [alembic.runtime.migration] Running upgrade 0f7e23ff24ee -> 57cd11b949d5, add installer
INFO  [alembic.runtime.migration] Running upgrade 57cd11b949d5 -> 03c839888c82, add canceled status
=============================== warnings summary ===============================
../../../../miniconda3/envs/test/lib/python3.10/site-packages/conda_pack/core.py:15
  /Users/runner/miniconda3/envs/test/lib/python3.10/site-packages/conda_pack/core.py:15: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
    import pkg_resources

../../../../miniconda3/envs/test/lib/python3.10/site-packages/pkg_resources/__init__.py:2832
../../../../miniconda3/envs/test/lib/python3.10/site-packages/pkg_resources/__init__.py:2832
../../../../miniconda3/envs/test/lib/python3.10/site-packages/pkg_resources/__init__.py:2832
../../../../miniconda3/envs/test/lib/python3.10/site-packages/pkg_resources/__init__.py:2832
  /Users/runner/miniconda3/envs/test/lib/python3.10/site-packages/pkg_resources/__init__.py:2832: DeprecationWarning: Deprecated call to `pkg_resources.declare_namespace('sphinxcontrib')`.
  Implementing implicit namespace packages (as specified in PEP 420) is preferred to `pkg_resources.declare_namespace`. See https://setuptools.pypa.io/en/latest/references/keywords.html#keyword-namespace-packages
    declare_namespace(pkg)

conda_store_server/action/generate_constructor_installer.py:87
  /Users/runner/work/conda-store/conda-store/conda-store-server/conda_store_server/action/generate_constructor_installer.py:87: DeprecationWarning: invalid escape sequence '\S'
    post_install = """\

../../../../miniconda3/envs/test/lib/python3.10/site-packages/traitlets/traitlets.py:3615
  /Users/runner/miniconda3/envs/test/lib/python3.10/site-packages/traitlets/traitlets.py:3615: DeprecationWarning: metadata {'description': 'Conda platforms to solve environments for via conda-lock. Must include current platform.'} was set from the constructor. With traitlets 4.1, metadata should be set using the .tag() method, e.g., Int().tag(key1='value1', key2='value2')
    super().__init__(trait=trait, default_value=default_value, **kwargs)

tests/test_server.py:419
  /Users/runner/work/conda-store/conda-store/conda-store-server/tests/test_server.py:419: PytestUnknownMarkWarning: Unknown pytest.mark.extended_prefix - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.extended_prefix

tests/test_actions.py::test_solve_lockfile[simple_specification]
  /Users/runner/work/conda-store/conda-store/conda-store-server/conda_store_server/build.py:110: DeprecationWarning: invalid escape sequence '\d'
    match = re.fullmatch("build-(\d+)-(.*)", str(task["id"]))

tests/test_actions.py::test_add_conda_prefix_packages[conda_prefix0]
  /Users/runner/miniconda3/envs/test/lib/python3.10/site-packages/kombu/transport/sqlalchemy/models.py:63: RemovedIn20Warning: Deprecated API features detected! These feature(s) are not compatible with SQLAlchemy 2.0. To prevent incompatible upgrades prior to updating applications, ensure requirements files are pinned to "sqlalchemy<2.0". Set environment variable SQLALCHEMY_WARN_20=1 to show all deprecation warnings.  Set environment variable SQLALCHEMY_SILENCE_UBER_WARNING=1 to silence this message. (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)
    self.queue = queue

tests/test_app_api.py: 1 warning
tests/test_server.py: 10 warnings
  /Users/runner/miniconda3/envs/test/lib/python3.10/site-packages/celery/worker/consumer/consumer.py:507: CPendingDeprecationWarning: The broker_connection_retry configuration setting will no longer determine
  whether broker connection retries are made during startup in Celery 6.0 and above.
  If you wish to retain the existing behavior for retrying connections on startup,
  you should set broker_connection_retry_on_startup to True.
    warnings.warn(

tests/test_auth.py: 16 warnings
tests/test_server.py: 70 warnings
tests/test_traitlets.py: 13 warnings
  /Users/runner/miniconda3/envs/test/lib/python3.10/site-packages/httpx/_client.py:680: DeprecationWarning: The 'app' shortcut is now deprecated. Use the explicit style 'transport=WSGITransport(app=...)' instead.
    warnings.warn(message, DeprecationWarning)

tests/test_traitlets.py::test_conda_store_server_enable_ui
tests/test_traitlets.py::test_conda_store_server_url_prefix
tests/test_traitlets.py::test_conda_store_server_url_prefix
tests/test_traitlets.py::test_conda_store_server_templates
  /Users/runner/miniconda3/envs/test/lib/python3.10/site-packages/starlette/templating.py:178: DeprecationWarning: The `name` is not the first parameter anymore. The first parameter should be the `Request` instance.
  Replace `TemplateResponse(name, {"request": request})` by `TemplateResponse(request, name)`.
    warnings.warn(

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED tests/test_actions.py::test_generate_constructor_installer[simple_specification] - conda_lock._vendor.poetry.utils._compat.CalledProcessError: Command '['constructor', '-v', '--cache-dir', '/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/tmpgxxzyro4/pkgs', '--platform', 'osx-64', '/var/folders/h1/8hndypj13nsbj5pn4xsnv1tm0000gn/T/tmpgxxzyro4/build']' returned non-zero exit status 1.
= 1 failed, 185 passed, 6 deselected, 2 xfailed, 124 warnings in 806.01s (0:13:26) =
Error: Process completed with exit code 1.

Versions and dependencies used.
No response
Anything else?
No response

Not sure why this was failing originally, but in any case these calls to constructor have been mocked out in https://github.com/conda-incubator/conda-store/pull/833.


Do not use 'any' in queries that only look for one kind of entity

The ethownership subgraph has 34M entities. The GraphQL query
erc20Ownerships(first: 5) {
    id
    contract
    account
    balance
}

gets turned into this SQL query:
SELECT data, entity
  FROM sgd1595.entities
 WHERE entity = ANY('{ERC20Ownership}')
 ORDER BY id ASC LIMIT 5

Because of the ANY clause, Postgres turns that query into a full table scan of entities, which is very slow. Rewriting the query to use entity = 'ERC20Ownership' results in a query that uses the primary key index on entities and returns almost instantly.

Done in #1231.


Check name should be configurable with a default rather than static

The Check Name is currently static. It would be very nice to be able to configure this, possibly with the current value of Jenkins as a default.
See: https://github.com/jenkinsci/checks-api-plugin/blob/0ee3cec8fe745d1ab5e21f59a1681d09a95a08c5/src/main/java/io/jenkins/plugins/checks/BuildStatusChecksPublisher.java#L36

Thanks, that's a good point.
We'll try to add that feature alone with the disability for publishing such automatic status checks

Yes, and since this works as an alternative to the historic continuous-integration/jenkins/pr-merge, continuous-integration/jenkins/branch, etc. commit statuses, it would also be valuable to have the default check name be more like these values (e.g., "PR Merge Build" or "Branch Build") rather than just "Jenkins". A generic name like "Jenkins" doesn't make a lot of sense alongside other more specific checks published (like "Code Coverage" or anything from Warnings NG, like "MSBuild"):


change file version

Right now we can change the file version.
The file summary has not changed to reflect the old version information yet. That will be done after metadata. Only the name of the left component changes.
I am now sending the selected version to the file metadata, but I am not sure that this is providing the correct version's metadata. Will need to start over with a new file with new metadata to test.
Another thing that does not work. If you have the metadata tab open, and then you change the file version using the modal, it does not change to reflect the new file version. I was not sure how to handle this.

The following now works:
Changing file version will change the ListenerMetadata and the File Details is replaced with File History, where bytes, created, author are replaced with values from the previous version.
Right now there is no change for visualization. Will make that a separate issue.
To test, upload a text file, run wordcount extractor, and then modify it to create some new versions and re-run extractor. When you change, you will see the metadata change and also, the file details will change.

Debugging with the file update, I'm seeing now that the right error message does pop up first:

Then it looks like the wrong one comes after that. Trying to figure out what is going on.

@tcnichol i think if you resolve merge conflict we can merge

To do in this or future PR:

make button a pull down
remove change version buttons (next to each version)

Now the file version should be next to and not underneath the filename in the files table.


Why use additional one frame when training?

Dear,
I found that in dataset.py:
" if not self.test_mode:
self.num_frames_per_sample += 1"
and in tracker.py:
"num_frame = img.size(1) - 1"
so what‘s the usage of the additional frame?

It is not used for training more frames.
Since I am adding velocity supervisions, the velocity groud truth is from the box position at next frame. That's why I need to load one more frame.


DS Record

Fixes # [markbook.com. 3600 IN DS 2371 13 2 BCA8CB4FD32BCFD17B1C580186BCFFB28362EED0AE59A5092424A84210914604].
What this PR solves / how to test:
Author has addressed the following:

Tests

[ ] Included
[ ] Not necessary because:

Changeset (Changeset guidelines)

[ ] Included
[ ] Not necessary because:

Associated docs

[ ] Issue(s)/PR(s):
[ ] Not necessary because:

Note for PR author:
We want to celebrate and highlight awesome PR review! If you think this PR received a particularly high-caliber review, please assign it the label highlight pr review so future reviewers can take inspiration and learn from it.

This looks like spam, closing


schema.validate() returning wrong data type

Hello,
So I'm using this in conjunction with middleware on my Deno/Opine server and I'm running into an issue with the typing of the Schema.validate() method.
The Typescript linter is saying that the function returns an object with the properties value and error? (optional).
In reality, the function is returning an object with the properties value and errors (not optional), where errors returns an empty object if validation is successful.
To compound this issue, the documentation says that the return type includes a valid: boolean property (which it doesn't).
I'm currently coercing schema.validate() as:
interface IValidationResponse {
  value: { [key: string]: string };
  errors: { [key: string]: string };
}

This gets me around the error and allows the library to work properly as intended. It would be nice to see a fix in a future release but like I said this is working for me for now.
Thank you!

Hello @bramirez96
Return state
With which schema is this happening? I think the validate should either return a State
interface State {
  value: any;
  error?: ValueErrorCode;
}

or when using an object schema an ObjectState
interface ObjectState extends State {
  values: { [key: string]: ValueErrorCode };
  errors: { [key: string]: ValueErrorCode };
}

So value singular and errors plural should never be returned together. Can you post your use case?
valid property
I think I removed the valid property because the check is really simple (either !error or Object.keys(errors).length) and forgot to remove that from the readme.

Looking at the code base I'm seeing this:
export interface State {
  value: any;
  error?: ValueErrorCode;
}

export interface ObjectState extends State {
  errors: {
    [key: string]: ValueErrorCode;
  };
}

So the two will not both be plural, ObjectState will always have  value and an optional error? as well as errors.
I'm not entirely sure what the issue I was having was, aside from the fact that the linter was showing a different return type than what my console logs were showing, and it forced me to coerce the data type. Here's what the code looked like when I was using it:
// Being used in a middleware function
const res = schema.validate(req[toValidate]) as IValidationResponse;

// I believe I was having an issue here with my linter telling me that vRes.errors did not exist
const errorFields = Object.keys(res.errors || {});

I was looking to get the names of the error fields, which worked fine, but my linter did NOT like this code, so I had to coerce the type. As for the || {} I was running into issues where errors was undefined and Object.keys broke.