Multiple spi displays -> need help

Hi!
I want to use more than one display on one spi line.
I researched this, and came to the conclusion, that only the cs/ce pin must be different.
So I wired two ssd1351 displays up and connected them as followed (BCM Numbers)
I guessed that I need to initialize the seccond display with gpio_cs_spi...
1st Display:
Mosi -> 10
SCLK -> 11
RES ->    25
DC ->     24
CS ->      8
2nd Display:
Mosi -> 10
SCLK -> 11
RES ->    25
DC ->     24
CS ->      7
Results:
Only on Display 2 (cs - 7) i get a picture.
If i wire it up so that dc, reset and cs are individual for each display and only Mosi and Sclk are shared, i get the same results.
Type of Raspberry Pi
Raspberry Pi 4 / 4GB
spi enabled
latest buster lite
Linux Kernel version
Linux raspberrypi 5.4.72-v7l+ #1356 SMP Thu Oct 22 13:57:51 BST 2020 armv7l GNU/Linux
Expected behaviour
Both displays will display a picture (in the demo code below it is a text...) undependend to each other.
Goal is that i can display something else on each display with minimal use of other GPIO's.
Actual behaviour
Only one Display shows something.
Allready testet the displays, both work just fine in "mono" mode without the other.
I even tried an ssd1322 + ssd1351 same result.
The Code:
( I've left the stuff I tried in the code, but commented)
#!/usr/bin/python3
import os
import sys
import time
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
from luma.core.interface.serial import spi
#from luma.oled.device import ssd1322
from luma.core.interface.serial import gpio_cs_spi
from luma.oled.device import ssd1351

width1322 = 128
height1322 = 128
width1351 = 128
height1351 = 128

font = ImageFont.load_default()

interface22 = gpio_cs_spi(device=0, port=0, gpio_DC=14, gpio_RST=15, gpio_CS=7)
#interface22 = gpio_cs_spi(device=0, port=0, gpio_CS=8)
#interface22 = spi(device=0, port=0)
#oled22 = ssd1322(interface22)
oled22 = ssd1351(interface22)
oled22.clear()
interface51 = gpio_cs_spi(device=1, port=0, gpio_CS=7)
oled51 = ssd1351(interface51)
oled51.clear()

image22 = Image.new('RGB', (width1322, height1322))
image51 = Image.new('RGB', (width1351, height1351))

draw22 = ImageDraw.Draw(image22)
draw51 = ImageDraw.Draw(image51)

def ssd1322picture():
    draw22.text((0, 20), "SSD1322", font=font, fill='white')
    oled22.display(image22)

def ssd1351picture():
    draw51.text((0, 64), "SSD1351", font=font, fill=(0, 255, 0))
    oled51.display(image51)

while True:
    ssd1322picture()
    ssd1351picture()
    time.sleep(10.0)
    oled22.clear()
    oled51.clear()

Can anyone help me with this topic? Is it even possible?

Hey Guys,
sorry, but I have absolutely no Idea how to do this with a pull request, so I made a little Instruction here:
The wiring:
1st Display:                    Raspberry Pi                            2nd Display:
Mosi/din ---------->     BCM-10 / Physical 19    <-----Mosi/din
SCLK/clk  ---------->     BCM-11 / Physical 23    <-----SCLK/clk
RES ---------------->     BCM-25 / Physical 22    <-----RES
DC ---------------->      BCM-24 / Physical 18    <-----DC
CS ----------------->      BCM-8   / Physical 24
BCM-7   / Physical 26    <-----CS
Example Code:
#!/usr/bin/python3
import os
import sys
import time

#Imports for PIL (needed to "draw" pictures)
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont

#Imports from Luma (needed to display the pictures on the Oled)
from luma.core.interface.serial import spi
from luma.oled.device import ssd1322
from luma.core.interface.serial import gpio_cs_spi
from luma.oled.device import ssd1351

#Definition for Display Size in Pixel
width1st = 256
height1st = 64
width2nd = 128
height2nd = 128

#Definition for font
font = ImageFont.load_default()

#Initialisation of the Interface(s)
interface1st = spi(device=0, port=0)      #, gpio_RST=14)  <- can be used if you want seperate RST, in my case it was not needed
interface2nd = gpio_cs_spi(device=1, port=0, gpio_CS=7)

#Initialisation of the Screens
oled1st = ssd1322(interface1st)
oled2nd = ssd1351(interface2nd)

#Clear the Screens
oled1st.clear()
oled2nd.clear()

#Initialize Images in PIL for each Screen
image1st = Image.new('RGB', (width1st, height1st))
image2nd = Image.new('RGB', (width2nd, height2nd))

#Initialize the "draw" function of PIL for each image
draw1st = ImageDraw.Draw(image1st)
draw2nd = ImageDraw.Draw(image2nd)

#Make some definitions on what to draw:
def ssd1322picture():
    draw1st.text((0, 20), "SSD1322", font=font, fill='white')
    oled1st.display(image1st)

def ssd1351picture():
    draw2nd.text((0, 64), "SSD1351", font=font, fill=(0, 255, 0))
    oled2nd.display(image2nd)

#While Loop
while True:
    ssd1322picture()
    ssd1351picture()

Thanks @Maschine2501, I’ll add it to the python usage docs

Hi guys! In the last days i noticed a strange behaviour. In my testfile i wrote one line (everything else stayed black), so i did not notice it before:
On the second screen, the previous content will remain until it is "overwritten" with color.

example: I had some text drawn on the complete screen, and afterwards i shutdown my pi.
Now when i want to display sometthing, only the parts of the picture where the new color != black is displayed, the rest only displays the previous Picture (even after loong powerloss and multiple reboots).
I tried to figure out the Answers of you, but  every configuration i tested , resulted in this case or that both displays show  the same picture.
I tested:
(MOSI, DC, SCLK parralell...)
Same CS, different RST
Same RST, differnet CS
Different CS and RS
Different CS, second screen no RST.
Maybe you can provide me with an example on how to wire and how to init?
Please help me with this, I'm kinda stuck....
Thank you

@Maschine2501 what version of luma.oled and luma.core?

How do i check that?

python -c "from luma.oled import __version__; print(__version__);"
for luma.core use same cmd but substitute core for oled

ok that looks like the latest versions, thanks.

I need to mention: in the picture above,  the red circle shows the "new" content, simple draw.text "oled Nr. 2".
And i use two spi1322, one 3.12" and one 5.5".

Here are some more informations:
#!/usr/bin/python3
import os
import sys
import time
from time import *
from PIL import Image as Image1
from PIL import Image as Image2
from PIL import ImageDraw as ImageDraw1
from PIL import ImageDraw as ImageDraw2
from PIL import ImageFont
from luma.core.interface.serial import spi
from luma.oled.device import ssd1322
from luma.core.interface.serial import gpio_cs_spi

width = 256
height = 64

varcanc = True
secvar = oledPause2StopTime = 2

font = ImageFont.load_default()

interface1 = spi(device=0, port=0) #, gpio_RST=25, gpio_CS=8) #, gpio_RST=14) #spi(device=0, port=0) #, gpio_RST=14)
interface2 = gpio_cs_spi(device=1, port=0, gpio_CS=7)  #gpio_RST=14, , gpio_RST=14) #) #, gpio_DC=14) #, gpio_RST=25) gpio_cs_spi(device=1, port=0, gpio_CS=7, reset_hold_time=0.2)
oled1 = ssd1322(interface1)
oled2 = ssd1322(interface2)
oled1.clear()
oled2.clear()

def pictureNR1():
    image1 = Image1.new('RGB', (width, height))
    draw1 = ImageDraw1.Draw(image1)
    draw1.text((40, 20), "Oled Nummer 1", font=font, fill='white')
    oled1.display(image1)

def pictureNR2():
    oled2.clear()
    image2 = Image2.new('RGB', (width, height))
    draw2 = ImageDraw2.Draw(image2)
    draw2.text((40, 20), "Oled Nummer2", font=font, fill=(0, 255, 0))
    print('1112222')
    oled2.display(image2)

def pictureNR12():
    image1 = Image1.new('RGB', (width, height))
    draw1 = ImageDraw1.Draw(image1)
    draw1.rectangle((0, 0, 263, 63), fill='white', outline='white')
    oled1.display(image1)

def pictureNR22():
    oled2.clear()
    image2 = Image2.new('RGB', (width, height))
    draw2 = ImageDraw2.Draw(image2)
    draw2.rectangle((0, 0, 263, 63), fill='white', outline='white')
    print('2222222')
    oled2.display(image2)

while True:
    if varcanc == True:
        print('1tes if')
        secvar = int(round(time()))
        varcanc = False
        pictureNR1()
        pictureNR2()
    if int(round(time())) - secvar > oledPause2StopTime:
        print('2tes if')
        pictureNR12()
        pictureNR22()
        sleep(2.0)
        varcanc = True
        secvar = 0.0

I even tried to import PIL with two seperate names... You see the behaviour here:

PS: All, exept CS, is parallel.

Can you try running any of the luma.example demo on your SSD1322's - particularly demo.py and maybe jetset_willy.py to see if they  exhibit any weird artifacts.
Also, to rule out the diff-to-previous changes that happened in luma.core 2.0.1, try changing your code as follows:
#Initialisation of the Screens
from luma.core.framebuffer import full_frame
oled1 = ssd1322(interface1, framebuffer=full_frame())
oled2 = ssd1322(interface2, framebuffer=full_frame())

Let me know if that changes anything.

Actually, I just thought - you will need to make sure each device has its own RESET line, as per @CRImier noted here: https://github.com/rm-hull/luma.oled/issues/311#issuecomment-721347009

@rm-hull : Thank you so much! TThatt was it!!
I now use Mosi, Sclk and DC Parallel. Each Display has now his own RST and CS:
interface = spi(device=0, port=0)
interface2 = gpio_cs_spi(device=1, port=0, gpio_CS=7, gpio_RST=14)
oled = ssd1322(interface, rotate=oledrotation, framebuffer=full_frame())
oled2 = ssd1322(interface2, framebuffer=full_frame())

I tested this wiring before, without succes, so the Framebuffer did it!
Thank you!!!!!!!! <3

Errr, so could you temporarily remove framebuffer=full_frame() from both. We just need to establish if it was the gpio reset lines that caused this or whether there is a bug in the diff-to-previous framebuffer class

Errr, so could you temporarily remove framebuffer=full_frame() from both. We just need to establish if it was the gpio reset lines that caused this or whether there is a bug in the diff-to-previous framebuffer class

Hi, I just removed  framebuffer=full_frame() from both displays -> same error as before.
If I put framebuffer=full_frame() back in place, both displays work like charm.
I even double checked with another pi and two other ssd1322 displays.
I left the cabling as followed:
Wired like this:
Display1--------------RPi-----------Display2
Mosi---------------Mosi(10)-----------Mosi
SCLK---------------SCLK(11)----------SCLK
DC------------------DC(24)-------------DC
CS-------------------CS0(8)xxxxxxxxxxxxxxxxx
RST-----------------RST(25)xxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxCS1(7)--------------CS
xxxxxxxxxxxxxxxxxxxxxRST(14)------------RST
Code:
#!/usr/bin/python3
import os
import sys
import time
from time import *
from PIL import Image as Image1
from PIL import Image as Image2
from PIL import ImageDraw as ImageDraw1
from PIL import ImageDraw as ImageDraw2
from PIL import ImageFont
from luma.core.framebuffer import full_frame
from luma.core.interface.serial import spi
from luma.oled.device import ssd1322
from luma.core.interface.serial import gpio_cs_spi

width = 256
height = 64

varcanc = True
secvar = oledPause2StopTime = 2

font = ImageFont.load_default()

interface1 = spi(device=0, port=0)
interface2 = gpio_cs_spi(device=1, port=0, gpio_CS=7, gpio_RST=14)
oled1 = ssd1322(interface1) #, framebuffer=full_frame())
oled2 = ssd1322(interface2) #, framebuffer=full_frame())
oled1.clear()
oled2.clear()

image1 = Image1.new('RGB', (width, height))
draw1 = ImageDraw1.Draw(image1)

image2 = Image2.new('RGB', (width, height))
draw2 = ImageDraw2.Draw(image2)

def pictureNR1():
    image1 = Image1.new('RGB', (width, height))
    draw1 = ImageDraw1.Draw(image1)
    draw1.text((40, 20), "Oled Nummer 1", font=font, fill='white')
    oled1.display(image1)

def pictureNR2():
    oled2.clear()
    image2 = Image2.new('RGB', (width, height))
    draw2 = ImageDraw2.Draw(image2)
    draw2.text((40, 20), "Oled Nummer2", font=font, fill=(0, 255, 0))
    print('1112222')
    oled2.display(image2)

def pictureNR12():
    image1 = Image1.new('RGB', (width, height))
    draw1 = ImageDraw1.Draw(image1)
    draw1.rectangle((0, 0, 263, 63), fill='white', outline='white')
    oled1.display(image1)

def pictureNR22():
    oled2.clear()
    image2 = Image2.new('RGB', (width, height))
    draw2 = ImageDraw2.Draw(image2)
    draw2.rectangle((0, 0, 263, 63), fill='white', outline='white')
    print('2222222')
    oled2.display(image2)

while True:
    if varcanc == True:
        print('1tes if')
        secvar = int(round(time()))
        varcanc = False
        pictureNR1()
        pictureNR2()
    if int(round(time())) - secvar > oledPause2StopTime:
        print('2tes if')
        pictureNR12()
        pictureNR22()
        sleep(2.0)
        varcanc = True
        secvar = 0.0

Hope that helps ;)

Ok, good to know, .... so we have uncovered a potential bug in how the diff-to-previous framebuffer implementation interacts with ssd1322. Out of curiosity, were you able to check the demo.py example to see if that glitched?

Hey, I'll test the demo file(s) tommorow... i'm off the pc now... sorry

Ah, I think I know what the problem is... basically this: https://docs.python-guide.org/writing/gotchas/
Your two devices are sharing the same diff-to-previous instance because of the default parameter.
If you change your python code to:
oled1 = ssd1322(interface1) #, framebuffer=diff_to_previous())
oled2 = ssd1322(interface2) #, framebuffer= =diff_to_previous())

Then I believe this would work correctly, because they are two separate instances.
I will issue a fix for this shortly.
Many thanks for your help reporting this.


Upgrade Project Reactor 2023.0.11 -> 2023.0.12 - autoclosed

This PR contains the following updates:

Package
Type
Update
Change

Project Reactor (source)
import
patch
2023.0.11 -> 2023.0.12

Release Notes

reactor/reactor (Project Reactor)
v2023.0.12
Compare Source
2023.0.12 release train is made of:

reactor-core 3.6.12
reactor-netty 1.1.24

These artifacts didn't have any changes:

reactor-pool 1.0.8
reactor-addons 3.5.2
reactor-kotlin-extensions 1.2.3
reactor-kafka 1.3.23

[ ] If you want to rebase/retry this PR, check this box

Suggested commit message:
Upgrade Project Reactor 2023.0.11 -> 2023.0.12

See:
- https://github.com/reactor/reactor/releases/tag/2023.0.12
- https://github.com/reactor/reactor/compare/2023.0.11...2023.0.12

We merged #1417 instead.


Set bs-html when HTML interpolation is required

See https://github.com/aptible/ember-cli-aptible-shared/pull/133
Will update this PR with the new ember-cli-aptible-shared version once it's released, so we can ensure the tests run against that new lib.

cc @sandersonet @gib

👍 Perfect


chore: release main

:robot: I have created a release beep boop
feed: 0.1.1
0.1.1 (2023-08-09)
Bug Fixes

add: change vars name (#20) (7dad852)
feed: rename vars (#18) (637909f)
feed: update something (#21) (8aabaed)
feed: update variables name (#22) (81a1570)
update something (b2bb373)

This PR was generated with Release Please. See documentation.

:robot: Release is at https://github.com/timayz/starter/releases/tag/feed-v0.1.1 :sunflower:


Open-WTDefault showing VSCode messages

Running Open-WTDefault works, but also displays Electron messages from VS Code.
PS C:\scripts\WTToolBox> Open-WTDefault
PS C:\scripts\WTToolBox>
[main 2020-12-18T18:08:55.447Z] update#setState idle
(node:23952) Electron: Loading non-context-aware native module in renderer: '\\?\C:\Users\Jeff\AppData\Local\Programs\Microsoft VS Code\resources\app\node_modules.asar.unpacked\vscode-sqlite3\build\Release\sqlite.node'. This is deprecated, see https://github.com/electron/electron/issues/18397.
(node:23952) Electron: Loading non-context-aware native module in renderer: '\\?\C:\Users\Jeff\AppData\Local\Programs\Microsoft VS Code\resources\app\node_modules.asar.unpacked\spdlog\build\Release\spdlog.node'. This is deprecated, see https://github.com/electron/electron/issues/18397.
(node:30364) Electron: Loading non-context-aware native module in renderer: '\\?\C:\Users\Jeff\AppData\Local\Programs\Microsoft VS Code\resources\app\node_modules.asar.unpacked\spdlog\build\Release\spdlog.node'. This is deprecated, see https://github.com/electron/electron/issues/18397.

I think this is a VSCode bug.


Tera Breasts unavailable

I cannot select and purchase tera breasts skill in the mod tree, regardless of all other skills maxed.

fixed in d5452dc39b1af117c3e6fa016d7bda0ad7e2a9ed which is coming up today

You'll have to look out on Alexofp/BDCCMods's pull request when I publicly release the fix

@Rocky9ax https://github.com/Alexofp/BDCCMods/pull/51


BUG: file not found for ML_AGNzoo notebook

Executing the notebook runs into this issue both locally and on CI. It maybe just a path issue (I haven't yet tried to run the notebook as is from jupyter), nevertheless the issue should be solved.
FileNotFoundError: [Errno 2] No such file or directory: 'data/df_lc_020724.parquet.gzip'

This bug never made it into production as @troyraen noticed the reason was a change added into the PRs. So I'm closing this now.


[BUG]could not create build - flutter_colorpicker dependency issues

Describe the bug
**Could not create builds at all **
Running Gradle task 'assembleRelease'...
../../../../../.pub-cache/hosted/pub.dartlang.org/flutter_colorpicker-0.4.0/lib/src/hsv_picker.dart:731:29: Error: The argument type 'PointerEvent' can't be assigned to the parameter type 'PointerDownEvent'.

'PointerEvent' is from 'package:flutter/src/gestures/events.dart' ('../../../../../Library/Flutter/packages/flutter/lib/src/gestures/events.dart').
'PointerDownEvent' is from 'package:flutter/src/gestures/events.dart' ('../../../../../Library/Flutter/packages/flutter/lib/src/gestures/events.dart').
super.addAllowedPointer(event);
^
FAILURE: Build failed with an exception.

Even if I added the following dependency override,  I till see the error
dependency_overrides:
flutter_colorpicker: ^0.4.0
$: flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 2.5.0, on macOS 11.5.2 20G95 darwin-x64, locale en-US)
[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
[✓] Xcode - develop for iOS and macOS
[!] Android Studio (not installed)
[✓] IntelliJ IDEA Community Edition (version 2021.2.1)
[✓] Connected device (2 available)
! Doctor found issues in 1 category.

@tneotia  Got the same error after upgraded to flutter version 2.5.
I did tried install the flutter_colopicker 0.60 but got this error
pub get failed (1; So, because invoice_app depends on both html_editor_enhanced ^2.3.0 and flutter_colorpicker ^0.6.0, version solving failed.)

You both need to use dependency overrides like this:
dependency_overrides:
    flutter_colorpicker: ^0.6.0

and it should fix the issue. The reason this is like that is because the API for gestures changed in Flutter, and right now I don't want to constrain the package to 2.5.0 Flutter which recently came out. Please bear with this change for a bit longer, in maybe 1 month I will officially constrain package to require 2.5.0 and up, then this error will be gone for everyone.

I added the dependency override as you suggested but I get into another build issue(s)

** BUILD FAILED **
Xcode's output:
↳
/ios/Runner/GeneratedPluginRegistrant.m:12:9: fatal error: module 'connectivity' not found
@import connectivity;
~^~~~~~
1 error generated.
note: Using new build system
note: Building targets in parallel
note: Planning build
note: Analyzing workspace
note: Constructing build description
note: Build preparation complete
Encountered error while building for device.
I did a clean build ( flutter clean, pod install) still the same issue

That is not related to this plugin, I often have pod build issues with xcode. Usually after researching there is something that makes it work but I can't remember off the top of my head. Try deleting that generated_plugin_registrant file? It will be regenerated so maybe it will fix itself.

Wow!, Thank you for your recommendation.
I had to delete .m, .h, PodFile and .lock, podspec files to make it work.
It's always been a challenging to work with iOS builds.

You both need to use dependency overrides in pubspec like this:
dependency_overrides:
    flutter_colorpicker: ^0.6.0

and it should fix the issue. The reason this is like that is because the API for gestures changed in Flutter, and right now I don't want to constrain the package to 2.5.0 Flutter which recently came out. Please bear with this change for a bit longer, in maybe 1 month I will officially constrain package to require 2.5.0 and up, then this error will be gone for everyone.

I am on stable channel and I tried adding dependency_overrides in my pubspec.yaml but still it throws the same error.
does it work on stable channel or I need to change to any other, I am using this for my production ready app.
please provide solution for stable channel if possible I don't want to switch to any other.

@Abhishek-0912 can you please share your pubspec file here?

@Abhishek-0912 can you please share your pubspec file here?

description: A new Flutter project.

publish_to: 'none' # Remove this line if you wish to publish to pub.dev

version: 1.0.0+1

environment:
  sdk: ">=2.12.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter

  file_picker:
  cached_network_image: ^3.1.0
  google_sign_in:
  simple_animations:
  page_transition:
  cupertino_icons: ^1.0.0
  firebase_auth: ^3.1.1
  # firebase_core_web:
  firebase_core: ^1.6.0
  firebase_storage: ^10.0.3
  flutter_image_compress: ^1.1.0
  location: ^4.3.0
  provider: ^6.0.0
  shared_preferences: ^2.0.7
  uuid: ^3.0.4
  cloud_functions:
  flutter_webrtc:
  cloud_firestore:
  cloud_firestore_web:
  http:
  url_launcher:
  # flutter_quill:
  # to use html_editor_enhanced doesnt works on stable change to beta+
  # html_editor_enhanced: 2.2.0

  flutter_svg:
  get:
  supercharged: ^2.1.1

# dependency_overrides:
#   flutter_colorpicker:

dev_dependencies:
  flutter_lints:
  flutter_test:
    sdk: flutter

flutter:
  uses-material-design: true
  assets:
  - assets/

my Pubspec.yaml file

@tneotia now its working thanks, the problem was with auto generated plugin file after deleting that and rebuilding it with flutter create . it works, and how can I include all the tools available in this plugin like is there any code to include all of them or do I have to include every options manually.

like is there any code to include all of them or do I have to include every options manually.

To include all the toolbar items you can use this:
Widget htmlEditor = HtmlEditor(
  controller: controller, //required
  //other options
  toolbarOptions: HtmlToolbarOptions(
    defaultToolbarButtons: [
      StyleButtons(),
      FontSettingButtons(),
      FontButtons(),
      ColorButtons(),
      ListButtons(),
      ParagraphButtons(),
      InsertButtons(),
      OtherButtons(),
    ],
  )
);

For the other doubt seems like you are using the plugin wrong. To get text you don't need to assign to callbacks: parameter, just call the await controller.getText() anywhere in your code.


Upgrade SPI and implementation versions to 1.2

As a developer, I'd like to upgrade SPI and Local-deployer implementation to the latest 1.2 release.

I believe we also need to update spring-cloud-task version to 1.2.0.RELEASE. WDYT? @cppwfs @sabbyanandan


Directive on query element is not resolving arguments

Is there an existing issue for this?

[X] I have searched the existing issues

Product
Hot Chocolate
Describe the bug
I created a directive @urlContext(url: String!) for the Query element. Added a middleware and was set that for the .Use on the directive definition. When the middleware is executed the directive is found below the context.Directive but when executing context.Directive.GetArgument<string>("url") I always getting null out.
If instead adding the directive on the field/field definition the middleware and get arguments methods are working as expected.
Workaround that I found is to use this to find the directive argument value
var directive = context.Operation.Definition.Directives.FirstOrDefault(x => x.Name.Value == context.Directive.Name);
var argument = directive?.Arguments.FirstOrDefault(x => x.Name.Value == "url");
var urlString = argument?.Value.Value as string;

if ((argument?.Value.Kind != HotChocolate.Language.SyntaxKind.Variable
    || context.Variables.TryGetVariable(urlString, out urlString))
    && !string.IsNullOrEmpty(urlString)
    && Uri.TryCreate(urlString, UriKind.RelativeOrAbsolute, out var url))
{

}

Steps to reproduce
Schema
directive @UrlContext(
  """
  The url for the contextual information.
  """
  url: String = "not-set"
) on QUERY | MUTATION | FIELD | OBJECT | FIELD_DEFINITION

type Query {
  content: String!
}

Query
query @UrlContext(url: "https://github.com")  {
  content
}

Directive definition
public class UrlContext
{
    public string Url { get; set; }
}

public class UrlContextType : DirectiveType<UrlContext>
{
    protected override void Configure(IDirectiveTypeDescriptor<UrlContext> descriptor)
    {
        descriptor.Argument(x => x.Url)
            //.Type<NonNullType<StringType>>()
            .Description("The url for the contextual information.")
            .DefaultValue("not-set");

        descriptor.Location(DirectiveLocation.Query | DirectiveLocation.Mutation | DirectiveLocation.Field | DirectiveLocation.FieldDefinition | DirectiveLocation.Object);

        descriptor.Use<UrlContextMiddleware>();
    }
}

Directive middleware
public class UrlContextMiddleware
{
    private readonly FieldDelegate _next;

    public UrlContextMiddleware(
        FieldDelegate next)
    {
        _next = next;
    }

    // this method must be called InvokeAsync or Invoke
    public async ValueTask InvokeAsync(IDirectiveContext context)
    {
        // Code up here is executed before the following middleware
        // and the actual field resolver
        var url = context.Directive.GetArgument<string>("url"); // this always return null when directive is on query

        // This invokes the next middleware
        // or if we are at the last middleware the field resolver
        await _next(context);

        // Code down here is executed after all later middleware
        // and the actual field resolver has finished executing
    }
}

Relevant log output
No response
Additional Context?
No response
Version
13.0.0-preview.85

That is not how the API works.
The middleware is only invoked for FieldDefinition and Field directives. Also, the middleware context has nothing todo with the directive itself. In order to get the directive values you need to resolver the directive object.

Can you point my in the correct direction? The https://chillicream.com/docs/hotchocolate/v12/defining-a-schema/directives does not include how to use the directive and their argument, only how to define them and specifying the middleware, and hard to navigate in the test-cases if there is any example.

Also if I change to use the use-delegate directly to simplify, the middleware is executed even if the directive is on the query-element itslef
For the query

I got a break point hit as

And however I try to fetch the value it's null.

If I instead move the directive down to the field,

it's working intended and the values are fetched by the inbuilt functions

So if this middleware not should be executed for query-directives, it's a bug that it will be executed. If it should be executed for the query directives either there is a bug that for resolving of the directive argument or lack of documentation about how we should access the directive argument.

That breakpoint is from the field... but we changed it with 13 to be more predictable ... so you will no longer get that.

Use the newest HC 13 build and it will no longer hit the breakpoint.

What are you trying to do with the directives? can you explain a bit your use-case then I will be better able to help you. Are you on slack btw... slack.chillicream.com?

I see, I was using a previous prerelease but after upgraded to the RC.4 it was behave as you describe. I'm not on slack and was not able to join either, the link has expired...
Our current model looks like this (simplified)
Query {
    contextual (url: String!): ContextualContext {
        content: IContent,
        search (query: QueryInput!): SearchResult!
    }
}

type SeachResult {
    products: ProductSearchResult!,
    pages: PageSearchResult!
}

type ProductSearchResult {
    totalCount: Number!,
    items: [ProductContent!]!
}

type PageSearchResult {
    totalCount: Number!,
    items: [PageContent!]!
}

type QueryInput {
    tags: [String!]
}

type PageContent {
    childPages: [PageContent!]!
}

type ProductContent {
    name: String,
    price: Number!
}

union IContent = PageContent | ProductContent

where all of the information that will be returned is contextual to the url that we should fetch the information from, url is resolved in the system and from that we are getting the culture/currency that should be used for the language element in the types (like name/price field in the ProductContent). We also need to be able to add the contextual information to the mutations, they will as-well be dependent on that one.
We feel that this structure is not the best and having this contextual node that everything is below and was looking into the @directive usage and to get rid of the contextual item to get a flat structure instead of this deep structure.
More like this setup, and then use the information from the directive inside the different nodes (content/search etc) and only need to resolve the needed contextual information (language, currency etc) once.
Query @urlContext(url: String!) {
    content: IContent,
    search (query: QueryInput!): SearchResult!
}

I don't like the need to pass in the contextual information in all elements that we need to resolve either because all the replicate of code that not feels straight forward and that we need to execute the same resolver multiple times.
Query  {
    content(url: String!): IContent,
    search (url: String!, query: QueryInput!): SearchResult!
}

I know that we can pass the information as http-headers and I want to avoid that as-well because looking to use GQL Federation for extensibility and I think it will be harder (if at all possible) to get that information down to the sub-graphs if needed.

I have fixed the link ... if you want to try again.

I know that we can pass the information as http-headers and I want to avoid that as-well because looking to use GQL Federation for extensibility and I think it will be harder (if at all possible) to get that information down to the sub-graphs if needed.

Header propagation is an well-known concept with federated graphs.

So you can access the directives on each field ... we do not coerce them by default because it has a performance impact. You could do that in the query compilation phase but there are variables that could be passed into the arguments ... these would prevent you from doing it there.

I have fixed the link ... if you want to try again.

Thanks, now it was working.

I know that we can pass the information as http-headers and I want to avoid that as-well because looking to use GQL Federation for extensibility and I think it will be harder (if at all possible) to get that information down to the sub-graphs if needed.

Header propagation is an well-known concept with federated graphs.

Do you, from the above information, think that it's better to send this contextual information as http-header information?

So you can access the directives on each field ... we do not coerce them by default because it has a performance impact. You could do that in the query compilation phase but there are variables that could be passed into the arguments ... these would prevent you from doing it there.

the query compilation phase is that the same as implementing an IHttpRequestInterceptor or how do I inject my own code inside that?


Change caching to reduce false missing attachment reports

oEQ-Toolbox:CF caches all item and attachment data before checking if the files exist.  This can lead to false missing attachment reports.
Change the batching algorithm to grab a set of items and attachments, check existence, and then grab the next batch.

Merged on Jun 5.  closing


add details on enabling auth v4 on riak

To enable authV4 on riak-cs, one has to add  {auth_v4_enabled, true} to advanced.config file ( should be in /riak-cs/etc/)

Thanks! Mind doing a pull request for README.md? I would like to make sure you get credit


Multiple dependencies share Locale.default variable

If we've got an app where we've got a library that depends on jed/locale and we use jed/locale in our library, when the dependency sets Locale.default and then our app sets it, our app takes priority (shared state).
Take this example:
Start app. Require dependency
Setup jed/locale

I noticed this when I need to return 'unknown' as the default locale in my library. When I imported that into my app, my app set it to 'en-US'. This was a tough one to pin down because of the way Node handles caching require() calls. If you test this with npm link then you will get 2 different instances. I only noticed this when I cleared my package cache and started having tests fail.
A possible solution is to pass a second parameter to new Locales(supportedLocales) that would have a per-instance based default.

Released version 0.1.0 that includes the fix for this.


Matching complex objects w/o maintaining order

First off, great library, thank you for all of the work.
I'm running into an issue when I'm trying to write a test that matches an object, but compares it on a value basis.  For instance, here is an example:
   expect(cognitoMock).toHaveReceivedCommandWith(AdminCreateUserCommand, {
      UserPoolId: expectedUserPoolID,
      Username: expectedEmailAddress,
      TemporaryPassword: expectedTempPassword,
      UserAttributes: [
        { Name: 'email', Value: expectedEmailAddress },
        { Name: 'phone_number', Value: expectedPhoneNumber },
        { Name: 'name', Value: expectedName }
        { Name: 'email_verified', Value: 'true' },
      ],
      MessageAction: 'SUPPRESS'
    })

In this particular instance, I'm required to provide the user attributes in the exact same order as they are provided to the command.  Is there a way to easily change how that comparison is happening?  I was attempting to use expect.arrayContaining, but then it doesn't actually compare the object properly.  I attempted to drop into sinon, but I couldn't quite get that working either.  Given the current implementation, what would be the best recourse?

I don't think vitest has a matcher out of the box, bit similar to what this library does, you can write your own. Something along these lines:
import { equals } from "@vitest/expect"
import { describe, expect, it } from "vitest";

expect.extend({
  arrayIgnoreOrder(actual, expected) {
    const { isNot } = this
    const pass = Array.isArray(actual) && Array.isArray(expected) && equals(actual.sort(), expected.sort(), undefined, true)
    return {
      message: () => {
        return (isNot ? "included all members when not expected" : "did not include all members")
      },
      pass,
    }
  }
})

describe("test", () => {
  it("works", async () => {
    const actual = { "foo": ["b", "a"] }
    expect(actual).toStrictEqual({ "foo": expect.arrayIgnoreOrder(["a", "b"]) })
  })
})

the alternative of course is to have a deterministic order of user attributes in your code, e.g to sort you user attributes by Name when you construct the command. In your test you then also sort the expected user attributes. This may be a lot easier.

Ooooh, there we go.  I was so focused on sinon that I completely forgot about writing my expect extension.   Thanks!

if you think the nature of the AWS API specifically requires this feature (e.g. since AWS often uses arrays insteaf of maps and order often does not make a semantic difference) I can think about adding a matcher to the library (but you explicitly need to extend it, similar to all the other matcher). What do you think?

Apologies for the late reply.  I think that giving some sort of matcher in there makes the tests less brittle.  (but only mostly so).  My first response was to have a more flexible matcher to make sure I can check for exactly what I'm testing.


Empty Geocode result

What is your question, problem or request?
The geocode is returning nothing at all

What version of this plugin do you use? Please including miner version ($> cordova plugin list)
2.0

Code, Data or Error log (please format your code or data)

constructor(
    ...
    private geolocation: Geolocation,
    private gecoder: Geocoder,
    ...
  ) {}

getGeocode() {
     let request: GeocoderRequest = {
        position: new LatLng(position.coords.latitude, position.coords.longitude),
     };

     this.gecoder.geocode(request).then((results: GeocoderResult) => {
        console.log(results); // Returns absolutely nothing
     });
}

It seems you use the v2 plugin with ionic wrapper, but the ionic wrapper does not support the plugin v2 yet.
You need to write your code WITHOUT the ionic wrapper.
https://github.com/mapsplugin/cordova-plugin-googlemaps-doc/blob/master/v2.0.0/For-ionic2-users/README.md

I tried this before I tried the ionic wrapper and it still failed with this
        "position": {"lat": 43.031873, "lng": -71.073203}
      }, function(results) {

        if (results.length === 0) {
          // Not found
          console.log('NOT FOUND');
          return;
        }

        console.log(results[0]);
      });

Since this plugin just returns the results of native APIs. No results means Google can not find answer or your app is blocked.

How can I know if I'm blocked?

@thpoiani Honestly, you should take a look at your design. I ended up pushing this geocoding to the server since I was getting lat and lng from the native geolocation package anyway. The support for doing this on the device ended up not making sense for our app.

@steveacalabro In my scenario, we want to do this on the device but we are getting empty results :(

Unfortunately, this plugin just make a request to Google or Apple through the native APIs. If you get empty result, I can not do anything.

@wf9a5m75 Can I check my API KEY?

What do you mean?

@thpoiani Another person on my team did get a proof of concept working with the code from that ionic2 notes page and setting up the correct app enabled on google. I think it ended up being a strange enabled api, I would find out which maps one it was and try that

I think its one of the following. Don't know for sure since he is not here.

This plugin needs just Google Maps SDK for iOS and Google Maps Android API v2

@webalchemist Can I check if the KEY API was added to the plugin?
Maybe that's could be the problem.
I'm trying to run this code but I got no results
plugin.google.maps.Geocoder.geocode({'position': {lat:-21.80273646969314,lng:-48.1786909326911}}, console.log)

ionic plugins:
cordova-plugin-googlemaps 2.0.0-beta2-20170731-1540 "cordova-plugin-googlemaps"

plugin.google.maps.Geocoder.geocode({
  'position': {lat:-21.80273646969314,lng:-48.1786909326911}
}, function(result) {
 console.log(result);
});

@wf9a5m75 empty too :disappointed:

Are you testing on Android or iOS?

Android

plugin.google.maps.Geocoder.geocode({'position': {lat:-21.80273646969314,lng:-48.1786909326911}}, function(results) {
console.log(results);
});

Plugin works fine.

I will try to reinstall the plugin

You can use this plugin also.
https://ionicframework.com/docs/native/native-geocoder/
I checked the code, and code is almost the same.

After reinstall the plugin, restart my device and change the wifi network.. its working :)


icons generated, appear in simulator but app is rejected and shows cordova default icons

Running cordova-icons works correctly, returning:
 Checking Project & Icon

  ✓  platforms found: ios
  ✓  icon.png exists
  ✓  config.xml exists

 Generating Icons for ios

  ✓<EMAIL_ADDRESS>created
  ✓<EMAIL_ADDRESS>created
  ✓  icon-small.png created
  ✓  icon-76.png created
  ✓<EMAIL_ADDRESS>created
  ✓  icon-72.png created
  ✓<EMAIL_ADDRESS>created
  ✓  icon-60.png created
  ✓<EMAIL_ADDRESS>created
  ✓  icon-50.png created
  ✓<EMAIL_ADDRESS>created
  ✓  icon-40.png created
  ✓  icon.png created
  ✓<EMAIL_ADDRESS>created
  ✓<EMAIL_ADDRESS>created
  ✓<EMAIL_ADDRESS>created
  ✓<EMAIL_ADDRESS>created

However after submitting to the AppStore the app shows the original cordova icon under "Included Assets" / "App Icon" and my app is rejected. I do not see the default cordova icons anywhere in Images.xcassets so am unsure what to do.
Thank you

I would also note that the icons appear correctly when run on the simulator.

Make sure you remove the platform and re-add it. Also double check that there is no entry inside of config.xml

I'm having a similar issue.
Output in console says everything is fine and generated.
But nothing is write in the folder.
I tried to remove and add platform again and stills the same.
I'm working in a Mac.

same issue here

U have to include the app-store 1024px icon. Open Xcode, switch to imageasset catalag and drag & drop that 1024pt appstore icon (which will not be generated by this plugin)


Fixed some typos in README and removed e.g. from example usage

Changed the example code snippets so that they can be copy-and-pasted directly, and fixed some typos.

Thanks for the suggestions @kamperh. If you don't mind making a couple of small changes, that's be great :)


Better console output

Sane and useful output.
May want a --verbose flag.

Done in #17. Verbose flag moved to #16


Add feeder translation keys

adds body_part-RIGHT_CONTROLLER and body_part-LEFT_CONTROLLER translation keys.
We need a propagation script for translations but if we end up using a platform it would be done by the platform itself.
I will surely make one anyways tho when the time comes

Please rebase.

done :p


Only 'Jupyter Notebook' appears as a base image

Only 'Jupyter Notebook' appears as a base image

Fixed


Not working for the past few weeks

It seems that either Chrome or Google has changed something and the extension does not work any more.

Got any more info on this? Just did a search, clicked the link while capturing network traffic, and it never did the redirect thing.  Tried with the extension disabled, and it went back to previous redirect behaviour.

I don't need a capture to confirm this, because before it made it obvious that it was working, but now the status bar shows the /url links and also clicks do resolve first to Google.
Looking at the source, I see it omits document.rwt, which I don't see at all, when inspecting a results page with Chrome console.
I have no idea how to debug this further but I'm willing to debug it if advised. Did disable all other plugins (ghostery, ublock, https everywhere being the only ones that might maybe interfere) and still the same.
Any tips?

I'm running Chrome 44.0.2403.157 (64-bit)

It could be google doing some AB testing, which would make this difficult to reproduce and diagnose. Mind providing the following info:

Example of a search term, and the exact link being clicked
Exact URL of initial search page (specifically, if you entered via a country-specific portal)
URL of search results page
Are you logged in? What country are you browsing from? Does it happen when not logged in? What about the incognito tab?
Before interacting with the page at all, and with Undirect disabled, the results of the following commands in the dev tools

    document.querySelector('#rso a').outerHTML

This selector should be match the link in the first result.  If it doesn't on yours, adjust it accordingly.
    rwt.toString()

(Note this will be window.rwt, not document.rwt)
Could you also mousedown on one of the links, then dragging away from the link (so the click doesn't trigger), and post the results of the same statements? It's in the mousedown event that the link is rewritten - at least for my results.  You're clearly getting something different.


Add more user-friendly JS bindings, migrate to ES6.

Notes:

Builds the Wasm and its JS bindings with -DCOMPILE_NODE=ON during the Cmake call.
Fiddles with a lot of Node flags to (i) get the thing to run and ~(ii) force terminate the tests due to implicit TLA async'ness.~

TODO:

Need a more portable way of setting locateFile in the Wasm loader.
Need to figure out a way to automatically download the test HDF5 files to tests-data during testing.
Or better yet, use h5wasm, even through it stubbornly refuses to work with Node.

All bindings added, now just need to figure out how to actually package it up.


Possible run-to-completion violation in "Handle Service Worker Client Unload"

Consider the first test at https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/LayoutTests/http/tests/serviceworker/unregister-then-register-new-script.html
In this big block:
.then(function(r) {
      new_registration = r;
      assert_equals(registration.installing.scriptURL,
                    normalizeURL(new_worker_url),
                    'before activated registration.installing');
      assert_equals(registration.waiting, null,
                    'before activated registration.waiting');
      assert_equals(registration.active.scriptURL, normalizeURL(worker_url),
                    'before activated registration.active');
      assert_equals(new_registration.installing.scriptURL,
                    normalizeURL(new_worker_url),
                    'before activated new_registration.installing');
      assert_equals(new_registration.waiting, null,
                    'before activated new_registration.waiting');
      assert_equals(new_registration.active.scriptURL,
                    normalizeURL(worker_url),
                    'before activated new_registration.active');
      iframe.remove();
      return wait_for_state(t, registration.installing, 'activated');
    })

At iframe.remove(), "Handle Service Worker Client Unload" will run. Note that the call to register(new_worker_url) did not lead to the uninstalling flag being reset to false since the conditions are not satisfied in [[Register]] (Is this a bug at that point?).
This leads to the underlying registration being cleared ([[Clear Registration]]), so that the call to registration.installing will be null according to spec. Blink seems to pass the test due to asynchronicity between their processes, but according to spec this seems like a violation of run-to-completion with installing changing.
IMO this should not actually happen since the reset uninstalling flag conditions need to be relaxed. In either case this sounds like a BigDeal issue.
@jakearchibald @jungkees

Good catch! Thanks for spotting this.
In this case, the registration should not be cleared as it's already under an update with its installing worker. To resolve this, I added a condition (ef4bff338f5808c0965d3d55c8800e35a79ddb90) checking whether a registration has a non-null newest worker before clearing the registration: Handle Service Worker Client Unload step 5. Indeed, this newest worker check was added to all the other part of the steps that try to clear a registration. (I think I missed it for this algorithm.)

Shouldn't uninstall flag also be reset to false though? register does not do that since the conditions are not satisfied. I think those conditions need to be relaxed.

Otherwise the next call to Match Service Worker Registration is going to return null because uninstalling flag is set.

Another option is to have Update reset the flag after it has successfully installed a new worker, but at this point I'm just shooting ideas and not thinking about this carefully.

Shouldn't uninstall flag also be reset to false though?

Yes, resetting it right away seems better to reflect that instant.

Another option is to have Update reset the flag after it has successfully installed a new worker

We're already doing so in Install step 22.1.

Otherwise the next call to Match Service Worker Registration is going to return null because uninstalling flag is set.

Even if we reset the flag in Handle Service Worker Client Unload and Install step 22.1, I think this still can happen when Match SWR is run while the Update/Install steps are running with the registration's uninstalling flag is set. But this seems fine as Match SWR returns the result reflecting that instant. That is, if the flag is reset by the installation success later on, the subsequent Match SWR will again return the registration.
A thought just came to my mind. With the current behavior, an installation failure doesn't have a chance to reset the uninstalling flag in this scenario, meaning that the registration will be cleared. Is this desirable? Or should we reset the flag at the beginning of Update? (i.e. interpreting the update attempt always should cancel the ongoing uninstallation regardless of the result.)

To sum, how about the following change?

Move Install step 22 to Update step 1 so it look like:

Update algorithm
1. If registration's uninstalling flag is set, unset it.

Change Handle Service Worker Client Unload step 5 back to the previous state:

If registration's uninstalling flag is set removing and the result of running Get Newest Worker algorithm passing registration as the argument is null, invoke Clear Registration algorithm passing registration as its argument and abort these steps.
This change still resolves the OP issue as by the time iframe.remove() is called, the registration's uninstalling flag has been unset by register(new_worker_url). But this brings a change in behavior that the registration will not be cleared when:

Unregister
Update
Update above failed

I like this behavior as it's simpler to reason about. Yeah, the Update is followed (and just failed).
Thoughts?

I think it makes more sense to move Install step 22 to Register step 1 rather than Update step 1. This is because if a dev calls unregister(), but then the UA updates as part of the 24 hour cycle, it is unpredictable and non-reproducible across sessions, whereas Register is always triggered by JS invocation. Otherwise, I am happy with the suggestions in the comment above. The invariant then imposes linearity on the "is registration still around or is it cleared?" based on the order of calling unregister() and register().

registration.update() doesn't get through Register, so Update seems the right place to cover all the update paths. For the SoftUpdate case, how about creating a flag passed to Update algorithm which when set by SoftUpdate will not unset the uninstalling flag? (i.e. SoftUpdate will not block uninstalling.)
Also, I'd like to hear opinion from Blink side about this algorithm step change too. / cc @nhiroki @michael-nordman (Seems @mattto is ooo now.)

Rather than add a flag to Update, I'd rather Register and SWRegistration.update() modify the flag before calling Update.

I thought the following: (as Update cancelling the uninstalling registration by default seems reasonable as we've done so far. Soft Update can choose whether the caller wants the cancellation or not.)
Update has cancel uninstallation flag, an optional flag unset by default
Update

If registration's uninstalling flag is set and cancel uninstallation flag is unset, then:
Unset registration's uninstalling flag.

Soft Update
...
Invoke Update algorithm with its arguments and cancel uninstallation flag set.
WDYT?

err, I should have been more clear about the use of 'flag' in my comment. I meant that I would rather have register() and SWRegistration.update() modify the registration's uninstalling flag before calling Update() instead of adding a default argument to Update and Soft Update. But that is pretty much my API design brain talking about making things explicit and not having default boolean flags. I don't know how it works for web platform algorithms.

Your design sounds good to me. I found the current behavior as-is actually seems odd and needs clarification. It currently does:

register() does not cancel uninstall until it resolves with a registration (either resolves with the existing registration or successful installation of a new version).
update() step 2 aborts the steps! meaning it doesn't cancel the uninstall. I think it should be fixed.

So, to sum again, we'd want:

register() method and update() method unset the uninstalling flag (i.e. cancel the uninstall).
. This conforms to our earlier discussion that we don't want to aggressively uninstall registrations.
. Devs will deal with any installation failure on those retaining registrations.
Soft Update will not unset the uninstalling flag (i.e. does not cancel the uninstall).
Remove Install step 22 (i.e. the decision of the cancellation of the uninstall doesn't depend on whether the installation succeeds or fails. They are all done by the callers as @nikhilm suggested).

Is that clear?

Sorry about this but as another option:
Soft Update is currently aborting at step 2: "If registration's uninstalling flag is set, abort these steps." So it does not update and let the registration be uninstalled. With this fact respected, if we encounter needing to add other callers of the Register and Update in the future, it'll be better to place the cancelling the uninstall step within the (Update) algorithm rather than in each caller side.
So, I'd like to hear your opinion.

@jungkees Can the fix to this issue be included in the v1 CR?

Yes, I agree that this should be included in the V1.

I don't think @nikhilm will be able to help here any further.  I've asked @khuey to look at it since he's familiar with the problem on our end.

Before the f2f on this Tue, I'm trying to sort out my thoughts on this. @nikhilm's original suggestion basically makes sense so it would be:

Register algorithm unset the uninstalling flag (without any condition)
update() will return early (as-is)
Soft Update algorithm will not unset the flag (naturally as it’s moved to Register)

The only question myself as of now is the second item: update() should block uninstalling a registration and go ahead with an update instead?

F2F: agreed on https://github.com/slightlyoff/ServiceWorker/issues/746#issuecomment-150904985.

I believe gecko is already doing this, so no tracking bug on our side.

Correction, we still need to fix it.


Under 13 User Flow

Trello: https://trello.com/c/0movvETM/1376-under-13-account-sign-ups
Related: Issue #932 and Issue #931
Users who are under 13 years old should:

be allowed to register for the site
be given user accounts
have their information stored in our database
receive appropriate transactional emails
should NOT have their information passed to MailChimp
should NOT have their information passed to Mobile Commons

User Examples:
UID: 2389099
User showed up in Mailchimp (unsubscribed on May 6)
User never gave mobile number, so not in Mobile Commons.
For context, they are signed up for many campaigns - it is unclear how they initially joined DS.
++++++++
UID: 2392236
User shows up in MailChimp.
User entered in Mobile Commons and would receive next weekly broadcast.
For context, they are signed up for Comeback Clothes - it is unclear how they initially joined DS.
++++++++
UID: 2748641 (Nami test account)
User does not show up in MailChimp.
User receives transactional emails for signing up/reporting back for a campaign.
User entered in Mobile Commons and would receive next weekly broadcast.
For context, this account was created by clicking "log in" in the top right corner of the site, and on Chrome.
++++++++
UID: 2748914 (Nami test account 2)
User does not show up in MailChimp.
User never gave mobile number, so not in Mobile Commons.
For context, this account was created by signing up for Support Board on Safari.
What Needs to Happen:

Under 13 users should consistently not be added to MailChimp
Under 13 users should not be added to Mobile Commons

at first glance it seems like a few things are happening here:

some under 13 users are going into MailChimp
all under 13 users seem to be going into Mobile Commons

user 2392236 has been opted in to the general Mobile Commons subscription list AND into individual campaign specific subscriptions (see subscriptions table on https://dosomething.mcommons.com/profiles/173868141)
interestingly user 2748641 was created in Mobile Commons but was not added to any specific subscription lists. I would have expected her to be signed up to Do Something Master campaign as a General DoSomething Web Sign Up https://dosomething.mcommons.com/campaigns/5091/opt_in_paths/164905.
anyways, if a user is under 13 s/he should never be passed into Mobile Commons or MailChimp
@angaither do you mind taking a look at this?

did a little more digging...
created user 1704889 on staging. that user is properly flagged as being "under 13".
when I just created an account for her from the homepage (not associated with any campaigns) everything worked properly (i.e. she was not added to Mobile Commons and therefore did not receive the new user text).
however, when I signed up for http://staging.beta.dosomething.org/campaigns/another-test-campaign which has an opt-in path associated with it through http://staging.beta.dosomething.org/admin/config/dosomething/opt_in the user was added to mobile commons and received the corresponding text.
mobile commons profile: https://dosomething.mcommons.com/profiles/176933128
that user also got added to MailChimp, but not sure if that was from general registration on a delay or because of the MailChimp Group associated with node 1617 on staging.
MailChimp profile: https://us4.admin.mailchimp.com/lists/members/view?id=64934941
for debugging purposes, it would be sweet if the MailChimp account creation happened because of the MailChimp group associated with node 1617 because that would seem to indicate that the campaign specific MailChimp/Mobile Commons opt-ins are ignoring the Under 13 flag.

for comparison, http://staging.beta.dosomething.org/user/1704890 signed up for a campaign that isn't tied to a specific MailChimp group (http://staging.beta.dosomething.org/campaigns/space-jam) and is not in MailChimp

i feel pretty confident that this is related to users signing up for campaigns that are connected to specific opt-in paths on https://beta.dosomething.org/admin/config/dosomething/opt_in
every user under 13 that we've found is tied to a campaign specific MailChimp Group or Mobile Commons opt-in path

so far looks like Fantini is right, this line is why normal registration doesn't add under 13 members to messaging. https://github.com/DoSomething/dosomething/blob/5420d81df9cad01d0fe8a645fffedb503c1e303c/lib/modules/dosomething/dosomething_user/dosomething_user.module#L425
guessing this function isn't used in optin paths, going to check for that next

we should just be able to call that under_thirteen function before adding those kiddos

yep, just finding all of the places where we forget it. I think this is one of them https://github.com/DoSomething/dosomething/blob/c6bd118d3c995011efb56b20604616d1ef10cb3d/lib/modules/dosomething/dosomething_signup/dosomething_signup.module#L516

:+1: yeah, there's probably a couple places in there

ok so i can confirm that under 13 users are no longer going into MailChimp and Mobile Commons.
However, under 13 users are no longer getting transactional emails either.
@marahml are you cool with that?

yes, totally cool with those users not getting emails - and think it better protects us for coppa law.


Add the ability to flip over the x or y axis

We'd like the ability to flip the viewer across the x-axis (the use case is.. something about scholars studying piano rolls and, I gather, a lack of conventions about which way is "up") .
In this PR, I extended the viewport flipped property from a structure that allows you to flip across each axis independently. I tried to address some backwards compatibility concerns, but perhaps a separate property for each axis would be preferable?
If this feature is desirable (and I get some guidance on an approach) I'm happy to update any tests, docs, etc.
Thanks.

Thank you for making this PR! Apologies for the slow response...
The approach seems reasonable (though I'd love to hear what @nelsonn3c thinks). You've even done some to address the backwards compatibility issue (though perhaps more will be necessary).
One basic question to start with, though: If you combine the current flip with a 180 degree rotation, that's the same as a vertical flip. Is that an acceptable solution, or do we need the addition of the vertical flip to achieve something specific?
Even if it's not entirely necessary, it does seem like it might be a more pleasant UI. Anyway, just trying to understand the situation.


Support for Helm charts

Existing functionality for Kubernetes to ECS utilizes K8S manifests, but for users with investments in Helm it would be nice to alternatively be able to scan Helm charts for conversion into ECS.

May be more of a Readme.md update, as Helm supports outputting to YAMLs -
https://helm.sh/docs/helm/helm_template/

Can this be closed?


Add API endpoint to calculate the cost of migrating from a legacy wallet.

Context
This task will provide an API endpoint that allows users to calculate the exact cost of migrating from a Byron wallet to a new wallet.
Decision
The API will provide an endpoint similar to the following:
/byron/wallets/{byronWalletId}/migrate:
  get:
    operationId: getByronWalletMigrationInfo
    tags: ["Wallets"]
    summary: Migrate
    description: |
      Calculate the exact cost of migrating from a Byron wallet to a new wallet.
    parameters:
      - *parametersByronWalletId
    responses: *responsesGetByronWalletMigrationInfo

Acceptance Criteria
Within the list of criteria below, a ticked criterion indicates that there is test coverage in the master branch to demonstrate that this criterion is satisfied.

[x] The API must provide an operation to calculate the exact cost of migrating from a Byron wallet to a new wallet.
[x] The actual cost incurred by the migration (with the migrateByronWallet endpoint) must exactly match the cost returned by the getByronWalletMigrateInfo endpoint. Therefore, the balance of the new wallet must be equal to b - c, where b was the original balance of the legacy wallet, and c is the cost returned by getByronWalletMigrateInfo.

Development Plan

Implement dummy endpoint that always returns zero.
This will unblock tasks that depend on the presence of this endpoint and types relating to it.
Replace dummy implementation with real implementation.

 Added comment here -> https://github.com/input-output-hk/cardano-wallet/issues/779#issuecomment-550268161


Clarify ByteBuf.duplicate() semantics.

Motivation:
From the javadocs of ByteBuf.duplicate() it is not clear if the reader and writer marks will be duplicated.
Modifications:
Add sentence to clarify that marks will not be duplicated.
Result:
Clear semantics.

@trustin @Scottmitch please review

@normanmaurer LGTM. thanks!

LGTM sans '!'

Comment addressed and cherry-picked into 4.0 (981292ffc09512a6608fd343716b8129aec233d0) , 4.1 (33e443e71a463f57406eef311792512584a98b4d) and master (a73a3ce7a6e7706031378e3845cbd1dd90374b28)


Ensure unsigned images never get published

We got a few rando reports of image upgrade failures, p5 investigated and it was a temporary outage from sigstore:
Error: signing [ghcr.io/ublue-os/kinoite-nvidia@sha256:2219734f69fc517aac7f744c2f9af0f5fc54796b8a866a9ee686cd0f73b72edf]: signing digest: Post "https://rekor.sigstore.dev/api/v1/log/entries": POST https://rekor.sigstore.dev/api/v1/log/entries giving up after 4 attempt(s)

Rebuilds fixed the issue:

j0rge: should we have a step that verifies the signatures on each build maybe? I don't recall this happening before?

p5: A verify step would only be useful if we ran it before pushing the image (or tagging the images with the final tag).  Currently signing happens after pushes, so will block nothing

KyleGospo: I think we need a cleanup action that removes these failed builds
sigstore going down shouldn't leave us with an unsigned image
though at least it's a self-solving problem

Something we could consider is to push the images to GHCR with a temporary tag (or no tag?), sign the images with sigstore then using Skopeo or similar, set the final tags.


⚠ Bofrost.at has degraded performance

In cc05dd9, Bofrost.at (https://www.bofrost.at) experienced degraded performance:

HTTP code: 200
Response time: 1491 ms

Resolved: Bofrost.at performance has improved in c8690f4.


CSS doesn't work when use gulp

the class of bootstrap css or custom css doesn't work in my laravel 5.1 web project, i use gulp to manage css assets  ...
so whats wrong ??
please help me master ..

Whats the content of your build css?

This isn't a Laravel issue.
It looks more to me that you've not setup your gulpfile.js properly.

this is my gulpfile.js
var elixir = require('laravel-elixir');
/*
|--------------------------------------------------------------------------

Elixir Asset Management

Elixir provides a clean, fluent API for defining some basic Gulp tasks

for your Laravel application. By default, we are compiling the Sass

file for our application, as well as publishing vendor resources.

*/

elixir(function(mix) {
mix.sass('app.scss');
mix.version('public/css/app.css');

});

I don't think you need to prefix the public/ path, it's defaulted to be I believe.

still not work :(

Just check that public/css/app.css does actually have some content.


Error permisions of Microphone

i got this fatal error
´´´Swift
fatalError("[CameraEngine] error initInputDevice")
´´´
And i print put the error, it was this one:
Error Domain=AVFoundationErrorDomain Code=-11852 "Cannot use iPod Microphone" UserInfo={NSLocalizedDescription=Cannot use iPod Microphone, AVErrorDeviceKey=<AVCaptureFigAudioDevice: 0x14f66450 [iPod Microphone][com.apple.avfoundation.avcapturedevice.built-in_audio:0]>, NSLocalizedFailureReason=This app is not authorized to use iPod Microphone.}
I know I have tuned off the microphone permissions, but this error should not occur if I will only use the camera without video.
for testing I will turn on the microphone, but I should be able to take photos without this permission

Permission error ! Thanks for reporting again, your contribution is awesome thanks again. I will check it out.

you could add also the permisions promp like a function .askCameraPermision(callback) .askCameraPermision(callback)
also variables to know if it has pemission of the AVFoundation, check the library CameraManager for some inspiration 😄

@davidlondono Thanks I am currently working on it. I will provide a fix soon. Thanks again for your help. It makes CameraEngine so much better !

@davidlondono how did you fix the error? It still occurs for me when user cancels permission for mic or camera. Which would have been fine except that the error occurs when I initialize camera engine let cameraEngine = CameraEngine() which means before I get the chance to ask for permission again, the fatal error will occur. This is bad when your initial view controller is displaying a camera.

just check if camera is available manually with UIKit and then if it is available create the CameraEngine instance

@davidlondono That means I can't have a global instance of cameraEngine declared. I would have to initialize it in every function I create that manipulates cameraEngine - Unless I'm wrong and there is a way I can do this at the top of my class?
if AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo) ==  AVAuthorizationStatus.Authorized
{
    let cameraEngine = CameraEngine()
}

or create a class with a static function and static variable of CameraEngine, on the function return an optional CameraEngine and return nil if is not authorized

@davidlondono Mind giving me a quick code example. im new at this and im failing 😅🙈


Compile pg_tiktoken extension

Describe your changes
postgres=# create extension pg_tiktoken;
CREATE EXTENSION
postgres=# select tiktoken_count('p50k_edit', 'A long time ago in a galaxy far, far away');
 tiktoken_count
----------------
             11
(1 row)

postgres=# select tiktoken_encode('cl100k_base', 'A long time ago in a galaxy far, far away');
                  tiktoken_encode
----------------------------------------------------
 {32,1317,892,4227,304,264,34261,3117,11,3117,3201}
(1 row)

Issue ticket number and link
Checklist before requesting a review

[x] I have performed a self-review of my code.
[ ] If it is a core feature, I have added thorough tests.
[ ] Do we need to implement analytics? if so did you add the relevant metrics to the dashboard?
[x] If this PR requires public announcement, mark it with /release-notes label and add several sentences in this section.

LGTM, thanks. I'm now playing with unforking all of that and using "unsafe-postgres" thing from the last version. Works for jsonschema and tiktoken, but some problems with pgx-contrib-spiext. Will poke at it for some more time and most likely leave everything as it is until next pgx-contrib-spiext release

There is a PR that removes the dependency to pgx-contrib-spiext for pg_graphql extension:


Fix pylint consider-using-in warning

The build seems to be failing after merging of #6 due to pylint warning:
synology/api.py:104:11: R1714: Consider merging these comparisons with "in" to 'state not in (HOME_MODE_ON, HOME_MODE_OFF)' (consider-using-in)

Merged thanks!


First draft of CDN article

👍

Should we add a section in the article for books with domain names not pointing to gitbook.com?


bucket_sort_added

Have you read the Contributing Guidelines on Pull Requests?
Yes!
Description
Program of Bucket Sort in C-Plus-Plus.
Checklist

[Y] I've read the contribution guidelines.
[Y] I've checked the issue list before deciding what to submit.
[ ] I've edited the README.md and link to my code.

Related Issues or Pull Requests
#1590 issue solved.

@vrandachag  also upload in the read me file I see only the program is uploaded


Issue with swap-arguments-function mutation in Gambit tool: Limited to functions with 2 arguments

As a user of the Gambit tool, I have noticed an issue with the swap-arguments-function mutation, where the mutation is limited to functions with only 2 arguments.
According to the Gambit documentation, the swap-arguments-function mutation is intended to swap the arguments of a function call. However, I have observed that the mutation only swaps the arguments for functions with exactly 2 arguments. Functions with more than 2 arguments are not mutated.
I believe that this is a significant limitation of the mutation operator. In Solidity contracts, it is common to have functions with more than 2 arguments, and the swap-arguments-function mutation could be more effective if it could be applied to these functions as well.
I would like to suggest that the Gambit team review the implementation of the swap-arguments-function mutation and consider expanding its functionality to include functions with more than 2 arguments.
Thank you for your attention to this matter.

Hey @Sta1400! I'm going to be going over mutation operators at some point soon and I'm not sure that swap-arguments-function is going to make the cut. I'm going to chat with users at some point, and we might include an option to use this if it is explicitly indicated.
I welcome your feedback though, let me know if you think this is a useful operator! One of my worries is that it might have a high equivalence rate. E.g. max(a, b) is equivalent to max(b,a). Not sure how much this comes up in the wild.
Another issue is that it's not clear what the semantics should be on more than two arguments. With two arguments there is a clear canonical swap that we can perform. On a function with four args, say all ints, there are now 23 possible non-identity permutations to those arguments...which one do we pick? This could potentially introduce nondeterminism into our set, or it will overload our mutant set with this one kind of mutant.
Anyway, just thoughts I'm having, not sure the right solution yet, and definitely want to include this if it's useful for users!

Another solution: rotate the args instead of 'swapping' them. Just do a right rotate, or a left rotate


View contest solved status

Pretty print dashboard table with solved problems and count of successful submissions.
Command name cf watch
Features to implement

[x] View dashboard table
[ ] View announcements
[ ] View penalty points / total points obtained for each problem. Maybe merge with dashboard table above.

Implemented Dashboard view in 8d61969


e1000e doesn't build for kernels newer than 3.14.58

I have the following derivations available for the e1000e module:
# nix-env -qa e1000e
e1000e-2.5.4-3.10.88
e1000e-2.5.4-3.12.47
e1000e-2.5.4-3.14.58
e1000e-2.5.4-3.18.25
e1000e-2.5.4-4.1.12
e1000e-2.5.4-4.2-rc5
e1000e-2.5.4-4.2.5
e1000e-2.5.4-4.3.2
e1000e-2.5.4-4.3.2

Doing nix-env -i e1000e-2.5.4-3.14.58 will work. And it will work for the following:
e1000e-2.5.4-3.10.88
e1000e-2.5.4-3.12.47

However doing the same thing on any of
e1000e-2.5.4-3.18.25
e1000e-2.5.4-4.1.12
e1000e-2.5.4-4.2-rc5
e1000e-2.5.4-4.2.5
e1000e-2.5.4-4.3.2
e1000e-2.5.4-4.3.2

Will result in a build error. Here is my output:
[root@nixlive:~/nixpkgs]# nix-env -i e1000e-2.5.4-3.18.25
replacing old ‘e1000e-2.5.4-3.14.58’
installing ‘e1000e-2.5.4-3.18.25’
these derivations will be built:
  /nix/store/9q0k58wjkw7glc00x3psqkvn8df81b46-e1000e-2.5.4-3.18.25.drv
building path(s) ‘/nix/store/fdzz044ppv2wkfgwman1sn28g7akw2h1-e1000e-2.5.4-3.18.25’
unpacking sources
unpacking source archive /nix/store/q0fi3va8iwh61b1pwg48q69qlkpk8w19-e1000e-2.5.4.tar.gz
source root is e1000e-2.5.4
patching sources
configuring
building
make flags: SHELL=/nix/store/fz5cv1c7jm8wf0hllp51izk0didjyvaq-bash-4.3-p42/bin/bash BUILD_KERNEL=3.18.25
Makefile:117: *** Linux kernel source not configured - missing autoconf.h.  Stop.
builder for ‘/nix/store/9q0k58wjkw7glc00x3psqkvn8df81b46-e1000e-2.5.4-3.18.25.drv’ failed with exit code 2
error: build of ‘/nix/store/9q0k58wjkw7glc00x3psqkvn8df81b46-e1000e-2.5.4-3.18.25.drv’ failed

I have no idea how to fix this. I also tried to update this derivation to build a newer version of e1000e. Below is my diff however the results are the same, it fails and works for the same kernel versions.
diff --git a/pkgs/os-specific/linux/e1000e/default.nix b/pkgs/os-specific/linux/e1000e/default.nix
index db5f88b..2e3d104 100644
--- a/pkgs/os-specific/linux/e1000e/default.nix
+++ b/pkgs/os-specific/linux/e1000e/default.nix
@@ -1,11 +1,11 @@
 { stdenv, fetchurl, kernel }:

 stdenv.mkDerivation {
-  name = "e1000e-2.5.4-${kernel.version}";
+  name = "e1000e-<IP_ADDRESS>-${kernel.version}";

   src = fetchurl {
-    url = "mirror://sourceforge/e1000/e1000e-2.5.4.tar.gz";
-    sha256 = "0bmihkc7y37jzwi996ryqblnyflyhhbimbnrnmlk419vxlzg1pzi";
+    url = "https://downloadmirror.intel.com/15817/eng/e1000e-<IP_ADDRESS>.tar.gz";
+    sha256 = "0g9435v6h5m0fpjn3c836acr56m1aq62nj9xd43qi4sx7y8ys830";
   };

   configurePhase = ''
@@ -15,6 +15,12 @@ stdenv.mkDerivation {
     export makeFlags="BUILD_KERNEL=$kernel_version"
   '';

+  buildPhase = ''
+    gcc -v
+    echo "make $makeFlags CFLAGS=-Wno-error"
+    make $makeFlags CFLAGS=-Wno-error
+  '';
+
   installPhase = ''
     install -v -D -m 644 e1000e.ko "$out/lib/modules/$kernel_version/kernel/drivers/net/e1000e/e1000e.ko"
   '';
@@ -25,7 +31,7 @@ stdenv.mkDerivation {

   meta = {
     description = "Linux kernel drivers for Intel Ethernet adapters and LOMs (LAN On Motherboard)";
-    homepage = "http://e1000.sf.net/";
+    homepage = "https://downloadcenter.intel.com/download/15817/Network-Adapter-Driver-for-PCI-E-Gigabit-Network-Connections-under-Linux-";
     license = stdenv.lib.licenses.gpl2;
   };
 }

Hi, I have the same issue here with my intel I219-V ethernet. i already download the drivers in https://downloadcenter.intel.com/download/22283/Intel-Ethernet-Connections-CD and it requires e1000e.3.3.3 which greater than 3.14.58 CMIIW.
Is there any way to fix this?

You can override the e1000e package to a newer version. For example I still have this in my configuration.nix:
  nixpkgs.config.packageOverrides = pkgs: rec {
    linuxPackages.e1000e = pkgs.linuxPackages.e1000e.overrideDerivation (attrs: {
      name = "e1000e-3.3.1-${config.boot.kernelPackages.kernel.version}";

      src = fetchurl {
        url = "mirror://sourceforge/e1000/e1000e-3.3.1.tar.gz";
        sha256 = "07hg6xxqgqshnys1qs9wbl9qr7d4ixdkd1y1fj27cg6bn8s2n797";
      };
    });
  };

  boot.kernelPackages = pkgs.linuxPackages_latest;
  boot.kernelModules = [ "e1000e" ];

The e1000e package is actually hosted on sourceforge, you can get the link to the newer version you need here:
https://sourceforge.net/projects/e1000/files/e1000e stable/3.3.3/
I can't believe I'm linking to sourceforge in 2016... but anyway you need the sha256 value of the file. The way I did it is the way this page says to do it:

To figure out the checksum for the tarball you have the nix-prefetch-url utility. In addition to returning  > the sha256 checksum it will also leave the downloaded blob on your nix store, thus avoiding additional > downloads when you test the build process. You get the path to the downloaded blob and the > sha256sum on the last two lines of the command's output"

hi Zer0- thank you for your info. anyway, after i update to 3.3.3, do i need to install the driver manually or should it already recognize the ethernet?

You just need to specify e1000e as one the boot.kernelModule option entries and it should work. You might need to reboot.


SwiftPM support

Hi,
With Swift 3 it would also be nice to add support for SwiftPM
Articles about SwiftPM:

Package.swift — The Manifest File
Developing Packages
System Modules
Swift Package Manager Community Proposal

On your README.md add   on top and add section for the installation with SwiftPM.

+1

btw where did you get that badge from?

to support SPM we need to:

[ ] Change folder structure and add all files under Sources/
[ ] Create Package.swift describing the module

Is there a guide on the best way to support SwiftPM, Cocoapods, and Carthage in the same branch?

I couldn't find one on Google.

one of my libs supports cocoapods and SPM: https://github.com/jonasman/MulticastDelegate
The sources folder needs to contain all the files, unless you want to make many modules.
The cocoapods just points there

Swift PM support has just been merged into master. I will create a release in the coming days.


Fixes to make LUI work with latest Panda

This change does the following:
(1) Work around the issue where pixel_xy inputs weren't being sent along from MouseWatcher.  This issue prevented mouse input from working for me.
(2) Make path to skin relative and not absolute... should probably find a better way to do this at some point.  Hope I didn't break the Windows case.
(3) Because PythonCallbackObject is no longer in libpanda (it has been moved to core.pyd), I had to remove the version of bind() that takes a PyObject pointer.  Instead, I checked in a change to Panda so that Interrogate automatically allows passing a function object to a function that takes a CallableObject.  (I updated the on_xxx mechanism to call the Python function instead to make this work.)
(4) Update makepanda.py to latest version.
(5) Update CullableObject constructor which has been changed in Panda.
(6) Remove pandasymbols.h, move the definitions to config_lui.h instead.  This feels a bit neater while it's separate from Panda.  This will require reverting your pandasymbols.h for it to build.
(7) Rename some UI* stuff to LUI* stuff, and some other fixes, to make Builtin/main.py work.  (Is this part of some changes you were working on recently?  I hope this is not in conflict with some of your work - I can revert this if you prefer.)
(8) Some miscellaneous fixes to .py files in Builtin because of error messages I was getting.  Again, I can revert this if this conflicts with things you were working on.

(1) Oh, it worked for me, but glad too hear you fixed it for you :)
(2) Yeah, it was only temporary yet .. I will try if it still works on windows
(3) Okay, cool! :)
(4) awsum :3
(5) see above
(6) okay, I didn't know that was possible, but yeah its definietly simpler
(7) I already named the UI stuff to LUI stuff, but it might be very well I missed something :)  The Builtin/main.py is currently not supposed to work though, it was just a testcase in the beginning :)
(8) I'll see if there are any conflicts :)
Thanks a lot for the patch!


[TW#25609] Bluetooth Controller: Suggested Default Data Length not used for new connections

During Bluetooth init, BTstack sends the LE Write Suggested Default Data Length Command
and specifies 251 octets and 2120 ms. However, when creating an outgoing connection, the LE Data Length does not change/no negotiation happens.
I expect that setting the default data length is enough to trigger DLE negotiation for new connections. This is also observed with other controllers: the EM9301, CYW20704, and Nordic nRF52/SoftDevice.
The bundled Bluedroid stack explicitly sends the LE Set Data Length Command for new connections, I guess this fact hides this issue. I've tried this as well and the Data Length Update works when this command is send.
Is this considered a bug by Espressif? If yes, will Espressif fix it?

Hi @mringwal , ESP32 will ESP32 auto-negotiation data length if remote device feature support ,
you can refer to line 3655 in btm_ble_read_remote_features_complete() of btm_ble_gap.c.

Hi @Weijian-Espressif -  I'm referring to the Bluetooth Controller implementation in the Bluetooth Library not the Host Stack.
I expect the Bluetooth Controller to automatically trigger DLE negotiation. btm_ble_gap.c is part of Bluedroid / the Bluetooth Host Stack. If it is triggered in the host stack, it is not automatically started by the Bluetooth Controller.
(Of course, we can add a workaround in our stack, but I think the behaviour is not correct and like to know that's the case and if it gets fixed, so that we won't need to add such a workaround)

We found a compatibility issue before, so I moved it to the host. There are no plans to change now.

Thanks for the updates and the clarification.
I'll add an option to BTstack to start the negotiation after connect to work around this problem in the ESP32 Bluetooth Controller implementation.


[PORT] Support long/int64 in number constant

Port this change from botbuilder-dotnet/master branch:
https://github.com/microsoft/botbuilder-dotnet/pull/3912

close: #3888
Support long/int64 constant input in Expression
Changed projects

AdaptiveExpressions
AdaptiveExpressions.Tests

[R10]

language specific. close it.


[feat] arm64 pkg release?

Looking for a packaged release for arm64.
Appears the builds here https://api.github.com/repos/zwave-js/zwave-js-ui/releases/latest are only x86_64?

Unfortunately this is not easy to do as github doesn't provide arm64 runners, and doing it in a docker container is complex. Do you need it for macOS or linux?

I did not know that.
I am looking for linux, setting up on a rpi4 running alma linux 9.

@robertsLando I think if you add docker/setup-qemu-action to your GitHub action you can build arm64 packages without issue. This action enables and configures QEMU binfmt so that non-native targets can be generated by pkg. arm32 is a problem still, and I assume alpine is also (due to node serial build from source problem), but arm64 for Raspberry Pi-like platforms (e.g. Debian/Ubuntu) will work. I tested this locally (Intel workstation) and the resulting arm64 binary works fine on my Pi4. I'm using Debian 11, so I can't say how it fares for older versions.
I thought I'd also mention that the packaged version of node is still at v14, compared to docker using v18 now. I used v18 locally when generating the arm64 binary and it looks OK after a quick look.

I think if you add docker/setup-qemu-action to your GitHub action you can build arm64 packages without issue.

That's what I used to do, I just need to create another dedicated workflow and dockerfile for that

You don't need a new Dockerfile or workflow if all you want to do is build arm64 packages. Just add docker/setup-qemu-action as a step, then add the linux-arm64 target to your package script. pkg figures out you've enabled QEMU binfmt and does an emulated build.

Just add docker/setup-qemu-action as a step, then add the linux-arm64 target to your package script. pkg figures out you've enabled QEMU binfmt and does an emulated build.

Oh never tried that! I thought that setup-qemu was just for docker related stuff. So interesting, will give this a try soon

Hello,
Thanks for this wonderful tool!
Could you also add a release for armhf and armel as well? I'm using a Raspberry pi with debian and neither x86_64 nor arm64 can be run on it.
I don't know if this is easy or not, but I think that the whole set of architecture would be very useful : x86_64, x86, armhf, armel, and x86 would be useful.

@Krakinou Why not simply use docker?

@Krakinou I understand all the statements above but pkg builds are not so easy to do because them require native builds of some libs like serialport node and them are even more complex then docker when it comes to debug issues (I'm a maintainer of pkg and there are lot of bugs/weired things that could happen when using it).
If you never used docker I really suggest to give it a try as almost everything now uses it and it's not that complex (one commmand to run and one to upgrade). Docker becomes complex when you need to develop your own things, in that case you have to know it well.
Another suggestion could be to use snap or build from source

Done, check: https://github.com/zwave-js/zwave-js-ui/releases/tag/v8.6.1

I never noticed that you did it!
Thanks a lot


improve scalajs support

not exactly what it says on the tin, but let's land the node management code


Polyfill Intl in Chrome<=61 to avoid exceptions on Android

I launched a new project recently and added the Polyfill service to it. Great stuff folks! 👏
Here's the URL I use:
https://cdn.polyfill.io/v2/polyfill.min.js?features=Map,fetch,Intl.~locale.ru,Intl.~locale.en

After configuring Google Analytics to create an event from window.onerror, I began to register a flow of exceptions like this one:
ReferenceError: Intl is not defined
at r.compileArgument (https://example.com/_next/static/chunks/commons.45e204731d33a6ac0441.js:55:46099)
at r.compileMessage (https://example.com/_next/static/chunks/commons.45e204731d33a6ac0441.js:55:45470)
at r.compile (https://example.com/_next/static/chunks/commons.45e204731d33a6ac0441.js:55:45125)
at u._compilePattern (https://example.com/_next/static/chunks/commons.45e204731d33a6ac0441.js:55:43040)
...

Interestingly, the majority of such exceptions have come from Chrome on Android; the versions are 46, 53 and 61. A few more instances have been triggered by a more rarely used UC Browser, which I'm planning to handle by adding &unknown=polyfill to the URL.
Given that there is no such browser as chrome_mob in your library, I'm wondering if we could increase the maximum version of any Chrome for which Intl is polyfilled. I know that this would mean an increased bundle size for some Desktop Chrome users, however, the prevalence of each version ≤61 seems to be ≤0.1% (click on date relative). If this bump happens, a table with bundle sizes will need to be updated in the docs. It seems to focus on pretty old versions for the end of 2018 anyway.
Sorry in advance if the same issue has already been raised – I could not find it. Otherwise, I'm looking forward to hear what you folks think! 🙂

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.

👋 @JakeChampion WDYT?

Closing this pull-request as the code now lives at https://github.com/Financial-Times/polyfill-library.
Feel free to open an issue over there, we would need the full user-agent strings of the browsers which have this issue in order to figure out what the underlying problem is.


/facade/cart

why did you write a facade on the basket, if you didn’t write it down phpDoc,
For exaple check that class \Illuminate\Support\Facades\Cache
it turns out that autocomplete will work and everything will be cool, otherwise I don’t even understand where these methods come from, I had to go to your service provider and see what your facade refers to

You are very correct, this is my omission. I wrote this package for our developer community to use but forgot about this. I accept my shortcomings.
I will fill in these omissions in the source code. But in the present time, I am too busy to do it right now. In the meantime, please use the instructions page here.


Make 'else' optional, allow trailing ';'

When there's a trailing ; in a block, the type of that block's value will be inferred as undefined.

Codecov Report

Merging #122 (74e9c46) into main (e28f2aa) will increase coverage by 0.10%.
The diff coverage is 95.00%.

@@            Coverage Diff             @@
##             main     #122      +/-   ##
==========================================
+ Coverage   90.27%   90.38%   +0.10%
==========================================
  Files          29       29
  Lines        2664     2684      +20
==========================================
+ Hits         2405     2426      +21
+ Misses        259      258       -1

Impacted Files
Coverage Δ

src/ast/expr.rs
78.94% <ø> (+5.26%)
:arrow_up:

src/codegen/js.rs
83.33% <66.66%> (ø)

src/parser/expr.rs
99.45% <91.66%> (+0.01%)
:arrow_up:

src/infer/infer_expr.rs
99.20% <100.00%> (+0.04%)
:arrow_up:

tests/integration_test.rs
98.77% <100.00%> (+0.02%)
:arrow_up:

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 e28f2aa...74e9c46. Read the comment docs.


Integration of CmdStanPy api with dask

Hi all,
In the Stan weekly community meeting we were discussing a Dask like solution for CmdStan and it occurred to me that it might be worth integrating the api for CmdStanPy into Dask. I was wondering what it would take to do this and also what would be needed in terms of resources and also figuring out of how multi-threading or gpu computations would work in a local way or a distributed fashion on a cluster or cloud based service with regards to Dask and Stan. I'm also more than happy to work on this and also help others with this.
Thanks again,
-Brian

I was wondering what it would take to do this and also what would be needed in terms of resources and also figuring out of how multi-threading or gpu computations would work in a local way or a distributed fashion on a cluster or cloud based service with regards to Dask and Stan.

I've glanced at the CmdStanPy API, and see a lot of API around files. I suspect that will require some work (helped by the fact that the files are specific to each model?).
This might be an appropriate package for the new dask-contrib organization, the docs of which are being worked on in https://github.com/dask/dask/pull/7354.
cc @jrbourbeau

right, files are a big problem - happy to discuss possible DASK integrations

I moved this to here for now https://github.com/bparbhu/hpc-stan
I think this would be a good step in terms of what I think would need to be done.
https://github.com/bparbhu?tab=projects

Update I just started working on a prototype of what this would be here
https://github.com/bparbhu/hpc-stan
I've noticed that other stan users are using SLURM as a way to run a stan program on a cluster.
So far I'm using dask-jobque to make sure a Stan program can run on a variety of HPC cluster types using Dask.

Also work is underway with cloud-stan to address this
https://github.com/bparbhu/cloud-stan/tree/main


Simplify client building and installation instructions.

Hello there! :)
I'm just simplifying the building and installation instructions to what worked for me.
Let me know what you think!

Jenkins test this please

LGTM pending Jenkins (which should bump the codecov too)

@trishankatdatadog can you go back and add the signed off by line to the first of the two commits please.

done :)

Jenkins test this please

LGTM :)

Thanks @cyli! Do I need to do anything else here?

@trishankatdatadog Nope, this is great, thank you!


[ddc] <Object?>[] incorrectly classified as being List<Object>

bool top<T>() => <Object?>[] is List<T>;

void test<B>() {
  assert(!top<B>());
}

main() {
  test<Object>();
}

The assert fails on DDC. This is also triggered by the test added by https://dart-review.googlesource.com/c/sdk/+/320821

What test configuration did you discover this in? I'm not able to reproduce the assertion failure when running with sound null safety. I do see it failing when running with unsound null safety but that seems correct to me.

FWIW - the test passes in dart2js because the failure is within an assert and none of the dart2js configurations is enabling asserts today.


Revert "Add ChartDefaultURL to support different registries in testing"

Attempts to revert a PR to see if that fixes ongoing CI issues.

Closing, does not appear to solve the target issue.


WIP: Remove Receiver

Need to re-add:

ProjectorToProjectorVisitorTest
SortingProjectorTest
SimpleTopNProjectorTest
SortingTopNProjectorTest

Codecov Report

Merging #5092 into batch-iterator will increase coverage by 0.21%.
The diff coverage is 86.69%.

@@                 Coverage Diff                  @@
##             batch-iterator    #5092      +/-   ##
====================================================
+ Coverage             82.21%   82.43%   +0.21%
+ Complexity            11091    10989     -102
====================================================
  Files                  1343     1332      -11
  Lines                 45504    45000     -504
  Branches               5682     5647      -35
====================================================
- Hits                  37411    37095     -316
+ Misses                 5419     5250     -169
+ Partials               2674     2655      -19

Impacted Files
Coverage Δ
Complexity Δ

...ate/operation/projectors/IndexWriterProjector.java
81.81% <ø> (+6.81%)
4 <0> (-1)
:x:

...n/collect/collectors/CrateDocCollectorBuilder.java
100% <ø> (ø)
2 <0> (ø)
:x:

.../crate/operation/projectors/InputRowProjector.java
100% <ø> (+14.28%)
2 <0> (-3)
:x:

...src/main/java/io/crate/jobs/NestedLoopContext.java
57.14% <ø> (+0.62%)
6 <0> (ø)
:x:

...va/io/crate/operation/projectors/DMLProjector.java
100% <ø> (+35.29%)
4 <0> (ø)
:x:

...io/crate/operation/projectors/AggregationPipe.java
100% <ø> (+6.66%)
4 <0> (-5)
:x:

...ava/io/crate/operation/collect/CrateCollector.java
100% <ø> (ø)
0 <0> (ø)
:x:

...crate/operation/projectors/SysUpdateProjector.java
93.33% <ø> (+15.55%)
5 <0> (ø)
:x:

...rate/operation/projectors/FileWriterProjector.java
100% <ø> (+21.42%)
2 <0> (ø)
:x:

...in/java/io/crate/data/ListenableBatchIterator.java
100% <ø> (ø)
3 <0> (?)

... and 77 more

Continue to review full report at Codecov.

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


LIFX Mini Day & Dusk bulbs appear as coloured bulbs

I want to say thank you for the plugin you created. It saves me from having headaches with the official HomeKit version. I'm currently facing this minor nuisance with LIFX Mini Day & Dusk bulbs. Also, I have LIFX Smart Switch 4 Button and I don't think this switch should appear in the Homekit since none of the buttons are connected to dumb bulbs.
Describe The Bug:

Displaying RGB colour options in the accessory menu of LIFX Mini Day & Dusk bulb. This bulb has a huge warm-cool white range (1,500K-6,500K).
To Reproduce:

Open accessory menu normally
Expected behavior:

Should only display dimmer control and temperature colours, instead of RGB colours. As shown in the attached screenshot of the official HomeKit UI below.
Logs:
N/A

Plugin Config:
        {
            "name": "LIFX Plugin",
            "duration": 0,
            "brightnessDuration": 300,
            "colorDuration": 300,
            "broadcast": "<IP_ADDRESS>",
            "lightOfflineTolerance": 3,
            "messageHandlerTimeout": 45000,
            "resendPacketDelay": 150,
            "resendMaxTimes": 3,
            "debug": false,
            "autoDiscover": true,
            "platform": "LifxPlugin"
        },

Screenshots:

Environment:

Plugin Version: 0.1.14
Homebridge Version: 1.3.8
Node.js Version: 16.13.1
NPM Version: 8.1.2
Operating System: macOS Mojave

Hi L0T8,
I'm glad you like the plugin.
With your help I was able to make it even better. Your bulbs should be properly integrated into your HomeKit in the latest update.
Additionally I added the functionality to create exceptions for your LIFX accessories. You can now add the IP or serial number of your accessories under 'Excludes' in the settings. These devices will then be ignored by the plugin and automatically removed from your HomeKit.
Thanks again for this idea. Please let me know if everything works as you imagined.
Many greetings

Got all my Mini Day & Dusk bulbs working with the latest update. It's displaying the temperature colour options correctly.
Plus, I'm able to hide the LIFX Smart Switch using its serial number only. Thank you for releasing the fix!
Just letting you know, I also have LIFX GU10 bulbs that are working properly with this plugin. You can add "LIFX Mini Day & Dusk" and "LIFX GU10" to the list in readme.md :)


Verifies simulateRelay is enabled, Improved request validation, clearer error messages

Adds a method to the pocket provider, SimulateRelayIsEnabled and uses this to check that therelay endpoint is exposed and returns a 200 OK http response.  This method sends an OPTIONS request to the /v1/client/sim endpoint.
Also improves request validation and clarifies some error messages.
Fixes #11

Closing in favor of #28


ssl error makes logging not work when frozen

There is an issue with requests (and therefore also requests_futures) that if you freeze a python program, e.g. use py2exe or compile with nutika, the cacert.pem file is not found, which ends with an ssl error thrown.
If the HTTPSHandler class would take an argument verify that defaults to true, and is propagated to the call: session.post(self.url, data=payload, verify=verify, background_callback=bg_cb) then one could in the case of need for freezing could add the filepath to cacert.pem in the setup of the HTTPSHandler.
Not sure if this would work via args in an ini file (e.g. use of logging.config.Fileconfig) or if you would need to make the call from source code.

See https://github.com/psquickitjayant/loggly-python-handler#configuration change the loggly url from https to http. It will work.