Added prerender = false option to rendering-modes.mdx documentation

Description (required)
Added prerender = false to documentation to opt-out of pre-rendering in Hybrid mode.
Related issues & labels (optional)

marceloverdijk

Hi @marceloverdijk ! We do cover this content in detail on this page: https://docs.astro.build/en/guides/server-side-rendering/
For the Basics section, we really are just making the reader aware of the various output modes so they understand what they are and have a vocabulary going forward. We state that output: 'hybrid' is for mostly static sites with some on-demand routes without getting into more detail at this point. We link to the other page with code samples in the more complete guide for people who are actually ready to install an adapter and configure their pages.
So, this information is actually a little too specific for this introductory page, and we don't like to include things like exact usage/code snippets on multiple pages for maintenance: if something changes in actual usage, now we have multiple pages we have to update.
If you'd like to create an issue to discuss an improvement to this page, you are welcome to! That's often the best way to make sure that your ideas are "on the same page" ( :smile: ) as the docs team before you make a PR. But, this is not content to add to this page according to our overall docs structure/intentions, so I'll be closing this PR, but we hope to see you in docs again!

thx @sarah11918 I probably missed the other page.
Maybe good to only add the following then:
When using `hybrid` output mode, pages will still be pre-rendered by default. Top opt-out of pre-rendering add `export const prerender =  false` to any page or endpoint.

If so I can update the PR...

Hi! Like I said, you are welcome to open an issue to discuss problems with this page but it's not my intention to add this statement about specific code usage. If you'd like to describe problems with the page, an issue is the place for that!


Allow bucket to be overridden

This allows us to share code between dev and prod.

/retest

/lgtm


Cancel MediaOpened event if media file open failed

Fix #58

Hmm, seems there are more such strange thing in the code. Thanks.


Form is unresponsive on mobile views

Currently the form is extremely small on small screens as seen below.

This can be solved using media querys and responsive CSS, please assign this issue to me.

sure go for it


Using /  in the MaterialApp routes property.

Hey everybody!
I was working around named routes and I figured out this error when I use "/" in my routes name,
Here is my code:
import 'package:flash_chat/screens/welcome_screen.dart';
import 'package:flash_chat/screens/login_screen.dart';
import 'package:flash_chat/screens/registration_screen.dart';
import 'package:flash_chat/screens/chat_screen.dart';

void main() => runApp(FlashChat());

class FlashChat extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.dark().copyWith(
        textTheme: TextTheme(
          body1: TextStyle(color: Colors.black54),
        ),
      ),
      initialRoute: "/welcome",
      routes: {
        "/welcome": (context) => WelcomeScreen(),
        "/login": (context) => LoginScreen(),
        "/registration": (context) => RegistrationScreen(),
        "/chat": (context) => ChatScreen(),
      },
    );
  }
}

And here is the output:
I/flutter (32744): Could not navigate to initial route.
I/flutter (32744): The requested route name was: "/welcome"
I/flutter (32744): The following routes were therefore attempted:
I/flutter (32744):  * /
I/flutter (32744):  * /welcome
I/flutter (32744): This resulted in the following objects:
I/flutter (32744):  * null
I/flutter (32744):  * MaterialPageRoute<dynamic>(RouteSettings("/welcome", null), animation: null)
I/flutter (32744): One or more of those objects was null, and therefore the initial route specified will be ignored and
I/flutter (32744): "/" will be used instead.
I/flutter (32744): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter (32744): Another exception was thrown: Could not find a generator for route RouteSettings("/", null) in the _WidgetsAppState.

Now, as I realized, when you are using named routes that start with "/"(like "/welcome"), you need to have a route with the name "/".
I mean, the above code throws an error and won't work.
To fix it, you need to have a named route called "/", for your home screen or whatever.
Just keep in mind when you use / in your routes, flutter first checks that if there is any route called "/" in the routes or not, if there is, it works fine, but if it doesn't find it, it throws an error.
I'm asking @flutter team to mention this feature or problem in the documentation.
Thanks a lot and sorry about my English :D

Thanks a lot bringing this to our attention.

saved my day

Hi @officer47p,
I tried to replicate this issue on latest dev (1.20.0-0.0.pre) and didn't see the error.

code sample
void main() => runApp(Demo());

class Demo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Test',
      initialRoute: "/welcome",
      routes: {
        '/welcome': (context) => WelcomeScreen(),
        '/second': (context) => SecondHome(),
      },
    );
  }
}

class WelcomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home'),
      ),
      body: new Center(
        child: RaisedButton(
          onPressed: () {
            Navigator.pushNamed(context, '/second');
          },
          child: Text('Second Home'),
        ),
      ),
    );
  }
}

class SecondHome extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Second Home'),
      ),
      body: new Center(
        child: RaisedButton(
          onPressed: () {
            Navigator.pop(context);
          },
          child: Text('Go Back'),
        ),
      ),
    );
  }
}

log

Performing hot restart...
Syncing files to device SM A260G...
Restarted application in 2,190ms.
D/mali_winsys(18055): EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, egl_color_buffer_format *, EGLBoolean) returns 0x3000,  [540x960]-format:1
D/mali_winsys(18055): EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, egl_color_buffer_format *, EGLBoolean) returns 0x3000,  [540x888]-format:1
E/BpSurfaceComposerClient(18055): Failed to transact (-1)
E/BpSurfaceComposerClient(18055): Failed to transact (-1)
W/libEGL  (18055): EGLNativeWindowType 0xd12f2808 disconnect failed
W/libEGL  (18055): EGLNativeWindowType 0xd12f2008 disconnect failed

I didn't check if the api doc is updated yet, but atleast the error is gone :-)
Can you please confirm if you still experience this error on latest Flutter version (eg: dev, master) ?

Without additional information we are unfortunately not sure how to resolve this issue.
We are therefore reluctantly going to close this bug for now.
Please don't hesitate to comment on the bug if you have any more information for us; we will reopen it right away!
Thanks for your contribution.
Could everyone who still has this problem please file a new issue with the exact description of what happens, logs and the output of flutter doctor -v.
All system setups can be slightly different, so it's always better to open new issues and reference related issues.

Hey everybody!
I was working around named routes and I figured out this error when I use "/" in my routes name,
Here is my code:
import 'package:flash_chat/screens/welcome_screen.dart';
import 'package:flash_chat/screens/login_screen.dart';
import 'package:flash_chat/screens/registration_screen.dart';
import 'package:flash_chat/screens/chat_screen.dart';

void main() => runApp(FlashChat());

class FlashChat extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.dark().copyWith(
        textTheme: TextTheme(
          body1: TextStyle(color: Colors.black54),
        ),
      ),
      initialRoute: "/welcome",
      routes: {
        "/welcome": (context) => WelcomeScreen(),
        "/login": (context) => LoginScreen(),
        "/registration": (context) => RegistrationScreen(),
        "/chat": (context) => ChatScreen(),
      },
    );
  }
}

And here is the output:
I/flutter (32744): Could not navigate to initial route.
I/flutter (32744): The requested route name was: "/welcome"
I/flutter (32744): The following routes were therefore attempted:
I/flutter (32744):  * /
I/flutter (32744):  * /welcome
I/flutter (32744): This resulted in the following objects:
I/flutter (32744):  * null
I/flutter (32744):  * MaterialPageRoute<dynamic>(RouteSettings("/welcome", null), animation: null)
I/flutter (32744): One or more of those objects was null, and therefore the initial route specified will be ignored and
I/flutter (32744): "/" will be used instead.
I/flutter (32744): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter (32744): Another exception was thrown: Could not find a generator for route RouteSettings("/", null) in the _WidgetsAppState.

Now, as I realized, when you are using named routes that start with "/"(like "/welcome"), you need to have a route with the name "/".
I mean, the above code throws an error and won't work.
To fix it, you need to have a named route called "/", for your home screen or whatever.
Just keep in mind when you use / in your routes, flutter first checks that if there is any route called "/" in the routes or not, if there is, it works fine, but if it doesn't find it, it throws an error.
I'm asking @flutter team to mention this feature or problem in the documentation.
Thanks a lot and sorry about my English :D

Define "home" parameter and it will fix this "issue"
MaterialApp(
                ...
                  initialRoute: Constants.SPLASH,
                  home: const SizedBox.shrink(),
                ...


How to handle native sessions

I want to use php's native session management so I'm writing a small class to just use the PHPSESSID cookie sent from the browser and get the session information. I call and use it in this way but while testing I noticed all the connecting clients have the same id. I thought connections were unique ?
<?php
namespace my_project\helpers;
use Exception;

class session {

  // the id of the client session;
  private $id;

  // take a session Id and continue a session if empty createa new session
 public function __construct($PHPSESSID = ''){

 // if we have a valid session id containing letters and numbers then use it
// @note add check for weird characters later
if (strlen($PHPSESSID) > 5 && preg_match('/[A-Za-z]/', $PHPSESSID) && preg_match('/[0-9]/',$PHPSESSID)){
  session_id($PHPSESSID);
}

   @session_start();
  $this->id = session_id();
  session_write_close();
 }
}
?>

And I'm using it like this to start session when the client first connects in my handler
public function onOpen(ConnectionInterface $conn) {
    // Store the new connection to send messages to later
    $conn->session = new \my_project\helpers\session($conn->WebSocket->request->getCookie("PHPSESSID"));
    $this->clients->attach($conn);

    echo "New connection! ({$conn->resourceId})\n";
}

public function onMessage(ConnectionInterface $from, $msg) {
  var_dump($from->session);
}

All giving me the same id back when I send a message to the server. What should I attach my session object to  in order to make them unique to each connection

From the docs:

The SessionProvider will not work with any of the Native* session handlers

well. I want to use native sessions and so far as getting the information goes. it works and I have access to the session information. Could you please help me solve my problem at hand. I understand that you don't offer official support

Ok so I wrote a helper class to do this if anyone wants else is interested in something like this, which I highly suspect would be the case.
  class session {

    // the id of the client session;
    private $id;

    // take a session Id and continue a session if empty create a new session
    public function __construct($PHPSESSID = ''){

      // if we have a valid session id containing letters and numbers then use it
      // @note add check for weird characters later except
      if (strlen($PHPSESSID) > 5 && preg_match('/[A-Za-z]/', $PHPSESSID) && preg_match('/[0-9]/', $PHPSESSID)){
        session_id($PHPSESSID);
      } else{
        session_regenerate_id(); // so we get a new session id for the new user
      }

      @session_start();
      $this->id = session_id();
      unset($_SESSION); // so we cant attempt to use this directly
      session_write_close();
    }

    // return the value of a session variable or null
    public function get($var_name){
      session_id($this->id);
      @session_start();

      if(isset($_SESSION[$var_name])){
        $var =  $_SESSION[$var_name];
      } else{
        $var = NULL;
      }

      unset($_SESSION);
      session_write_close();

      return $var;
    }

    // set the value of a session variable
    public function set($var_name, $var_value){
      session_id($this->id);
      @session_start();

      $_SESSION[$var_name] = $var_value;

      unset($_SESSION);
      session_write_close();
    }

  }

And I use it like this
public function onOpen(ConnectionInterface $conn) {
    // Store the new connection to send messages to later
    $this->clients->attach($conn);

    // get and record the client's session info
    $conn->session = new session($conn->WebSocket->request->getCookie("PHPSESSID"));
    echo "The session id passed in was : ".$conn->WebSocket->request->getCookie("PHPSESSID")."\n";

    echo "New connection! ({$conn->resourceId})\n";
}

public function onMessage(ConnectionInterface $from, $msg) {
  foreach ($this->clients as $client) {
    if($from == $client){
      $client->session->set("recorded", "Yes we have recorded you");

      $client->send($client->session->get("recorded"));

      // test sessoin set from our main website
      if($client->session->get('id')){
          $client->send("hi. Your user ID is {$client->session->get('id')}");
      }
    }
  }
}

The problem from before was because the server is a single php script running it was reusing the same session id for each client whenever I did session start and that was fixed by asking it to generate a new one. Also because the use of the $_SESSION super global would be a bad thing due to single script and multiple potential clients I'v unset it

@cboden forgive my ignorance but only a implementer could truly know. But why did you choose not to implement native session ? I think enough people would want it. Also I suspect there may be some security hole in my code but I dont see any at the current time. Maybe if the socket were to send back the set-cookie headers to the client it may send all the cookie ids i'v generated  but I don't think web sockets do that?  Any security madness you can find there would be good to know. thanks

session_regenerate_id(); // so we get a new session id for the new user

That line of code sometimes refuses to work with error :
Warning: session_regenerate_id(): Cannot regenerate session id - headers already sent

I tested and this only happends after I completely close the broswer window. simply closing the connection on either end wont make the error happen. So i'm figuring sockets actually do send out header info when the browser window is closed ?
In order to make this secure against this. I need to replace that with something that gurantees me a new id gets generated or generate one myself with some other function. Any ideas ?

replaced
session_regenerate_id(); // so we get a new session id for the new user

in the session constructor with
session_id(bin2hex(openssl_random_pseudo_bytes(32)));

which I hear is even a bit more secure than what php was using by default to generate the session id's with session_generate_id and it still works with native php sessions and the calling code is still the same. so the full working code is.
class session {

  // the id of the client session;
  public $id;

  // take a session Id and continue a session if empty create a new session
  public function __construct($PHPSESSID = ''){

    // if we have a valid session id containing letters and numbers then use it
    // @note add check for weird characters later except
    if (strlen($PHPSESSID) > 5 && preg_match('/[A-Za-z]/', $PHPSESSID) && preg_match('/[0-9]/', $PHPSESSID)){
      session_id($PHPSESSID);
    } else{
      session_id(bin2hex(openssl_random_pseudo_bytes(32)));
    }

    @session_start();
    $this->id = session_id();
    unset($_SESSION); // so we cant attempt to use this directly
    session_write_close();
  }

  // return the value of a session variable or null
  public function get($var_name){
    session_id($this->id);
    @session_start();

    if(isset($_SESSION[$var_name])){
      $var =  $_SESSION[$var_name];
    } else{
      $var = NULL;
    }

    unset($_SESSION);
    session_write_close();

    return $var;
  }

  // set the value of a session variable
  public function set($var_name, $var_value){
    session_id($this->id);
    @session_start();

    $_SESSION[$var_name] = $var_value;

    unset($_SESSION);
    session_write_close();
  }

}

Really hope I helped somebody. And if any guru's come later on down the line and see any problems please let us know here.

@Alex-Nabu Native support wasn't implemented originally because of a technical limitation. I've looked at it on more than one occasion and couldn't overcome that limitation. I can't remember what it was now, it's been so long.

@Alex-Nabu  I don't know if it is too late but I decided to share my findings. I recently had the same need and it turned out to be quite an easy job if you implemented the SessionHandlerInterface. Please note that the standard SessionHandler class will not work, as it is not intended to be used this way, however you can create your own class implementing the interface which will make it really easy getting the encoded session data, decoding it is still a little hacky, because session_decode() puts the result in $_SESSION and doesn't provide an option to return, but still you don't need to call session_start() and suppress errors every time.

can u provide code examples of your sulotion i can't find my way here


Find Median from Data Stream

Add C++ code.

Please assign this issue to me

Please go through the contribution guidelines.


DO NOT MERGE Test upgrade to ion v1.0.0-rc

Test upgrade to ion-rs v1.0.0-rc to provide release candidate feedback.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Only blocker discovered so far is https://github.com/amazon-ion/ion-rust/issues/624


World of Warcraft 1.12 ground texture issue

After the black-screen issue was fixed for the WoW 1.12 client we get a bit further, and can see the ground textures seem to be missing in some areas (not all, some ground textures are there, for me it looked like flat surfaces are properly displayed, terrain not), see screenshot:

I've taken an apitrace (d3d9.dll from apitrace), I hope I did that one right (was the first trace I did). The performance shows it while doing the API trace, it's a lot better running without tracing ofc ;-).
Software information
World of Warcraft 1.12 Client
System information

GPU: AMD Radeon RX 460 Graphics
Driver: Mesa 19.0.6
Wine version: wine-4.12.1
D9VK version: 0.13 and and master (job run at 8ac70c03)

Apitrace file(s)
https://drive.google.com/file/d/1HksLSY1Z9Y6ZxqG5uGK3kkI0egWagtes/view?usp=sharing
Log files
d3d9.log:
info:  Game: WoW.exe
info:  DXVK: d9vk-0.13
warn:  OpenVR: Failed to locate module
info:  Enabled instance extensions:
info:    VK_KHR_get_physical_device_properties2
info:    VK_KHR_surface
info:    VK_KHR_win32_surface
info:  AMD RADV POLARIS11 (LLVM 7.0.0):
info:    Driver: 19.0.6
info:    Vulkan: 1.1.90
info:    Memory Heap[0]:
info:      Size: 3840 MiB
info:      Flags: 0x1
info:      Memory Type[0]: Property Flags = 0x1
info:    Memory Heap[1]:
info:      Size: 256 MiB
info:      Flags: 0x1
info:      Memory Type[2]: Property Flags = 0x7
info:    Memory Heap[2]:
info:      Size: 4096 MiB
info:      Flags: 0x0
info:      Memory Type[1]: Property Flags = 0x6
info:      Memory Type[3]: Property Flags = 0xe
info:  AMD RADV POLARIS11 (LLVM 7.0.0):
info:    Driver: 19.0.6
info:    Vulkan: 1.1.90
info:    Memory Heap[0]:
info:      Size: 3840 MiB
info:      Flags: 0x1
info:      Memory Type[0]: Property Flags = 0x1
info:    Memory Heap[1]:
info:      Size: 256 MiB
info:      Flags: 0x1
info:      Memory Type[2]: Property Flags = 0x7
info:    Memory Heap[2]:
info:      Size: 4096 MiB
info:      Flags: 0x0
info:      Memory Type[1]: Property Flags = 0x6
info:      Memory Type[3]: Property Flags = 0xe
info:  Process set as DPI aware
warn:  D3D9InterfaceEx::QueryInterface: Unknown interface query
warn:  02177241-69fc-400c-8ff1-93a44df6861d
info:  Enabled device extensions:
info:    VK_EXT_conditional_rendering
info:    VK_EXT_memory_priority
info:    VK_EXT_shader_viewport_index_layer
info:    VK_EXT_transform_feedback
info:    VK_EXT_vertex_attribute_divisor
info:    VK_KHR_dedicated_allocation
info:    VK_KHR_descriptor_update_template
info:    VK_KHR_draw_indirect_count
info:    VK_KHR_driver_properties
info:    VK_KHR_get_memory_requirements2
info:    VK_KHR_image_format_list
info:    VK_KHR_maintenance1
info:    VK_KHR_maintenance2
info:    VK_KHR_sampler_mirror_clamp_to_edge
info:    VK_KHR_shader_draw_parameters
info:    VK_KHR_swapchain
info:  DXVK: Read 12 valid state cache entries
info:  DXVK: Using 9 compiler threads
warn:  D3D9: VK_FORMAT_D24_UNORM_S8_UINT -> VK_FORMAT_D32_SFLOAT_S8_UINT
info:  D3D9DeviceEx::ResetEx:
  Requested Presentation Parameters
    - Width:              1920
    - Height:             1065
    - Format:             X8R8G8B8
    - Auto Depth Stencil: true
    - Windowed:           true

warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 9
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 16
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 37
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 38
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 136
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 142
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 154
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 155
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 158
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 161
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 166
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 172
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 173
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 178
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 179
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 182
info:  Presenter: Actual swap chain properties:
  Format:       VK_FORMAT_B8G8R8A8_UNORM
  Present mode: VK_PRESENT_MODE_IMMEDIATE_KHR
  Buffer size:  1920x1065
  Image count:  2
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 28
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 34
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 140
info:  D3D9DeviceEx::ResetEx:
  Requested Presentation Parameters
    - Width:              1920
    - Height:             1007
    - Format:             X8R8G8B8
    - Auto Depth Stencil: true
    - Windowed:           true

warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 143
warn:  D3D9DeviceEx::LightEnable: Stub
warn:  D3D9DeviceEx::SetLight: Stub
info:  Presenter: Actual swap chain properties:
  Format:       VK_FORMAT_B8G8R8A8_UNORM
  Present mode: VK_PRESENT_MODE_FIFO_KHR
  Buffer size:  1920x1007
  Image count:  3
info:  Game: WoW.exe
info:  DXVK: d9vk-0.13
warn:  OpenVR: Failed to locate module
info:  Enabled instance extensions:
info:    VK_KHR_get_physical_device_properties2
info:    VK_KHR_surface
info:    VK_KHR_win32_surface
info:  AMD RADV POLARIS11 (LLVM 7.0.0):
info:    Driver: 19.0.6
info:    Vulkan: 1.1.90
info:    Memory Heap[0]:
info:      Size: 3840 MiB
info:      Flags: 0x1
info:      Memory Type[0]: Property Flags = 0x1
info:    Memory Heap[1]:
info:      Size: 256 MiB
info:      Flags: 0x1
info:      Memory Type[2]: Property Flags = 0x7
info:    Memory Heap[2]:
info:      Size: 4096 MiB
info:      Flags: 0x0
info:      Memory Type[1]: Property Flags = 0x6
info:      Memory Type[3]: Property Flags = 0xe
info:  AMD RADV POLARIS11 (LLVM 7.0.0):
info:    Driver: 19.0.6
info:    Vulkan: 1.1.90
info:    Memory Heap[0]:
info:      Size: 3840 MiB
info:      Flags: 0x1
info:      Memory Type[0]: Property Flags = 0x1
info:    Memory Heap[1]:
info:      Size: 256 MiB
info:      Flags: 0x1
info:      Memory Type[2]: Property Flags = 0x7
info:    Memory Heap[2]:
info:      Size: 4096 MiB
info:      Flags: 0x0
info:      Memory Type[1]: Property Flags = 0x6
info:      Memory Type[3]: Property Flags = 0xe
info:  Process set as DPI aware
warn:  D3D9InterfaceEx::QueryInterface: Unknown interface query
warn:  02177241-69fc-400c-8ff1-93a44df6861d
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 36
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 29

Can you please try on a newer LLVM version and on latest master as of today. 7.0.0 is too old for D9VK to work properly.

Ok, switched to llvm 8 for testing purposes, which didn't make a difference. Will not play with my main system on llvm git master, for that I'll use a different install in case I bork it.
Will try to report back later today.

Okay, done that (commit was a bit earlier than "yesterday", it's 2 days ago actually).
That said, the result is the same with LLVM 9.0 (as of commit e9dc9c2bebb, current master fails building for me at the moment, didn't want to dig deeper on that yet):
Software information
World of Warcraft 1.12 Client
System information
GPU: AMD Radeon RX 460 Graphics
Driver: Mesa 19.2.0-devel (git-4e102a6de7)
Wine version: wine-4.11
D9VK version: 0.13 and and master (job run at 8ac70c0)
LLVM 9.0 (git-e9dc9c2bebb)

Screenshot

Apitrace file(s)
https://drive.google.com/file/d/1hN1Q6J-49TPh97qiG5n8HWtoW1fkP6rw/view?usp=sharing
Log files
info:  Game: WoW.exe
info:  DXVK: v1.2.3
warn:  OpenVR: Failed to locate module
info:  Enabled instance extensions:
info:    VK_KHR_get_physical_device_properties2
info:    VK_KHR_surface
info:    VK_KHR_win32_surface
info:  AMD RADV POLARIS11 (LLVM 9.0.0):
info:    Driver: 19.1.99
info:    Vulkan: 1.1.107
info:    Memory Heap[0]:
info:      Size: 3840 MiB
info:      Flags: 0x1
info:      Memory Type[0]: Property Flags = 0x1
info:    Memory Heap[1]:
info:      Size: 256 MiB
info:      Flags: 0x1
info:      Memory Type[2]: Property Flags = 0x7
info:    Memory Heap[2]:
info:      Size: 4096 MiB
info:      Flags: 0x0
info:      Memory Type[1]: Property Flags = 0x6
info:      Memory Type[3]: Property Flags = 0xe
info:  Process set as DPI aware
warn:  D3D9InterfaceEx::QueryInterface: Unknown interface query
warn:  02177241-69fc-400c-8ff1-93a44df6861d
info:  Enabled device extensions:
info:    VK_EXT_conditional_rendering
info:    VK_EXT_depth_clip_enable
info:    VK_EXT_host_query_reset
info:    VK_EXT_memory_priority
info:    VK_EXT_shader_viewport_index_layer
info:    VK_EXT_transform_feedback
info:    VK_EXT_vertex_attribute_divisor
info:    VK_KHR_dedicated_allocation
info:    VK_KHR_descriptor_update_template
info:    VK_KHR_draw_indirect_count
info:    VK_KHR_driver_properties
info:    VK_KHR_get_memory_requirements2
info:    VK_KHR_image_format_list
info:    VK_KHR_maintenance1
info:    VK_KHR_maintenance2
info:    VK_KHR_sampler_mirror_clamp_to_edge
info:    VK_KHR_shader_draw_parameters
info:    VK_KHR_swapchain
info:  DXVK: Read 12 valid state cache entries
info:  DXVK: Using 9 compiler threads
warn:  D3D9: VK_FORMAT_D24_UNORM_S8_UINT -> VK_FORMAT_D32_SFLOAT_S8_UINT
info:  D3D9DeviceEx::ResetEx:
  Requested Presentation Parameters
    - Width:              1920
    - Height:             1065
    - Format:             X8R8G8B8
    - Auto Depth Stencil: true
    - Windowed:           true

warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 9
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 16
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 37
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 38
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 136
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 142
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 154
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 155
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 158
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 161
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 166
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 172
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 173
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 178
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 179
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 182
info:  Presenter: Actual swap chain properties:
  Format:       VK_FORMAT_B8G8R8A8_UNORM
  Present mode: VK_PRESENT_MODE_IMMEDIATE_KHR
  Buffer size:  1920x1065
  Image count:  3
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 28
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 34
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 140
info:  D3D9DeviceEx::ResetEx:
  Requested Presentation Parameters
    - Width:              1920
    - Height:             1051
    - Format:             X8R8G8B8
    - Auto Depth Stencil: true
    - Windowed:           true

warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 143
warn:  D3D9DeviceEx::LightEnable: Stub
warn:  D3D9DeviceEx::SetLight: Stub
info:  Presenter: Actual swap chain properties:
  Format:       VK_FORMAT_B8G8R8A8_UNORM
  Present mode: VK_PRESENT_MODE_FIFO_KHR
  Buffer size:  1920x1051
  Image count:  4
info:  Game: WoW.exe
info:  DXVK: v1.2.3
warn:  OpenVR: Failed to locate module
info:  Enabled instance extensions:
info:    VK_KHR_get_physical_device_properties2
info:    VK_KHR_surface
info:    VK_KHR_win32_surface
info:  AMD RADV POLARIS11 (LLVM 9.0.0):
info:    Driver: 19.1.99
info:    Vulkan: 1.1.107
info:    Memory Heap[0]:
info:      Size: 3840 MiB
info:      Flags: 0x1
info:      Memory Type[0]: Property Flags = 0x1
info:    Memory Heap[1]:
info:      Size: 256 MiB
info:      Flags: 0x1
info:      Memory Type[2]: Property Flags = 0x7
info:    Memory Heap[2]:
info:      Size: 4096 MiB
info:      Flags: 0x0
info:      Memory Type[1]: Property Flags = 0x6
info:      Memory Type[3]: Property Flags = 0xe
info:  Process set as DPI aware
warn:  D3D9InterfaceEx::QueryInterface: Unknown interface query
warn:  02177241-69fc-400c-8ff1-93a44df6861d
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 36
warn:  D3D9DeviceEx::SetRenderState: Unhandled render state 29

Updating
Tested with LLVM10 (git-d8bdb9225ce) mesa (git-c37df5feaa2), and d9vk 0.13f (release).
Same issue.
APITrace
Took a new apitrace, not sure the last one got it right, I had some critical "lib natives" missing in the wine prefix, so re-uploaded hoping you have an easier time spotting the error. If not - not much trouble and sorry to disturb you.
https://drive.google.com/open?id=1keEuQbi-d9AX3eRlvS2vQWQdGDUI--15
Specs
Specs etc. stay the same. except for wine being 4.12.1 now and ofc llvm and mesa being newer versions.
Br, thanks and sorry for bothering, I think an updated issue is better than an orphan one ;-),
G

The trace is working fine on the latest master, can you please try it?
Get the latest build here: https://git.froggi.es/joshua/d9vk/-/jobs

Can confirm, works with e062d9f0. Thanks!

Side-Note, works on LLVM 8.0.0 and Mesa 19.0.6 too.

I'm not sure we can tell it's fixed yet, with d9vk ground texture are really too bright :
d9vk :

wined3d9 :

I judged that to be light/shader issues rather than texture issues and therefore a different issue. To my knowledge not all D3D9 light/shadow/shader functions are implemented yet.
In any case, I'd judge that issue to be a different one to ground textures missing.

no problem I'll make another ticket for this.

I implemented lighting a few moments ago.

Thanks Josh for the reply. I can confirm, lightning works as of 34b0e536 and looks good. Great work, thank you!

Interestingly I've an issue on the loading screen with just one of those characters. That looks a bit weird ...

Loading screen looks fine on the trace I have? Could you provide one showcasing that issue?

First of all, I'll provide what wine native shows, which is wrong too, sinces it misses the tabard with the heart:

But yes, it's a "bit" less dark.
Ofc I did an apitrace for you, LLVM 8 and still Mesa 19.0.6, if you require new versions let me know and I'll try to reproduce on my testing install.
API trace
https://drive.google.com/open?id=1OB6QzhA0-6F-RrRhr36RkprMrzeAlB9W

In this case we're trying to find that one, I'm reopening, even though, it's not the original issue.

yes it's still a bit too dark

@STiAT in my case with native it always matches windows coloring/lightning.

Should be fixed by
https://github.com/Joshua-Ashton/d9vk/commit/f637f64d28cf94a6647a49f518ef9138114b878e
Can you verify?

The login screen yes, but still a lot darker than native wine in game. And I get funny light-bulbs moving on the ground in d9vk when zooming in&out.
Specs still the same, but d9vk-f637f64.
API Trace (zooming in&out like on the screenshots)
https://drive.google.com/open?id=1Dykb3ApV6JKTfWQuOG97eURZNfU4KY8I
Screenshots

got the same lighting bulbs results here

I noticed distant clipping fog effects are not present

Should be better now, can you try again with latest master?

You got it ! lightning seems to match
d9vk

wined3d

The Last point are some missing reflection shaders ?  I suppose they are not part of this issue ?
d9vk

wined3d

Do I open another issue for this and the clipping fov ?

Sure, atlhough I don't know what those issues are

Hi,
That one certainly works, great work Josh, as always, I'm both, grateful and impressed how fast you got that one.
I think what @sigzegv actually means by "clipping issues" is rather a view distance/fog rendering issue. Can't be 100 % sure, but that's what I experience. Not sure that's even implemented yet API wise, nothing to do with ground textures or lighting for sure ;-).
API Trace
Sorry for wandering around like an idiot, but I have tremendous input lag when running in debug mode, my PC isn't the best and I wanted to show the clipping in/out (as you use the records for reproducing, sorry for the length/size :p).
https://drive.google.com/open?id=1blpFOEPSjxLHTWq9wPEJgyxi7d7VSxJ9
Screenshots
Wine

Wine with D9VK

Yeah there is no fixed func fog yet

Hey Josh,
that's what I thought. Separate issue on that one and you tag it once implemented so we can test it? Happy to open another one for that and finally close that one .. which got out of bounds anyway ;-).

For the reflection thing in Thunder Bluff, I'll get to that trying to reproduce this / apitrace that on Wednesday or Thursday, won't be able to get to that before that.

I've made one ticket for ground specular issue https://github.com/Joshua-Ashton/d9vk/issues/288


Add a render helper for downloads badges, run [amo ansible apm chromewebstore clojars conda crates docker dub eclipse gem githubdownloads]

We've got a quite a large number of download count related badges, and as I'm sure folks can imagine (and see in the diff), we've got a good deal of duplication around rendering concerns because we don't have a rendering helper like we do for others (e.g. version badges). In my opinion there's a lot of opportunity for encapsulation and reuse, both with our existing badges and to make things simpler for any future such badges
This PR both creates the render helper for download count badges, and includes the updates to the first batch of service classes to take advantage. Once the PR review app is up I'll post a comment that includes before/after badges between the review app and what we do today as an additional step to ensure there's no changes introduced.

AMO
https://shields-staging-pr-7163.herokuapp.com/amo/dw/dustman

https://img.shields.io/amo/dw/dustman

https://shields-staging-pr-7163.herokuapp.com/amo/dw/caleb-is-not-real

https://img.shields.io/amo/dw/caleb-is-not-real

https://shields-staging-pr-7163.herokuapp.com/amo/users/dustman

https://img.shields.io/amo/users/dustman

https://shields-staging-pr-7163.herokuapp.com/amo/users/caleb-is-not-real

https://img.shields.io/amo/users/caleb-is-not-real

Ansible
https://shields-staging-pr-7163.herokuapp.com/ansible/role/d/3078

https://img.shields.io/ansible/role/d/3078

https://shields-staging-pr-7163.herokuapp.com/ansible/role/d/caleb-is-not-real

https://img.shields.io/ansible/role/d/caleb-is-not-real

APM
https://shields-staging-pr-7163.herokuapp.com/apm/dm/vim-mode

https://img.shields.io/apm/dm/vim-mode

https://shields-staging-pr-7163.herokuapp.com/apm/dm/caleb-is-not-real

https://img.shields.io/apm/dm/caleb-is-not-real

Chrome Web Store
https://shields-staging-pr-7163.herokuapp.com/chrome-web-store/users/ogffaloegjglncjfehdfplabnoondfjo

https://img.shields.io/chrome-web-store/users/ogffaloegjglncjfehdfplabnoondfjo

https://shields-staging-pr-7163.herokuapp.com/chrome-web-store/users/caleb-is-not-real

https://img.shields.io/chrome-web-store/users/caleb-is-not-real

Clojars
https://shields-staging-pr-7163.herokuapp.com/clojars/dt/prismic

https://img.shields.io/clojars/dt/prismic

https://shields-staging-pr-7163.herokuapp.com/clojars/dt/caleb-is-not-real

https://img.shields.io/clojars/dt/caleb-is-not-real

Conda
https://shields-staging-pr-7163.herokuapp.com/conda/dn/conda-forge/python

https://img.shields.io/conda/dn/conda-forge/python

https://shields-staging-pr-7163.herokuapp.com/conda/d/conda-forge/python

https://img.shields.io/conda/d/conda-forge/python

https://shields-staging-pr-7163.herokuapp.com/conda/dn/conda-forge/caleb-is-not-real

https://img.shields.io/conda/dn/conda-forge/caleb-is-not-real

https://shields-staging-pr-7163.herokuapp.com/conda/d/conda-forge/caleb-is-not-real

https://img.shields.io/conda/d/conda-forge/caleb-is-not-real

Crates.io
https://shields-staging-pr-7163.herokuapp.com/crates/d/ripgrep

https://img.shields.io/crates/d/ripgrep

https://shields-staging-pr-7163.herokuapp.com/crates/dv/ripgrep

https://img.shields.io/crates/dv/ripgrep

https://shields-staging-pr-7163.herokuapp.com/crates/dv/ripgrep/12.1.1

https://img.shields.io/crates/dv/ripgrep/12.1.1

https://shields-staging-pr-7163.herokuapp.com/crates/dr/ripgrep

https://img.shields.io/crates/dr/ripgrep

https://shields-staging-pr-7163.herokuapp.com/crates/d/caleb-is-not-real

https://img.shields.io/crates/d/caleb-is-not-real

https://shields-staging-pr-7163.herokuapp.com/crates/dv/caleb-is-not-real

https://img.shields.io/crates/dv/caleb-is-not-real

https://shields-staging-pr-7163.herokuapp.com/crates/dv/caleb-is-not-real/12.1.1

https://img.shields.io/crates/dv/caleb-is-not-real/12.1.1

https://shields-staging-pr-7163.herokuapp.com/crates/dv/ripgrep/100.99.98

https://img.shields.io/crates/dv/ripgrep/100.99.98

https://shields-staging-pr-7163.herokuapp.com/crates/dr/caleb-is-not-real

https://img.shields.io/crates/dr/caleb-is-not-real

Docker
https://shields-staging-pr-7163.herokuapp.com/docker/pulls/_/ubuntu

https://img.shields.io/docker/pulls/_/ubuntu

https://shields-staging-pr-7163.herokuapp.com/docker/pulls/_/caleb-is-not-real

https://img.shields.io/docker/pulls/_/caleb-is-not-real

Dub
https://shields-staging-pr-7163.herokuapp.com/dub/dd/vibe-d

https://img.shields.io/dub/dd/vibe-d

https://shields-staging-pr-7163.herokuapp.com/dub/dd/dub/1.16.0

https://img.shields.io/dub/dd/dub/1.16.0

https://shields-staging-pr-7163.herokuapp.com/dub/dw/vibe-d

https://img.shields.io/dub/dw/vibe-d

https://shields-staging-pr-7163.herokuapp.com/dub/dw/vibe-d/0.9.4

https://img.shields.io/dub/dw/vibe-d/0.9.4

https://shields-staging-pr-7163.herokuapp.com/dub/dm/vibe-d

https://img.shields.io/dub/dm/vibe-d

https://shields-staging-pr-7163.herokuapp.com/dub/dm/vibe-d/0.9.4

https://img.shields.io/dub/dm/vibe-d/0.9.4

https://shields-staging-pr-7163.herokuapp.com/dub/dt/vibe-d

https://img.shields.io/dub/dt/vibe-d

https://shields-staging-pr-7163.herokuapp.com/dub/dt/vibe-d/0.9.4

https://img.shields.io/dub/dt/vibe-d/0.9.4


Added SSE support for Quaternion operations

Added SSE support for almost all operations involving quaternions (Inverse, NLerp, Normalize, Dot, DivF, MulF, Mul, Sub, Add). SLerp also mostly supports SSE now since it largely calls the other quaternion operations.
Benchmarks:

Optimization: O2
| Function    |     SSE         |      NO SSE      |
====================================================
| Inverse     |     163 (0.89s) |      165 (1.89s) |
| NLerp       |     330 (1.70s) |      330 (1.75s) |
| Normalize   |     169 (1.03s) |      169 (1.06s) |
| Dot         |     22  (1.15s) |      23  (1.14s) |
| DivF        |     23  (0.72s) |      23  (0.82s) |
| MulF        |     22  (0.75s) |      22  (0.79s) |
| Mul         |     24  (1.14s) |      23  (1.24s) |
| Sub         |     23  (1.17s) |      37  (1.20s) |
| Add         |     23  (1.20s) |      24  (1.19s) |

Where values are:  avg cycles spent in operation (avg total execution time in seconds)

Optimization: O0
| Function    |     SSE         |      NO SSE      |
====================================================
| Inverse     |     394 (1.62s) |      430 (3.05s) |
| NLerp       |     694 (2.71s) |      1035(4.81s) |
| Normalize   |     374 (1.58s) |      412 (2.95s) |
| Dot         |     81  (1.83s) |      23  (2.50s) |
| DivF        |     61  (1.12s) |      25  (2.37s) |
| MulF        |     58  (1.09s) |      23  (2.31s) |
| Mul         |     94  (1.97s) |      42  (2.88s) |
| Sub         |     75  (1.83s) |      23  (2.82s) |
| Add         |     75  (1.81s) |      23  (2.81s) |

Where values are: avg cycles spent in operation (avg total execution time in seconds)

Each benchmark was 10 executions of a test containing 10,000,000 operations.

Tests:
ScalarMath:
    Trigonometry: [PASS] (15/15 passed)
    ToRadians: [PASS] (3/3 passed)
    SquareRoot: [PASS] (1/1 passed)
    RSquareRootF: [PASS] (1/1 passed)
    Power: [PASS] (3/3 passed)
    PowerF: [PASS] (3/3 passed)
    Lerp: [PASS] (3/3 passed)
    Clamp: [PASS] (3/3 passed)
8/8 tests passed, 0 failures

Initialization:
    Vectors: [PASS] (148/148 passed)
    MatrixEmpty: [PASS] (32/32 passed)
    MatrixDiagonal: [PASS] (16/16 passed)
    Quaternion: [PASS] (12/12 passed)
4/4 tests passed, 0 failures

VectorOps:
    LengthSquared: [PASS] (6/6 passed)
    Length: [PASS] (6/6 passed)
    Normalize: [PASS] (24/24 passed)
    NormalizeZero: [PASS] (18/18 passed)
    FastNormalize: [PASS] (24/24 passed)
    FastNormalizeZero: [PASS] (18/18 passed)
    Cross: [PASS] (3/3 passed)
    DotVec2: [PASS] (2/2 passed)
    DotVec3: [PASS] (2/2 passed)
    DotVec4: [PASS] (2/2 passed)
10/10 tests passed, 0 failures

MatrixOps:
    Transpose: [PASS] (16/16 passed)
1/1 tests passed, 0 failures

QuaternionOps:
    Inverse: [PASS] (4/4 passed)
    Dot: [PASS] (2/2 passed)
    Normalize: [PASS] (8/8 passed)
    NLerp: [PASS] (4/4 passed)
    Slerp: [PASS] (4/4 passed)
    ToMat4: [PASS] (16/16 passed)
    FromAxisAngle: [PASS] (4/4 passed)
7/7 tests passed, 0 failures

Addition:
    Vec2: [PASS] (8/8 passed)
    Vec3: [PASS] (12/12 passed)
    Vec4: [PASS] (16/16 passed)
    Mat4: [PASS] (64/64 passed)
    Quaternion: [PASS] (16/16 passed)
5/5 tests passed, 0 failures

Subtraction:
    Vec2: [PASS] (8/8 passed)
    Vec3: [PASS] (12/12 passed)
    Vec4: [PASS] (16/16 passed)
    Mat4: [PASS] (64/64 passed)
    Quaternion: [PASS] (16/16 passed)
5/5 tests passed, 0 failures

Multiplication:
    Vec2Vec2: [PASS] (8/8 passed)
    Vec2Scalar: [PASS] (10/10 passed)
    Vec3Vec3: [PASS] (12/12 passed)
    Vec3Scalar: [PASS] (15/15 passed)
    Vec4Vec4: [PASS] (16/16 passed)
    Vec4Scalar: [PASS] (19/19 passed)
    Mat4Mat4: [PASS] (48/48 passed)
    Mat4Scalar: [PASS] (80/80 passed)
    Mat4Vec4: [PASS] (12/12 passed)
    QuaternionQuaternion: [PASS] (12/12 passed)
    QuaternionScalar: [PASS] (20/20 passed)
11/11 tests passed, 0 failures

Division:
    Vec2Vec2: [PASS] (8/8 passed)
    Vec2Scalar: [PASS] (8/8 passed)
    Vec3Vec3: [PASS] (12/12 passed)
    Vec3Scalar: [PASS] (12/12 passed)
    Vec4Vec4: [PASS] (16/16 passed)
    Vec4Scalar: [PASS] (16/16 passed)
    Mat4Scalar: [PASS] (64/64 passed)
    QuaternionScalar: [PASS] (16/16 passed)
8/8 tests passed, 0 failures

Equality:
    Vec2: [PASS] (6/6 passed)
    Vec3: [PASS] (6/6 passed)
    Vec4: [PASS] (6/6 passed)
3/3 tests passed, 0 failures

Projection:
    Orthographic: [PASS] (4/4 passed)
    Perspective: [PASS] (8/8 passed)
2/2 tests passed, 0 failures

Transformations:
    Translate: [PASS] (4/4 passed)
    Rotate: [PASS] (12/12 passed)
    Scale: [PASS] (4/4 passed)
    LookAt: [PASS] (16/16 passed)
4/4 tests passed, 0 failures

SSE:
    LinearCombine: [PASS] (16/16 passed)
1/1 tests passed, 0 failures

69/69 tests passed overall, 0 failures

Cool!

Talk about a well done PR! I’ll check this out tonight

I like this a lot, can't find any issues after doing a pass over this. @bvisness are you okay with me merging this in?

Travis isn't showing the results here for some reason but you can see here that it's working fine. I'm gonna merge this into another branch so we can write release notes and then I'll merge and make a release.
@AntonDan, thanks so much for your contribution!

No problem :)
I'm willing to do further optimizations if you ever add SSE3 support.


Multiple Debug Verbosity Levels

Logging needs to be standardized and configurable for multiple verbosity levels.
We should convert all console.log() statement to debug() using https://www.npmjs.com/package/debug

Do you think we should convert it to use service-logger instead?
https://github.com/giancarlocosta/service-logger

Man, who's the genius who wrote that bit of code? :)
We can move it over to our organization page, then merge it in.
@giancarlocosta, is service-logger published in public npm ?

Indeed: https://www.npmjs.com/package/service-logger

Perfect, didn't know it was already open-sourced


Removing prototyping as causing js error when dragging

Sorry, Further testing revealed a JS error on change

Never mind


fix: Replace maxage with cache option

This fixes a breaking change SvelteKit introduced in https://github.com/sveltejs/kit/issues/4549 where cache options have to be included inside a cache options object.

thank you!


[EVM] [ZetaChain] [aZETA] ZetaChain EVM-compatible L1 blockchain that connects everything

[EVM] [ZetaChain] [aZETA] ZetaChain EVM-compatible L1 blockchain that connects everything
All Information:

Chain specific information: https://www.zetachain.com/docs/reference/testnet/
Press Kit: https://drive.google.com/drive/u/0/folders/1wTq2OBSEoRmEvHnvVECl4icmRmENzBla

Version test: http://<IP_ADDRESS>:8900/s/Et7Q2Em4rfKsg2L
Validation passed in case:

Show token
Send token


WIP: VK_EXT_mesh_shader

I'm adding mesh shader support to MoltenVK together with @zmarlon based on https://github.com/Try/Spirv-Cross/tree/msl-mesh-shader .
At the moment, it is not very functional at all, only a basic triangle is rendering.

@billhollings Yes, that would be a nice idea!

@billhollings Yes, that would be a nice idea!

I've created a mesh-shader branch. Please redirect this PR to it.

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.1 out of 2 committers have signed the CLA.:white_check_mark: BeastLe9enD:x: zmarlonYou have signed the CLA already but the status is still pending? Let us recheck it.

Any update on this PR? This is amazing

@alexsch01 There are still a few things that need to be done to get the PR ready. For example, the properties and features structures still need to be filled, and it hasn't been extensively tested yet, for example the task shader implementation hasn't been tested apart from a simple dummy task shader. Also, we are still waiting for the pull request that implements MSL mesh shaders in Spirv-Cross to be merged. There are still problems here, as HLSL mesh shaders for example do not yet work at all with the Spirv-Cross version. In the meantime, if anyone wants to test their own mesh and task shaders, they are welcome to do so and feedback is always appreciated.

I have updated the branch. Could you reset the mesh-shader branch to the current main state? Then there would be no more merge conflicts and we could merge the part into the mesh_shader branch 🙂 @billhollings

Hope it's not rude to tag u another time @billhollings . If you haven't missed it by accident, just ignore it :)

Hope it's not rude to tag u another time

No worries. I do sometimes need reminding. 😉

Could you reset the mesh-shader branch to the current main state?

You should be able to do this yourself. That way you can fix any conflicts in a way that is compatible with your branch work, rather than have me try to arbitrate any conflicts.
Is there a reason why you need me to do it?

You should be able to do this yourself.
My plan was just to rebase KhronosGroup:mesh-shader to main and then merge my PR into the main, but I have no access to do so

Sorry...that was my bad. I was confusing the PR with the branch.
The mesh-shader branch is up to date now.

@billhollings can you change the head branch from ProjectKML:main zu ProjectKML:mesh_shader ? I can only change the base branch.

@billhollings can you change the head branch from ProjectKML:main zu ProjectKML:mesh_shader ? I can only change the base branch.

I'm not sure I understand what you are asking? Do you mean you have moved your forked and modified code from ProjectKML:main to ProjectKML:mesh_shader, and you want this PR to pull from ProjectKML:mesh_shader now?
If so, I can't find any way to do that. Let me know if you know of a way to do that.
BTW...it would be much better to update the 123 commits into the MoltenVK::mesh-shader branch via a separate PR that does just that, instead of combining it into this enhancement PR, otherwise we can't tell what's actually in this PR.
If you don't have permissions to do that, I can take care of it.

@billhollings

Do you mean you have moved your forked and modified code from ProjectKML:main to ProjectKML:mesh_shader

yep, thats what I mean. Unfortunately I cannot change it too, thats why I though maybe you have the permission to do. But if you cannot do it, it looks like github does not have the feature and I have to make a new pull request.

BTW...it would be much better to update the 123 commits into the MoltenVK::mesh-shader branch via a separate PR that does just that, instead of combining it into this enhancement PR, otherwise we can't tell what's actually in this PR.

yea good point, I have no permission so it would be nice if you do this :)

yea good point, I have no permission so it would be nice if you do this :)

Done.


nixos/generations-dir: Improve symlinking in /boot

Description of changes
boot.loader.generationsDir is a simple "boot loader" that creates a directory structure in /boot with symlinks to kernel, initrd, init, and system. This is ideal for some boot loaders (e.g. old or anemic builds of U-Boot) that don't otherwise support a menu of system profiles at boot.

f7ccb384323830c3af2b7032b6558a46f4cacc0c fixes an issue where those symlinks are broken when /boot has its own partition.
15d56abf52a9a404c97744fc25b917f1ce72e243 makes it easier to change the default boot profile by re-pointing the default symlink.
9ee1a4b60994514fff2538dc8c6840b232835674 adds an option to suppress the redundant copying of kernel, initrd and init files.
69cdd9fb5e9632f88a8aff5788b03fb7cccc600a changes the default for that option to false.

I tested this on an armv7l-linux system which has a U-Boot build from 2011 that lacks support for extlinux.conf. In particular, I tested that:

U-Boot can follow the double symlinks for the default profile.
NixOS cleanly updates /boot when upgrading to this branch.

Things done

Built on platform(s)

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

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

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

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

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

[x] Fits CONTRIBUTING.md.

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

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

Rebased and updated the stateVersion check. Still looking for a review/merge.

Please wait some days so that I have time to review this properly.

@RaitoBezarius Have you had a chance to look this over? Anything that can be improved? Thanks.

This pull request has been mentioned on NixOS Discourse. There might be relevant details there:
https://discourse.nixos.org/t/prs-in-distress/3604/70

It slipped my mind… I will review it ASAP.

Rebased on latest master.
Removed mdDoc usages.

I'm planning on merging this after retesting it later today. Any objections, please speak now.

This is not how stateVersion is meant to be used.

nixos/README.md says:

Ensure that option changes are backward compatible.
...
Use lib.versionAtLeast config.system.stateVersion "24.05" on backward incompatible changes which may corrupt, change or update the state stored on existing setups.

I get that "state" was meant for handling things like Postgres upgrades, but there are plenty of stateVersion checks in nixpkgs that are using it to change a default option value without breaking existing users.
Since this change could break boot, we shouldn't quietly change behavior on users. But the existing behavior is not a good default.
If not stateVersion, then what would you suggest?

I'm planning on merging this after retesting it later today. Any objections, please speak now.

 This is my personal best example of PRs that get nitpicked and delayed. stateVersion went stale three times. But the core change is good, right?
I would remove the stateVersion change to unstick things, but we need @K900 to unblock it in any case, so I think we need an answer first.

Keep the old behavior, add a warning that it's deprecated, drop it entirely next release?

Rebased on latest master.
Dropped the last commit (with the stateVersion check) for now.


APIGateway v1alpha1 proposal

Description
Create document (docs/contributor) that will describe proposed API to configure api-gateway manager. Responsibility of api-gateway manager will be:

installation of api-gateway controller that manages APIRule CRD
managing of gateway(s) - default kyma-gateway and in the future other gateways too
managing certificates for above gateways
managing domains for istio ingress gateway IP (including default kyma domain)
installation of ORY oathkeeper (this component will not be a part of api-gateway in the future)
Since ORY Hydra is deprecated and will be removed from Kyma in version 2.19, Hydra should not be a part of API proposal nor implementation.

Take into consideration api-gateway profile settings and overrides created for managed Kyma.
At this moment default Kyma domain is set up by Istio operator by annotating Istio ingress gateway service with gardener specific annotations. This responsibility will be passed to api-gateway module. instead of annotating ingress gateway service DNSEntry should be created. Users should be able to specify their domains for DNSEntry.
api-gateway module has strong dependency to Istio, Gardener DNS management and Gardener Certificates management.
ACs:

[ ] APIGateway v1alpha1 proposal documented: spec and status
[ ] proposal approved by @kyma-project/goat
[ ] proposal approved by @pbochynski

Decision needed:

[ ] should we expose ORY oathkeeper configuration

Reasons

DoD:

[ ] provide documentation
- [ ] release notes and What's New updates for Kyma customers
- [ ] provide unit tests
- [ ] provide integration tests
- [ ] test on production-like environment
- [ ] verify resource limits
- [ ] followup issue
- [ ] create release and bump in kyma
- [ ] PR reviewer will verify code coverage and evaluate if it is acceptable

Attachments
https://github.com/kyma-project/istio/blob/main/docs/contributor/04-20-xff-proposal.md

Oathkeeper will be removed soon and can be already replaced by istio/envoy so I would not expose it to the user.


TWAI has no defaults for 26 Mhz XTAL (like the popular LoRa32), probably showstopper for many (IDFGH-12293)

Answers checklist.

[X] I have read the documentation ESP-IDF Programming Guide and the issue is not addressed there.
[X] I have updated my IDF branch (master or release) to the latest version and checked that the issue is present there.
[X] I have searched the issue tracker for a similar issue and not found a similar issue.

General issue report
Hi Espressif!
If I twai (hehe) to get TWAI working on the LoRa32 it fails to build since there is no section for XTAL in xtal_types.h for this 26 Mhz XTALs.
As these values are at least beyond me to (properly) figure out, it is probably a show stopper for most with similar boards, thus it would be appreciated if someone calculated some defaults for 26Mhz XTALs and posted here, or better, added to xtal_types.h.
Thanks!

twai (hehe)

hehe

@nicklasb  Thank you for report! I'll update later :+1:

@nicklasb Thank you for report! I'll update later 👍

I guess forgot to ask what "later" meant. :-)
(note that awaiting inclusion in the actual source I will gladly try out any settings you may propose here)

@nicklasb Sorry for late reply, But due to integer divider limitation, just littile of macros are available for 26M xtal, and don't have a  test because lack this board, you can have a try first.
#if CONFIG_XTAL_FREQ == 26   // TWAI_CLK_SRC_XTAL = 26M
#define TWAI_TIMING_CONFIG_25KBITS()    {.clk_src = TWAI_CLK_SRC_DEFAULT, .quanta_resolution_hz = 400000, .brp = 0, .tseg_1 = 11, .tseg_2 = 4, .sjw = 3, .triple_sampling = false}
#define TWAI_TIMING_CONFIG_50KBITS()    {.clk_src = TWAI_CLK_SRC_DEFAULT, .quanta_resolution_hz = 1000000, .brp = 0, .tseg_1 = 15, .tseg_2 = 4, .sjw = 3, .triple_sampling = false}
#define TWAI_TIMING_CONFIG_100KBITS()   {.clk_src = TWAI_CLK_SRC_DEFAULT, .quanta_resolution_hz = 1000000, .brp = 0, .tseg_1 = 6, .tseg_2 = 3, .sjw = 3, .triple_sampling = false}
#define TWAI_TIMING_CONFIG_125KBITS()   {.clk_src = TWAI_CLK_SRC_DEFAULT, .quanta_resolution_hz = 1000000, .brp = 0, .tseg_1 = 5, .tseg_2 = 2, .sjw = 1, .triple_sampling = false}
#define TWAI_TIMING_CONFIG_250KBITS()   {.clk_src = TWAI_CLK_SRC_DEFAULT, .quanta_resolution_hz = 1000000, .brp = 0, .tseg_1 = 2, .tseg_2 = 1, .sjw = 1, .triple_sampling = false}
#define TWAI_TIMING_CONFIG_1MBITS()     {.clk_src = TWAI_CLK_SRC_DEFAULT, .quanta_resolution_hz = 13000000, .brp = 0, .tseg_1 = 8, .tseg_2 = 4, .sjw = 3, .triple_sampling = false}
#endif

Great! Will try right away!

On the TWAI_TIMING_CONFIG_1MBITS i am getting ESP_ERR_INVALID_ARG when calling twai_driver_install, so that seems to be a bit off.
I am getting further with TWAI_TIMING_CONFIG_250KBITS, at least then it starts and seems to send something that my logic analyzer (set to 250 KBits/s) picks up and can parse, but the other ESP32 that is a 40 Mhz XTAL (and can talk to a T-Beam) doesn't seem to react or interact much with it.

@nicklasb  I realized my mistake, On esp32 it depend on NOT XTAL freq but TWAI_CLK_SRC_DEFAULT, they are different on ESP32,,So for the correction, just replace block in twai_types.h as follow:
#if APB_CLK_FREQ == (32*1000000)   // TWAI_CLK_SRC_DEFAULT = 32M
#define TWAI_TIMING_CONFIG_25KBITS()    {.clk_src = TWAI_CLK_SRC_DEFAULT, .quanta_resolution_hz = 400000, .brp = 0, .tseg_1 = 11, .tseg_2 = 4, .sjw = 3, .triple_sampling = false}
#define TWAI_TIMING_CONFIG_50KBITS()    {.clk_src = TWAI_CLK_SRC_DEFAULT, .quanta_resolution_hz = 1000000, .brp = 0, .tseg_1 = 15, .tseg_2 = 4, .sjw = 3, .triple_sampling = false}
#define TWAI_TIMING_CONFIG_100KBITS()   {.clk_src = TWAI_CLK_SRC_DEFAULT, .quanta_resolution_hz = 2000000, .brp = 0, .tseg_1 = 15, .tseg_2 = 4, .sjw = 3, .triple_sampling = false}
#define TWAI_TIMING_CONFIG_125KBITS()   {.clk_src = TWAI_CLK_SRC_DEFAULT, .quanta_resolution_hz = 4000000, .brp = 0, .tseg_1 = 23, .tseg_2 = 8, .sjw = 3, .triple_sampling = false}
#define TWAI_TIMING_CONFIG_250KBITS()   {.clk_src = TWAI_CLK_SRC_DEFAULT, .quanta_resolution_hz = 4000000, .brp = 0, .tseg_1 = 11, .tseg_2 = 4, .sjw = 3, .triple_sampling = false}
#define TWAI_TIMING_CONFIG_500KBITS()   {.clk_src = TWAI_CLK_SRC_DEFAULT, .quanta_resolution_hz = 8000000, .brp = 0, .tseg_1 = 11, .tseg_2 = 4, .sjw = 3, .triple_sampling = false}
#define TWAI_TIMING_CONFIG_800KBITS()   {.clk_src = TWAI_CLK_SRC_DEFAULT, .quanta_resolution_hz = 16000000, .brp = 0, .tseg_1 = 15, .tseg_2 = 4, .sjw = 3, .triple_sampling = false}
#define TWAI_TIMING_CONFIG_1MBITS()     {.clk_src = TWAI_CLK_SRC_DEFAULT, .quanta_resolution_hz = 16000000, .brp = 0, .tseg_1 = 11, .tseg_2 = 4, .sjw = 3, .triple_sampling = false}

#elif APB_CLK_FREQ == (80*1000000)   // TWAI_CLK_SRC_DEFAULT = 80M
#define TWAI_TIMING_CONFIG_25KBITS()    {.clk_src = TWAI_CLK_SRC_DEFAULT, .quanta_resolution_hz = 625000, .brp = 0, .tseg_1 = 16, .tseg_2 = 8, .sjw = 3, .triple_sampling = false}
#define TWAI_TIMING_CONFIG_50KBITS()    {.clk_src = TWAI_CLK_SRC_DEFAULT, .quanta_resolution_hz = 1000000, .brp = 0, .tseg_1 = 15, .tseg_2 = 4, .sjw = 3, .triple_sampling = false}
#define TWAI_TIMING_CONFIG_100KBITS()   {.clk_src = TWAI_CLK_SRC_DEFAULT, .quanta_resolution_hz = 2000000, .brp = 0, .tseg_1 = 15, .tseg_2 = 4, .sjw = 3, .triple_sampling = false}
#define TWAI_TIMING_CONFIG_125KBITS()   {.clk_src = TWAI_CLK_SRC_DEFAULT, .quanta_resolution_hz = 2500000, .brp = 0, .tseg_1 = 15, .tseg_2 = 4, .sjw = 3, .triple_sampling = false}
#define TWAI_TIMING_CONFIG_250KBITS()   {.clk_src = TWAI_CLK_SRC_DEFAULT, .quanta_resolution_hz = 5000000, .brp = 0, .tseg_1 = 15, .tseg_2 = 4, .sjw = 3, .triple_sampling = false}
#define TWAI_TIMING_CONFIG_500KBITS()   {.clk_src = TWAI_CLK_SRC_DEFAULT, .quanta_resolution_hz = 10000000, .brp = 0, .tseg_1 = 15, .tseg_2 = 4, .sjw = 3, .triple_sampling = false}
#define TWAI_TIMING_CONFIG_800KBITS()   {.clk_src = TWAI_CLK_SRC_DEFAULT, .quanta_resolution_hz = 20000000, .brp = 0, .tseg_1 = 16, .tseg_2 = 8, .sjw = 3, .triple_sampling = false}
#define TWAI_TIMING_CONFIG_1MBITS()     {.clk_src = TWAI_CLK_SRC_DEFAULT, .quanta_resolution_hz = 20000000, .brp = 0, .tseg_1 = 15, .tseg_2 = 4, .sjw = 3, .triple_sampling = false}
#endif  //APB_CLK_FREQ

Hi!
Nice! Those settings worked for 250 KBits/s and 1 MBits at least!
I did not try any of the other speed, if you want me too, I can walk through them at a later time, I don't have time to sit through 7 more rebuilds right now.
I didn't add it to twai_types.h as then idf.py will refuse to build it (because of https://github.com/espressif/idf-component-manager/issues/40#issuecomment-1897929443 , yeah, that is me being annoyed there. :-) ) and I'd rather do it so that I know the dependencies works.
But I just added it above the code, and that worked. I would assume it would work wherever you put it. It also worked with the DevKit v5 i used as a test peer.
So if understand it correctly, the above code would be able to replace all the default code in twai_types and work for all boards? It would basically always be better to go by APB_CLK_FREQ?

I am also noting that the low-speed configs are not available, is this intentional?

@nicklasb
Yeah, this way is work for all boards and more correct than using APB_CLK_FREQ
For speed lower than 25K, it is available for ESP32-ECO2 and later other chips

@nicklasb My bad, but a bit different, in one word, for esp32 APB is more correct then XTAL
I update the comment above, now should be full correct

@nicklasb Hi, If no problem, can you close this issue?


Make cloudpickle truly optional

Remove dependency on cloudpickle for dask.bag, dask.dataframe, and dask.multiprocessing
Let all tests run successfully if cloudpickle is not installed
State optional dependency to PyYAML; allow running tests successfully if it's not installed
Document gotchas in dask.delayed and dask.bag when cloudpickle is not installed
Unit tests for #3369
Add a new CI tests suite with a reduced dependencies list

Out of scope: Tests for when numpy, pandas, toolz, partd, and/or fsspec are not installed. This is left for another PR as the current one is already fairly large.

Ready for review

@crusaderky thanks for the PR -- I'm curious, was there something motivating this PR ?

@quasiben several reasons.
The whole thing was initiated by https://github.com/pydata/xarray/issues/3401. I introduced a regression in xarray because it is unfeasible to have the use case of dask and no cloudpickle covered by CI. To cover such kind of edge case configurations, one would need to write one test environment for every point of the cartesian product of all possible dask optional dependencies being available or missing, and that's just not reasonable.
dask.multiprocessing being reliant on cloudpickle is counter-intuitive, because e.g. concurrent.futures.ProcessPoolExecutor doesn't need it. So I made it more sensible.
The second reason is that, as a general thing, marking dependencies as optional and then having no CI coverage for when they're missing is guaranteed to break things. I didn't test what happens when you don't have numpy/pandas installed but I expect nothing good (that's for a subsequent PR).
It does not help that 90% of pypi users won't read the dask manual and instead they'll just run pip install dask.
The third and final reason is that I'm trying to make a docker image of the dask.distributed scheduler of a reasonable size. At the moment, it takes 300+ MB because of numpy. Sure, creating a blank virtualenv and just writing pip install distributed works, on paper, but it's also 100% untested. Again, numpy and pandas are next in line to receive treatment similar to this PR.

Will this break user code that relied used lambdas and relied on pip install dask[multiprocessing] to install cloudpickle?

@TomAugspurger There's no such thing as dask[multiprocessing]. It will however break things for people who installed dask[bag] and used lambdas and didn't install cloudpickle through other means. Same for dask[dataframe] users on dask distributed.
Notably, users of dask[delayed], who are the other obvious big use case for using the multiprocessing scheduler, never had the dependency listed.
Would a warning in the changelog be sufficient? Otherwise we could revert the change to setup.py and reintroduce it in time for the next major release?
In complete fairness, I am in principle against making these trivial dependencies optional. Trivial here is any package whose whole dependency tree is small in size, is pure python, and causes no version conflicts). If it were for me, I'd go the opposite way and make cloudpickle, toolz, partd, and fsspec mandatory, and only have switches for (1) numpy+pandas (no numpy alone) and (2) distributed. That would already produce 5 possible combinations which are already a handful but have objectively added value.

Sorry, I meant dask[bag].
This is a bit of any API grey zone, but I don’t like the thought of just breaking that usecase.

On Oct 21, 2019, at 18:49, crusaderky<EMAIL_ADDRESS>wrote:

@TomAugspurger There's no such thing as dask[multiprocessing]. It will however break things for people who installed dask[bag] and used lambdas and didn't install cloudpickle through other means. Same for dask[dataframe] users on dask distributed.
Notably, users of dask[delayed], who are the other obvious big use case for using the multiprocessing scheduler, never had the dependency listed.
Would a warning in the changelog be sufficient? Otherwise we could revert the change to setup.py and reintroduce it in time for the next major release?
In complete fairness, I am in principle against making these trivial dependencies optional. Trivial here is any package whose whole dependency tree is small in size, is pure python, and causes no version conflicts). If it were for me, I'd go the opposite way and make cloudpickle, toolz, partd, and fsspec mandatory, and only have switches for (1) numpy+pandas (no numpy alone) and (2) distributed. That would already produce 5 possible combinations which are already a handful but have objectively added value.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.

@TomAugspurger what if multiprocessing printed out a suggestion to install cloudpickle when pickle fails?

Mmm that would need to be discussed with the larger group. I'm having trouble gauging how large a change this is. As you say, we can give a clear error message upon failure, and the steps the user would take a relatively small.
cc @mrocklin and @jcrist for thoughts.

Right now, I'm personally not comfortable with removing the dependency on cloudpickle for dask[bag] and dask[dataframe].
I think it does make sense to add it as a dependency for dask[delayed], which would hopefully solve the original issue?

I think it does make sense to add it as a dependency for dask[delayed], which would hopefully solve the original issue?

Yeah, cloudpickle is needed for any realistic use of dask in a multiprocessing context. It's also used for tokenizing any unpickleable user-provided functions, which occur not only when using lambdas but also when defined in an interactive session (e.g. notebook) (if cloudpickle is not found, we fall back to a uuid for hashing these).
Would making dask.multiprocessing importable without cloudpickle, with a runtime error on use if uninstalled be a viable solution? I'm also fine with making delayed depend on cloudpickle as @TomAugspurger suggested.

I think that there are two parts to this PR:

Making it so that none of our code depends on functions that require cloudpickle
A policy change about dependencies

I think that 1 is probably good to have regardless (dynamic functions are somewhat expensive to move) and that we might consider merging that in if @crusaderky feels like separating it out.

I have no strong thoughts on 2

Any updates on this?

Now running with the two new test suites disabled. Once I get a green light, I'll add "test-mindeps" to the PR description and re-trigger it to demonstrate they work as intended.

Before the dummy commit with message 'test-mindeps':
https://travis-ci.org/dask/dask/builds/608491156?utm_medium=notification&utm_source=github_status
After the dummy commit:
https://travis-ci.org/dask/dask/builds/608642075?utm_medium=notification&utm_source=github_status
@mrocklin ready for any additional comments or merge.

Thanks @crusaderky .  What is here makes sense to me.  Thank you for your engagement and understanding during the review process.
I left one final comment about the error message.  But other than that things look nice to me.  Thank you for your attention to detaili here.

Thanks @crusaderky !  This is in.

Thank you!


Use the as yet unpublished v0.1.5 of the systemstat crate

The systemstat crate failed to compile under 32-bit MacOS and 32-bit FreeBSD, which is fixed by myfreeweb/systemstat#57 in the upcoming v0.1.5.

While the polling fallback implementation of the notify crate still prevents the build from finishing on FreeBSD, that seems to be the last roadblock in the way of achieving full cross-platform compatibility now.

Nice, thanks!


Add deque best practices to our ruleset 🍖

✍ Description
Add the deque best practice rule set to our a11y tests.

https://dequeuniversity.com/rules/axe/4.8/#best-practices-rules

Yay, it failed! Because we are violated the "no content outside of regions" rule. So we need to get the "Go back links" into a region for the tests to pass.

Yes! The go back region issue is fixed!
There are now 2 a11y tests failing. Look like there are two screens that do not have an h1. This is an issue with screen readers. I'll add a fix to the PR today.


Show users current position

It would be nice to be able to show the users current position, like this:

				showsUserLocation={true}
				showsMyLocationButton={true}

@simplenotezy showsUserLocation not working in Android


Need an opinion on possible solutions when dealing with files not informing their content type in C++

VSCode Version: Code 1.12.2
OS Version: Debian Jessie
Extensions:

Extension
Author
Version

cpptools
ms-vscode
0.11.2

Steps to Reproduce:
Working on C++ projects, new entries are generated in files.associations just because I navigated to a file that do not inform vscode about its content type (no extension, etc.). But, settings.json is a file meant to be tracked by the VCS. I am currently being forced to .gitignore this file to not be bothered by new entries appearing regularly.
Example of file: iostream

Of course, I asked about this situation on vscode-cpptools first (Microsoft/vscode-cpptools#722) where I got the following answer:
"Our tool automatically adds a c/cpp to file.associations whenever the a C/C++ file with an extensionless or non-standard file extension is navigated to via a source file -- this enables the header file to be treated as C/C++ for colorization and other features (otherwise, it opens as a text file). The only mechanism VS Code provides for enabling this scenario is updating the files.associations setting, which is stored in the settings.json, and there's no mechanism for storing other settings elsewhere. If you have a proposed alternative design, it would probably have to be implemented in VS Code itself (https://github.com/Microsoft/vscode/issues ). One potential solution is for the openTextDocument called internally by VS on a Go To Definition to automatically supply the languageID of the source file. We could also add a setting to turn off this behavior or you could modify the /out/src/C_Cpp.js yourself to replace code con.update("associations", assoc); with ; (and/or add a script to do the replacement for when the file is overwritten by an update)." @sean-mcmanus Microsoft/vscode-cpptools#722
Thank you @sean-mcmanus

It feels like a solution to this problem could involve a vscode enhancement / feature. We would be pleased to have your opinion on that. :)

This is a perfect case for Non-shareable workspace settings.

This is a perfect case for Non-shareable workspace settings.

Does an issue for this exist? Something like a .vscode/local_settings.json file.

@jhasse I think this is the issue.

I would add that the current behavior is not "natural" as if I add a wildcard entry like "*.c": "c" I would expect no other entry will be automatically added to the list that results in a "example.c": "cpp" entry (Which is the actual default). Is that assumption correct? I even tried "**/*.c": "c" with same effect.

@AntonyMCs The issue you describe is a short coming of our extension's implementation, which doesn't check for pre-existing patterns when it adds new file associations. You can file an issue at https://github.com/Microsoft/vscode-cpptools/issues/ , but doing something more complicated is not currently high on our priority, although you might be able to view/modify our javascript yourself. Let me know if you have a repro for .c files incorrectly being associated with "cpp". "*.c": "c" is already the default we use (unless there's a bug).

@sean-mcmanus Actually there where c files added as c because I added both .c and .h without realizing that c files are already defaulted to "c". So, the wierd case, is because I assigne h files to "cpp", I like to have a different icon for c and h files, and regarding language there is no difference.
The result I get is:
"files.associations": {
                ...,
                "*.dependencies": "cmake",
                "**/*.h": "cpp",
                "mock.h": "c",
                "bio.h": "c",
                "comp.h": "c",
                "conf.h": "c",
                ...

So aside a possible "fix" on the way the extension behaves to prevent adding entries when there is a rule already covering them, Is there a way to set the icon for a given extension without the trick I'm trying?

If the .h file is not actually a c file, that could cause problems with our language server (i.e. you could get IntelliSense errors and things like __cplusplus will be defined). I agree that .h files should have a different icon from .c/cpp files (like what VS 2017 does). I'll file a feature request on VS Code to somehow enable that. Using "**/*.h": "cpp" to get a different icon for .h files is not recommended; however, you can modify your out/src/LanguageServer/C_Cpp.js in the addFileAssociations function by adding after line        if (!(file in assoc)) {            lines if (file.endsWith(".h") && "**/*.h" in assoc)                 continue;
We might add more generic code like that in our next update.

The Septemember 2018 release added setTextDocumentLanguage, so our extension can try using that instead of adding files to files.associations.

/duplicate of https://github.com/Microsoft/vscode/issues/40233
Marking this as dup of https://github.com/Microsoft/vscode/issues/40233.


Packages haven't been deployed to windows.php.net

The 5.6.0 directory exists on windows.php.net since February 22 but it's empty:

The fact that https://pecl.php.net/rest/r/sqlsrv/stable.txt points to 5.6.0 breaks build automation (e.g. on doctrine/dbal).
One of the published build logs contains:

C:\php-snap-build\php-src\php71\x64\php-src\configure.js(5499, 13) Microsoft JScript runtime error: 'PHP_PDO_SQLSRV' is undefined

Thanks @morozov for bringing this to our attention. We will get back to you on this.

This should now be fixed with the latest release, 5.6.1. Please let us know if there are any issues.

@david-puglielli thank you. The 5.6.1 builds are available but the 5.6.0 still aren't. Are they expected to be deployed as well?

5.6.1 itself is the fix for the deployment failure, so 5.6.0 will not be deployed.

Closing this issue. Please reopen if necessary.


Periodically reduce size of the seqno cache

While this might need some confirmation to originate from the seqno cache, v0.5.3 seems to consume a lot more memory on the public peers. Do some manual management there after removing items to reduce capacity if applicable.

v0.5.3 seems to consume a lot more memory on the public peers

How does the strategy to deploy new mycelium release? Maybe gradually each N hours or X days?

We generally deploy most of them at roughly the same time, but that shouldn't impact anything since we want stable memory consumption

After some more investigation it seems that it might not (entirely) be seqno cache related.

Adding some more debugging made it clear that this is, in fact, not caused by the seqno cache


Invalid expiration date

I have found a bug with the dropdown expiration date in hosted fields.
The default value of the expiration month is always 1. If the card expiration date is 01/2017, 01/2018 or 01/2019... the user will only change the year and the expiration month will be invalid. The expiration month will only be valid if the user change the month to 02 then back to 01.
If the current date will be 01/2017 and the card expiration date is 01/2017 the user have to change the month to 01->02->01 and the year to 2017->2018->2017

Thanks for reporting this. It looks like if you create the drop down inputs without a placeholder field, this happens. We should fix this behavior, but in the meantime, you can create your fields like this to solve the problem:
expirationMonth: {
  selector: '#your-expiration-month-div',
  placeholder: '-- Expiration month --',
  select: {
    options: [
      '1 - Jan',
      '2 - Feb',
      '3 - Mar',
      '4 - Apr',
      '5 - May',
      '6 - Jun',
      '7 - Jul',
      '8 - Aug',
      '9 - Sep',
      '10 - Oct',
      '11 - Nov',
      '12 - Dec'
    ]
  }
},
expirationYear: {
  selector: '#your-expiration-year-div',
  placeholder: '-- Expiration year --',
  select: true
},

CC @EvanHahn

@Mneroen Thanks again for reporting this. We've patched this bug and will be releasing the fix with the next version. We'll leave the issue open until then.

@Mneroen This issue has been fixed in 3.7.0.


Auto-injected __typename is being passed to the SQL backend

Hi @Akryum
I have just implemented Apollo Client 2.0 with VueApollo. I'm having some problems though, and I was hoping you might have some insights or pointers where to look.
A simple apollo: query
rows: gql`query {
  iwRegions {
    id
    country_id
    name
  }
}

is sending an auto-injected '__typename' column request through to my SQL backend server, which naturally has no idea what to do with it.
I tried implementing a suggestion to filter out the _typename as follows, but it has no effect on the problem:
graphQLServer.use('/graphql', graphqlExpress({
  schema: graphQlSchema,
  formatParams: (params) => {
    const { variables, ...rest } = params;
    return {
      variables: omitDeep(variables, '__typename'),
      ...rest
    }
  }
}));

Can you offer any ideas on this?
TIA
Adrian

Maybe try filtering it out when creating hte SQL query?

Thanks for the quick response!!! I did try that, using:
graphQLServer.use('/graphql', graphqlExpress({
  schema: graphQlSchema,
  formatParams: (params) => {
    const { query, ...rest } = params;
    const newQuery = query.split('__typename\n').join('')
    console.warn('Query: ' + JSON.stringify(newQuery, null, 2))
    return {
      query: newQuery,
      ...rest
    }
  }
}));

but then it just comes back with a lot of errors complaining about missing __typenames...

I mean in the resolvers, where you effectively make the SQL query. Try to keep __typename as much as possible in the GraphQL part.

The problem was in my objection-graphql middleware, it just needed to filter out the __typename 'column'. Solved!


Layout needs padding on iPhoneXS

As you can see on the screenshot (at the top) there needs to be some padding added to the top. Issue here is that on your profile you cannot (or very diffucult) reach you preferences.
Eventually this blog post helps https://webkit.org/blog/7929/designing-websites-for-iphone-x/

Is there any update on this? Its hard to e.g. star something. Thanks a lot.


delete blockly bug

Connected blocks cannot be deleted at once

Could you please provide more information about the bug, because the connected blocks are supposed to be deleted together and it works fine as I tested.
Maybe something is wrong, so please provide more detailed info. Thanks!


Make dependency update PR names more informative

Automated PRs generated by concourse pipelines to update dependencies have names like: "Updating version for dotnet-runtime for 3.1.X". This is handy because it's easy to determine, at a glance, what the PR is changing. (Like if you're looking at the changelog on a draft release to determine the correct semver version for the next one).
PRs opened by the update dependencies workflow are all named the same thing
It would be helpful if these PRs could somehow give a hint about the changes they made.

This might entail that the dependency updating action needs to output some information about the diff between the old and new buildpack.toml.
Notably, this would also be helpful if we want to auto-label PRs based on whether they add a patch/minor/major change.

This will also be helpful for https://github.com/paketo-buildpacks/dotnet-core-sdk/issues/223 in creating automation to update the compatibility table, since that automation will need to be aware of the versions updated in order to make the appropriate compatibility changes.


Allow custom base layout name

This adds flexibility allowing us to use a base layout with a name different from __layout, which is currently hardcoded into viewEngine.
Using a custom template name will be as simple as doing this during the Rendr server creation:
var server = rendr.createServer({
  baseLayoutName: 'myTemplate'
});

Rendr-handlebars is already flexible enough to allow this.

:+1:

Coverage increased (+0.04%) to 82.8% when pulling 701497fa747d31bb818c8ccd12ab1e76a7a65e62 on ingiulio:allowCustomBaseLayoutName into 5532a66de86bd64c20944276eccb5c87a59f902c on rendrjs:master.

Coverage increased (+0.04%) to 82.8% when pulling 701497fa747d31bb818c8ccd12ab1e76a7a65e62 on ingiulio:allowCustomBaseLayoutName into 5532a66de86bd64c20944276eccb5c87a59f902c on rendrjs:master.

very :+1: - i've been meaning to do this for a while. thanks!!!


Add support for sp530e

There is a latest controller sp530e available at https://www.aliexpress.com/item/1005006472928868.html
Request support for it.

It would be a great contribution

Any update on this controller being supported?

Any support I can offer for the addition of this as I have several of these and would love to contribute in some way.

Just adding in to say I would love to see it added!

Please add support for this. Need a wifi controller over sp630e bluetooth for rgbcctand addressable.

Bumping this. 👍

A post to increase the interest about this feature

Unlikely I will get to this for at least a few more months

How's your free time looking on this request. Is there anything I can offer to help with?

Let's make this happen.

I have a SP530E and I'm currently trying to understand how to approach the problem for adding support.
I don't have problems with the code, what I'm missing to make some steps forward is knowing a little about tooling.
So, how do I understand how to parse the packets from and to the led strip?
I've tried to get a hci dump from my android phone that collected some packets from the phone to the SP530E and then I looked it up with wireshark. My goal was to simply read the ON and OFF commands packets.
I've also tried to debug directly from the HACS integration, changing the code and adding debug lines and trying to reverse-engineer the bluetooth data, but at the moment I'm lost. This was also possible thanks to @o1hitman1o 's fork (and a fork of his fork)
Does anybody have any suggestions?
Any hint on how to debug faster (i.e. not restarting HA everytime) would be also great!
for instance, the first packets that I receive from the led controller are:
Index 0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19
Pkg1  53 02 00 1e 00 0e 01 01 00 11 00 19 56 32 2e 30 2e 30 38 20
Pkg2  53 02 00 1e 01 0e 84 03 03 00 3c 00 01 03 00 7b 01 84 00 01

But again.. i'm lost here, how do I understand what part of the message means what?

I'm still not in a position at this time to be able to focus on this or other issues. But I do now have  530.
Looking at those packets it seems the 530 uses the same protocol as the 630. If someone can post up the HA logs showing the advertisement data from 530, it maybe as simple as adding a signature entry. This may get it working over BT.
Whilst I envisaged supporting WiFi devices there is no code yet, so even if it works over BT, WiFi is months away.

I have a SP530E and I'm currently trying to understand how to approach the problem for adding support.
I don't have problems with the code, what I'm missing to make some steps forward is knowing a little about tooling.
So, how do I understand how to parse the packets from and to the led strip?
I've tried to get a hci dump from my android phone that collected some packets from the phone to the SP530E and then I looked it up with wireshark. My goal was to simply read the ON and OFF commands packets.
I've also tried to debug directly from the HACS integration, changing the code and adding debug lines and trying to reverse-engineer the bluetooth data, but at the moment I'm lost. This was also possible thanks to @o1hitman1o 's fork (and a fork of his fork)
Does anybody have any suggestions?
Any hint on how to debug faster (i.e. not restarting HA everytime) would be also great!
for instance, the first packets that I receive from the led controller are:
Index 0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19
Pkg1  53 02 00 1e 00 0e 01 01 00 11 00 19 56 32 2e 30 2e 30 38 20
Pkg2  53 02 00 1e 01 0e 84 03 03 00 3c 00 01 03 00 7b 01 84 00 01

But again.. i'm lost here, how do I understand what part of the message means what?
Edit: the device also an open TCP port: 8587
I have no idea on how to communicate with it, tried telnet, nc, curl.. nothing.

It's basically trial and error, I capture all the packets whilst using every function through the app, then figure out what does what. It can take a lot of time and effort.
The main tool is a full HA dev environment and not try this on your live platform.

I'm still not in a position at this time to be able to focus on this or other issues. But I do now have 530.
Looking at those packets it seems the 530 uses the same protocol as the 630. If someone can post up the HA logs showing the advertisement data from 530, it maybe as simple as adding a signature entry. This may get it working over BT.
Whilst I envisaged supporting WiFi devices there is no code yet, so even if it works over BT, WiFi is months away.

I will try as soon as possible and also post everything I catch from the logs!

The advertisement data is
Checking support for: 'A0:76:4E:DC:F0:02' (SP530E)... AdvertisementData(local_name='SP530E', manufacturer_data={20563: b'N\x00\xa0vN\xdc\xf0\x02'}, service_uuids=['00001800-0000-1000-8000-00805f9b34fb', '00001801-0000-1000-8000-00805f9b34fb', '0000ffe0-0000-1000-8000-00805f9b34fb'], rssi=-127)

I've been able to get this log lines:
homeassistant-1  | 2024-11-07 23:04:28.347 DEBUG (MainThread) [custom_components.uniled.lib.ble.device] Device 'A0:76:4E:DC:F0:02' (SP530E) identified as 'SP530E', by SPLED (BanlanX).
homeassistant-1  | 2024-11-07 23:04:28.347 DEBUG (MainThread) [custom_components.uniled.lib.ble.device] Device 'SP530E' (A0:76:4E:DC:F0:02) is supported!

by changing the SP6xxEProxy.match_ble_devices method:
was:
if mid != self.ble_manufacturer_id or data[1] != 0x10:

changed to:
if mid != self.ble_manufacturer_id or (data[1] != 0x10 and data[1] != 0x00) :

and by adding:
0x4E: "SP530E",

to SP630E.ids
all in banlanx6xx.py
But at the moment I can't add the device on HA.
Log shows no errors after that, nor updates.
Will try again next days!

@mari8i let me know if i can help test/debug, i have the sp530e with an rgbcw strip.

@mari8i looks like they have split the notification data into multiple packets, so the code will need some reworking to  support the 530. I have now got my dev box back up and working, so I will try to get a fix as quickly as I can

This is great news! Let me know if I can help somehow, I will do some
testing for sure when ready!
Il dom 10 nov 2024, 18:51 Phil M @.***> ha scritto:

@mari8i https://github.com/mari8i looks like they have split the
notification data into multiple packets, so the code will need some
reworking to support the 530. I have now got my dev box back up and
working, so I will try to get a fix as quickly as I can
—
Reply to this email directly, view it on GitHub
https://github.com/monty68/uniled/issues/67#issuecomment-2466825303, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/AAWPARQITRXFP7M2P65T43TZ76MLFAVCNFSM6AAAAABIKOVHR6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDINRWHAZDKMZQGM
.
You are receiving this because you were mentioned.Message ID:
@.***>

This device is gonna be a pain!

Hope some coffee helps you!
In the next days I should have some time, if I can help with some clear instructions I could provide you what you need!

Hope some coffee helps you! In the next days I should have some time, if I can help with some clear instructions I could provide you what you need!

Cheers, think I'll need something stronger! - at the moment I cannot get a stable connection the 530 keeps on disconnecting rather than keeping the connection open so Uniled thinks this is an error, to change it for BLE devices at this stage is a huge re-write. I'm going to have to consider only supporting the 530 through Wi-Fi, but now I have to figure out how to do that now.

OK, so I have worked out the 530 protocol basics over Wi-Fi, but got a fair amount to refactor existing code and add in support for network devices into Uniled, but at least now I can see a way forward for these things, you all will have to be a bit more patient but support will be coming

I was starting to reverse-engineer the wifi protocol just now. Can you share any info?

Open TCP connection to the SP530E on port 8587, commands and response follow the below format:

Byte   Number
Byte Value
Description

0
0x53
S

1
0x50
P

2
0x54
T

3
0x45
E

4
0x43
C

5
0x48
H

6
0x00
NULL

7
MSG
Message Type

8
KEY
Encryption Key

9
??
Total Packets (Over network this is 0x00)

10
??
Packet Number (Over network this is 0x00)

11
LEN_H
Payload length hi byte

12
LEN_L
Payload length lo byte

I know what most of the basic commands are as they seem to be the same on the 530 as the 630, although there will be some newer ones I'll need to figure out for new features/functionality such as setting strip or matrix settings.
I'm currently decoding the state packet, again a lot is similar to the 630 but a lot is new.
If you want to get a response from the 530, send the below bytes to the device:
0x53, 0x50, 0x54, 0x45, 0x43, 0x48, 0x00, 0x02, 0x58, 0x00, 0x00, 0x00, 0x00

Thanks!
I've started decoding the status response. I'll update this comment when I go on with the activity.

Cheers it all helps, so far I have this confirmed:
firmware = data[19:27].decode("utf-8")
light_type = data[27]
onoff_effect = data[28]
onoff_speed = data[29]
onoff_pixels = int.from_bytes(data[30:32], byteorder="big")
coexistence = data[32]
on_power = data[33]

power = True if data[40] > 0x00 else False
loop = data[41] # 0=Off, 1=Loop All Effects, 3=Loop Favourites
order = data[42]
mode = data[43]
effect = data[44] # Effect Number
play = data[45] # 0=Pause Effect, 1=Play Effect
c_level = data[46] # Color Level
w_level = data[47] # White Level
static_r = data[48]
static_g = data[49]
static_b = data[50]
static_cw = data[51]
static_ww = data[52]
speed = data[53] # Effect Speed
length = data[54] # Effect Length
direction = data[55] # Effect Direction
gain = data[56] # Audio Gain
input = data[57] # Audio Input
effect_r = data[58]
effect_g = data[59]
effect_b = data[60]
effect_cw = data[61]
effect_ww = data[62]
diy_mode = data[63]

Progress made, should be ready for some beta testing by the weekend.

This is great news! Ready to test it!
Let me know when there is an usable branch so I can start :)

v3.0.0 Beta 1 has been released for testing support of the SP530E only.
Please add any comments, feedback or issues to the discussion #81


Memory Leak From Kafka Producer with kafka-net

NetworkWriteStatistic contain the Payload and it cause memory leak.
this is going to be fix in the next branch.

fix look on:
https://github.com/EranOfer/KafkaNetClient/commit/c9addd5fc25d9593a5cb3560749f409a7d0508aa
not merge to master yet


K8SPXC-608 Fixing cluster wide openshift configuration

 ❨?❩
In cluster wide mode, there was an error which didn't allow
pmm to start up

Test name
Status

recreate
passed

haproxy
passed

upgrade-haproxy
passed

scaling
passed

big-data
passed

storage
passed

init-deploy
passed

scaling-proxysql
passed

self-healing
passed

restore-to-encrypted-cluster
passed

security-context
passed

upgrade-proxysql
passed

limits
passed

self-healing-advanced
passed

monitoring-2-0
passed

demand-backup
passed

smart-update
passed

affinity
passed

one-pod
passed

operator-self-healing
passed

auto-tuning
passed

proxysql-sidecar-res-limits
passed

pitr
passed

users
passed

demand-backup-encrypted-with-tls
passed

tls-issue-self
passed

tls-issue-cert-manager
passed

tls-issue-cert-manager-ref
passed

validation-hook
passed

upgrade-consistency
passed

scheduled-backup
failed

Test name
Status

recreate
passed

haproxy
passed

upgrade-haproxy
passed

scaling
passed

big-data
passed

storage
passed

init-deploy
passed

scaling-proxysql
passed

self-healing
passed

restore-to-encrypted-cluster
passed

security-context
passed

upgrade-proxysql
passed

limits
passed

self-healing-advanced
passed

monitoring-2-0
passed

demand-backup
passed

smart-update
passed

affinity
passed

one-pod
passed

operator-self-healing
passed

auto-tuning
passed

proxysql-sidecar-res-limits
passed

pitr
passed

users
passed

demand-backup-encrypted-with-tls
passed

tls-issue-self
passed

tls-issue-cert-manager
passed

tls-issue-cert-manager-ref
passed

validation-hook
passed

upgrade-consistency
passed

scheduled-backup
failed


Revise documentation in PDF reports

Some names of outputs have changed, and now the functional QC protocol includes together the spatial and the temporal metrics.

Hi @craigmoodie, do you mind to add the table of image parameters we have included within the reports? Example: https://circle-artifacts.com/gh/poldracklab/mriqc/111/artifacts/0/home/ubuntu/outdir/multiple-subject-func/functional_group.pdf

What do you think about removing the html documentation from the reports, and just provide a link to the online documentation (uploaded in readthedocs or something). We would link to the module that now contains all the QC measures (example here -> https://circle-artifacts.com/gh/poldracklab/mriqc/145/artifacts/0/home/ubuntu/outdir/doc/mriqc.qc.html).
The 'downside' is that I would need to move parts of the documentation we have in the html templates into those docstrings of the qc measures.
The upsides are that we release @craigmoodie of documenting this QC project, and I think he will really appreciate that, and that docs can be built automatically with each release.

+1 on this idea - Sphinx is really great, and it's nice to have docs that live with the code.

Ok, this issue will be split in #46, #45 and #47.