single pixel gap in nav dropdown

Hi @dipamsen, I can't seem to reproduce the behaviour. I took screenshots in Safari and Chrome browsers and don't see the behaviour you observed.
Here's a screenshot in Safari browser:

And here's a screenshot in Chrome browser:

That's interesting, I see it in both Chrome and Firefox:
Windows 11 23H2 64 bit
Firefox Version 123.0.1 (64-bit)

Chrome 122.0.6261.129 (Official Build) (64-bit)

I can't reproduce it on a mac either! Not sure how to best approach this but open to suggestions, thanks for finding this @dipamsen!

Same, can't reproduce on macOS (Chrome, Firefox and Safari) 🤷
(The menu font looks bad too! Mismatched height between characters...)
Would be interesting to know if all Windows users are experiencing this, or if it's just your setup.
Some thoughts and ideas to explore:

Could it be linked to the pixel density of your display? We're most likely all on retina displays (over 200 PPI) on mac, which may be why we don't see the same thing as you.
Are you scaling the display or text at the OS level? (accessibility features)
Are you using your display's native resolution or are your slightly below/above? That could explain the subpixel/blurry stuff happening, and the gap could be related.
GPU drivers?

In your original screenshot, the hairline borders at the bottom (which should be 1px solid) seem to misalign at the subpixel level and the red one is anti-aliasing (lighter at the bottom).

The baseline for the menu buttons is 50px on the site, so the actual pixel size on display should be a factor of 50. I don't know if you upscaled your later screenshots, but the butons seem to be at a height of ~120px. Makes me think my points 2 and/or 3 could be at play?

All my previous screenshots were taken after zooming in (magnification via touchpad on chrome, not sure what this feature exactly is called). Here are the same page screenshots without any zooming:
Home Page

Showcase Guide Page

Changing back to 100% does fix all the issues:

Though it does make everything on my screen extremely tiny, so I'll go back to 125%, or change the screen resolution.


Headers are not saved

When adding headers to a request these seem not to be persisted (v0.16.1, Mac Apple Silicon).
When leaving Bruno and starting Bruno again, the headers entered for the request before are gone.
Is this a bug or a missing feature?

Did you save the request by pressing Cmd+S
If a request is not saved, you should see a tiny yellow dot in the request tab.

Using Cmd + S works, thank you :)
I didn't see a Save button and wrongly assumed that the values will automatically be saved.


Message as auxiliary file

Hi @appleboy
the plugin is awesome, I really like it!
The only thing that bothers me (a little) is that I cannot configure the message in a side file.
It would be incredible if one is able to do the following:
Let's say: in .drone-telegram-message.md
{{#success build.status}}
... here goes md content
{{else}}
... here goes md content
{{/success}}

Pros:

file is supported by IDE by simply following its extension / file type
no need to encode special yaml characters such as #, : etc.
more readable .drone.yml

And then the config would look as
    name: telegram
    depends_on: [dockerize]
    image: appleboy/drone-telegram
    when:
      status: [success, failure]
    settings:
      token:
        from_secret: telegram_token
      to:
        from_secret: telegram_to
      format: markdown
      messageFile: .drone-telegram-message.md

What do you think?

This could potentially fix issues like this one #67

@smnbbrv OK. I will implement this feature.


Dashboard Checkboxes - Incorrect style applied (form-control)

The checkboxes are being rendered with the form-control class applied, this is causing them to render incorrectly.

This is the default class applied by the FormMaker project see line 86 of FormMaker.php.
I don't know what the proper recommended fix would be (don't want to introduce any adverse effects), but if you wanted assistance on this, just point me in the correct direction and I'll work on a correction.

Correctly in the latest FormMaker release - so you should be able to composer update and get rid of that bug


WIP: Upgrade dependencies to latest versions

Just small upgrade of the packages in the project to keep the dependencies fresh.
I should probably install Dependabot to automate this in the future.

Switched to WIP due to error: Type instantiation is excessively deep and possibly infinite

@johny  this still applicable?


Support for Angular 4?

Hi, is it possible to add this plugin to a angular4 project? I have tried to add and it will install all angular2 dependencies into my angular4 project which will cause a conflict once I ran it.
Im adding this plugin via yarn.

Could you print the dependency tree, why angular 4 is miss matched with required angular dependencies of:
"@angular/common": "^2.0.0",
"@angular/compiler": "^2.0.0",
"@angular/core": "^2.0.0",
"@angular/platform-browser": "^2.0.0",
"@angular/platform-browser-dynamic": "^2.0.0",

"<EMAIL_ADDRESS>version "4.1.3"
resolved<EMAIL_ADDRESS>"<EMAIL_ADDRESS>version "4.1.3"
resolved<EMAIL_ADDRESS>dependencies:
"@angular/tsc-wrapped" "4.1.3"
minimist "^1.2.0"
reflect-metadata "^0.1.2"
"<EMAIL_ADDRESS>version "4.1.3"
resolved<EMAIL_ADDRESS>"<EMAIL_ADDRESS>version "4.1.3"
resolved<EMAIL_ADDRESS>
above is my yarn.lock file before I add the plugin.
For your information, currently my project is using angular 4 as core. So, when i added this ng2 plugin, it will also install angular 2 for all of the above packages (so I have 2 @angular/code, @angular/common, etc - but in angular2 version). Therefore, when I tried to use the component is my project the error message is this:
Uncaught Error: Unexpected value 'A2Edatetimepicker' imported by the module 'OrderModule'. Please add a @NgModule annotation.

Hi. I have the same issue on angular 4.2.6.
I use webpack:
"ng2-eonasdan-datetimepicker": "0.0.7"
I've added import to my app.module.ts:
import {A2Edatetimepicker} from 'ng2-eonasdan-datetimepicker';
@NgModule({
  imports: [
....
    A2Edatetimepicker
  ],

and I use as

                       <input class="form-control"                              a2e-datetimepicker                              [date]="dateTo"                              [options]="a2eOptions"                              (onChange)="dateToChange($event)"                              (onClick)="dateClick()"/>

but I've got an error during compiling:
ERROR in A2Edatetimepicker is not an NgModule

I would really like to prepare a system js, webpack and angular 4 demo versions if possible, and adjust the library to the requirements.
However as said before I do not work with front-end anymore and I am focused on other projects.
I am still actively supporting the library and I can merge all the necessary changes presented by PRs but most likely I will not update it on my own in the nearest future

can we close it?

Even with 0.0.8 I have still issue on Angular 4
ERROR in A2Edatetimepicker is not an NgModule

This error is not related to lack of support for Angular 4. But to be honest I do not longer know if it is because you import the module in the wrong way or it is an error for everyone.

Same error for myselfas for ssnake. Clean install using instructions provided with angular 4.
npm install "ng2-eonasdan-datetimepicker": "0.0.8"

import { NgModule } from '@angular/core';

import { CommonModule } from '@angular/common';
import { RouterModule } from '@angular/router';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MdSelectModule } from '@angular/material';
import { A2Edatetimepicker } from 'ng2-eonasdan-datetimepicker';
import { NavbarComponent } from './navbar.component';
@NgModule({
imports: [
RouterModule,
CommonModule,
FormsModule, ReactiveFormsModule,
MdSelectModule,
A2Edatetimepicker
],
declarations: [ NavbarComponent ],
exports: [ NavbarComponent ]
})
export class NavbarModule {}

I had the same error and switched to using the directive instead of the module.
From
import { A2Edatetimepicker } from 'ng2-eonasdan-datetimepicker';

import 'eonasdan-bootstrap-datetimepicker';

@NgModule({
    imports: [ A2Edatetimepicker ],
    ...
})

To
import { DateTimePickerDirective } from 'ng2-eonasdan-datetimepicker/dist/datetimepicker.directive';

import 'eonasdan-bootstrap-datetimepicker';

@NgModule({
    declarations: [ DateTimePickerDirective ],
    ...
})


Extend NSDate such that it behaves like DateInRegion for the default or local region

Write the NSDate extension such that it behaves like DateInRegion for the local or default region. E.g.
nsdate = NSDate()
regionDate = nsdate.inRegion(defaultRegion)

// Now nsdate and regionDate would behave equivalent

This would make the library easier to use if no conversions to other locales, time zones or calendard are necessary.
It would also make migration from SwiftDate 1.2 easier.

I agree, but adding inDefaultRegion() to isn't that bad anyway.

Fixed in v3.0.0


Fix a typo

the numeric games have "frozen" -> the numeric games are "frozen"

I think "have frozen" also makes sense because the beginning of a game is usually heated, but as you play on the game's value eventually reduce to a number, and the game becomes frozen.

Also you appear to have made this PR from your own fork of mathlib, which means that CI won't run on it properly and isn't the standard workflow we use. You should instead follow https://leanprover-community.github.io/contribute/index.html#making-a-pull-request-pr (in this case of course CI will not fail but most of our infrastructure is set up assuming people make PRs from branches of this repo rather than forks so I'm not even sure what happens if someone tries to merge this). See also the PR title convention there (the PR title becomes the commit message for the merge commit so we try to keep it somewhat consistent and more descriptive)

@alreadydone Agree, thanks for providing a different perspective :) I'll close the PR.
@alexjbest Noted, thanks!


Podcast episodes aren't properly linked to

The podcast page is rendered correctly, and data from Anchor.fm is fetched as well.
However, there's a problem with the references on the podcast page.

Locally thrown error points to an obvious source, but I couldn't solve it:
TypeError: src\includes\mixins.pug:80
    78| mixin episodePlayer(e)
    79|   .player.player--single&attributes(attributes)
  > 80|     a.player__coverlink(href=`/podcast/${e.slug}/`)
    81|       img.player__cover(src=imgLarge data-amplitude-song-info="cover_art_url" data-amplitude-main-song-info="true")
    82|     .player__bottom
    83|       progress.player__progress.amplitude-song-played-progress(data-amplitude-main-song-played-progress="true")

Cannot read properties of undefined (reading 'slug')
    at Object.pug_interp [as episodePlayer] (eval at wrap (C:\_INTERLINK\einundzwanzig.space\node_modules\pug-runtime\wrap.js:6:10), <anonymous>:250:98)
    at eval (eval at wrap (C:\_INTERLINK\einundzwanzig.space\node_modules\pug-runtime\wrap.js:6:10), <anonymous>:669:28)
    at template (eval at wrap (C:\_INTERLINK\einundzwanzig.space\node_modules\pug-runtime\wrap.js:6:10), <anonymous>:750:7)
    at Object.exports.renderFile (C:\_INTERLINK\einundzwanzig.space\node_modules\pug\lib\index.js:454:38)
    at renderPage (C:\_INTERLINK\einundzwanzig.space\tasks\generate_pages.js:19:24)
    at Object.<anonymous> (C:\_INTERLINK\einundzwanzig.space\tasks\generate_pages.js:52:1)
    at Module._compile (node:internal/modules/cjs/loader:1105:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12) {
  path: 'src\\includes\\mixins.pug'
}

Files changed for this objective (there's probably a better way):
src\episode.pug
-line 11, it's possible the content needs to reference dvadesetjedan.com. It didn't work for me when it referenced my localhost
src\includes\mixins.pug

line 12, replaced verschiedenes and Verschiedenes with kategorija and Kategorija
line 118, replaced Einundzwanzig with Dvadesetjedan

tasks\fetch_feed.js

line 47, replaced Verschiedenes with Kategorija
line 56, replaced verschiedenes with kategorija

tasks\generate_pages.js

line 56, replaced verschiedenes with kategorija


Make Play work through reverse proxies such as nginx and lighttpd

Discussion on Google Groups:
http://groups.google.com/group/play-framework/browse_thread/thread/148376db892c974a

Responses should not be chunked under HTTP/1.0.  Need to check the request for HTTP/1.1 before chunking.

Fixed in https://github.com/playframework/Play20/commit/c03faff22cf2bdd87b3773287e87d4c7f9a63aef
Thanks Guillaume!


Better handling for trying to open a SQLite database that is not a BNDB

Had an Enterprise customer recently that stored a SQLite database in a Project and then, later, tried to open it (mistaking it for a binary/.bndb). Our error handling for this is kinda bad and misled them into thinking that we had corrupted the file (it was, instead, bindiff output and not corrupted at all).

Fixed in 4.3.6554-dev


Where/how to find list of available statistics

First, congratations and thank you for such a great package. One stat that I'm curious about analyzing is WR/RB/TE targets, drops, and catches. Using the approach outlined in the tutorial to dump stats to a CSV file I get recieving_rec, but not the former two.
So, my question is whether these stats are available, if so, how to retrieve them, and whether there's a complete list of available statistics. Thanks!

Have a look at this page from the wiki: https://github.com/BurntSushi/nflgame/wiki/Stat-types


gophernotes: 0.7.3 -> 0.7.4

Automatic update generated by nixpkgs-update tools. This update was made based on information from https://github.com/gopherdata/gophernotes/releases.
meta.description for gophernotes is: "Go kernel for Jupyter notebooks"
meta.homepage for gophernotes is: "https://github.com/gopherdata/gophernotes"
meta.changelog for gophernotes is: ""
Updates performed

Golang update

To inspect upstream changes

Release on GitHub

Compare changes on GitHub

Impact

Checks done (click to expand)

built on NixOS
The tests defined in passthru.tests, if any, passed
/nix/store/g3i4w5qb4dzkqxdl8pmwv1qwd7vqy4fn-gophernotes-0.7.4/bin/gophernotes passed the binary check.
1 of 1 passed binary check by having a zero exit code.
1 of 1 passed binary check by having the new version present in output.
found 0.7.4 with grep in /nix/store/g3i4w5qb4dzkqxdl8pmwv1qwd7vqy4fn-gophernotes-0.7.4
found 0.7.4 in filename of file in /nix/store/g3i4w5qb4dzkqxdl8pmwv1qwd7vqy4fn-gophernotes-0.7.4

Rebuild report (if merged into master) (click to expand)

4 total rebuild path(s)

2 package rebuild(s)

2 x86_64-linux rebuild(s)
2 x86_64-darwin rebuild(s)

First fifty rebuilds by attrpath
docbookrx
gophernotes

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/g3i4w5qb4dzkqxdl8pmwv1qwd7vqy4fn-gophernotes-0.7.4 \
  --option binary-caches 'https://cache.nixos.org/ https://nix-community.cachix.org/' \
  --option trusted-public-keys '
  nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

(The Cachix cache is only trusted for this store-path realization.)
For the Cachix download to work, your user must be in the trusted-users list or you can use sudo since root is effectively trusted.
Or, build yourself:
nix-build -A gophernotes https://github.com/r-ryantm/nixpkgs/archive/6732e79a3225267220475b6f0a71f249ceb98361.tar.gz

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/g3i4w5qb4dzkqxdl8pmwv1qwd7vqy4fn-gophernotes-0.7.4
ls -la /nix/store/g3i4w5qb4dzkqxdl8pmwv1qwd7vqy4fn-gophernotes-0.7.4/bin

Pre-merge build results
We have automatically built all packages that will get rebuilt due to
this change.
This gives evidence on whether the upgrade will break dependent packages.
Note sometimes packages show up as failed to build independent of the
change, simply because they are already broken on the target branch.
Result of nixpkgs-review run on x86_64-linux 1

1 package built:

gophernotes

Maintainer pings
cc @costrouc @kalbasit for testing.

Upstream change looks good to me, ping me for a revert if there are any regressions.


RPI Design-Build-Fly

##Server name:

The name of the server or the club it is associated with.

RPI Design Build Fly (DBF)
##Server link:

Link to the server. Feel free to also include links to an associated website and
social media accounts.

https://discord.gg/VrPK5Pa3Mq
Tags:

These are the tags that appear at the bottom of the server listing. These are not
linked to anything but are useful for users trying to find a server using Control-F.

Club, Design, Build, Fly, Engineering, Team, Aerospace, Airplane, Aviation
Server description

The description of the server or the associated club.

RPI Design-Build-Fly (DBF) is a project-based team that builds an RC airplane annually for the AIAA DBF competition. We accept (and encourage) members from ALL majors and no prior RC airplane experience is required.

^ club logo

Added!


Remove URL quoting from refs before passing to Sphinx

Sphinx allows refs with spaces etc, and in fact autogenerates them with
the command autosectionlabel.
So if you put a:
[Link 1](<some ref>)
[Link 2](<https://foo.com/bar baz>)

Then the links will be some%20ref and https://foo.com/bar%20baz.
We want to keep the URL quoting for external references, but if we're
passing it as :any: to Sphinx we need to unquote so Sphinx can find
the correct reference, the <some ref> should map to:
:ref:`some ref`

Fixes: https://github.com/rtfd/recommonmark/issues/155

@ericholscher sorry for the direct ping, but would you mind taking a look at this? I think it should be uncontroversial.
I've been using it (via a patch --forward in my Makefile) in a project for a while now, would be great not to have to do that any more :).

Full patch code in case anyone else needs to do the same:
Patch script:
# Generate patch with:
cp .venv/lib/python3.*/site-packages/recommonmark/parser.py parser.py

# Edit ./parser.py to apply the change here

# Generate patch
diff -u .venv/lib/python3.*/site-packages/recommonmark/parser.py parser.py > parser.py.patch

# Commit ./parser.py.patch, delete ./parser.py

# Apply patch as part of your Makefile/setup.py:
patch --forward \
  .venv/lib/python3.*/site-packages/recommonmark/parser.py \
  < parser.py.patch \
  || true

Generated patch:
--- .venv/lib/python3.7/site-packages/recommonmark/parser.py	2019-05-16 11:29:29.045060000 +0200
+++ parser.py	2019-05-23 16:21:31.172900496 +0200
@@ -11,9 +11,9 @@
 from warnings import warn

 if sys.version_info < (3, 0):
-    from urlparse import urlparse
+    from urlparse import urlparse, unquote
 else:
-    from urllib.parse import urlparse
+    from urllib.parse import urlparse, unquote

 __all__ = ['CommonMarkParser']

@@ -152,7 +152,7 @@
         url_check = urlparse(destination)
         if not url_check.scheme and not url_check.fragment:
             wrap_node = addnodes.pending_xref(
-                reftarget=destination,
+                reftarget=unquote(destination),
                 reftype='any',
                 refdomain=None,  # Added to enable cross-linking
                 refexplicit=True,

Looks good, no worries on the direct ping 👍

I will try and get a release out here soon.

Thank you!

I will try and get a release out here soon.

@ericholscher any chance of a release? If there's anything I could do to help with said release let me know.

I just shipped 0.6.0 👍


[camera] Allow controlling the preview and output mirroring

I am currently using the camera pluggin on flutter. Is there a way to remove the mirror effect from the front camera (selfie camera) when you take a picture? If there is none, can it be added ?

@ueabu
Please try the latest camera plugin.
If this remains to be an issue, can you file a PR?

I'm using latest camera plugin as at 2019/03/23 (camera 0.4.2), my app is as simple as preview the camera for 3 seconds (using the front camera), take a picture, and show the picture taken for 10 seconds.  However, the picture taken and the preview is mirrored.  Can I have some work around?  say, can I preview the camera in mirror? (I can't find any widget for this), or, can I save the image in mirror? (I am unable to find any plugin to do this as well)

Using camera-0.5.4, and this issue still occurs. Image captured is mirrored and then saved to directory.

I am experiencing the same mirror effect. When using front camera the plugin always mirrors the image. Please fix this. Thank you!

The same for me. A video recorded by the front camera is mirrored in a file, but looking good in the CaeraPreview.
flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.9.1+hotfix.4, on Mac OS X 10.15 19A602, locale
    ru-UA)
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
[✓] Xcode - develop for iOS and macOS (Xcode 11.0)
[✓] Android Studio (version 3.5)
[✓] Connected device (1 available)

• No issues found!

Has anyone found a work around to this issue?

You can use ffmpeg to flip an image:

Setup https://pub.dev/packages/flutter_ffmpeg
use following ffmpeg code to flip an image:
"-y -i inputPath -filter:v \"hflip\" outputPath"
where -y parameter allows overwriting inputPath
example code that only flips image when using front camera:

`// take our first picture
_cameraController.takePicture(_tempDir.path + "/tempfaver/firstPic.png")
      // when we're done taking our picture
      .then((void _void) async {
    //
    // try to flip picture in case of selfie-mode
    if (_availableCameras[_selectedCameraIndex].lensDirection ==
        CameraLensDirection.front) {

      // show waiting spinner while mirroring picture
      setState(() {
        _isProcessing = true;
      });

      // mirror selfie picture
      await _ffmpeg.execute("-y -i " +
          _tempDir.path +
          "/tempfaver/firstPic.png " +
          "-filter:v \"hflip\" " +
          _tempDir.path +
          "/tempfaver/firstPic.png");

      _isProcessing = false;

      print("flipping done");
    } else {
      print("no flipping necessary");
    }
  });`

Alternative solution is to mirror the preview instead:
 final mirror = selectedCameraIndex == 1 ? math.pi : 0; Transform(Alignment.center,                     child: CameraPreview(controller),                     transform: Matrix4.rotationY(mirror) )

I solved this problem by modifying the code of the plugin myself
Classes/CameraPlugin.m
find the code:
  bool success = [UIImageJPEGRepresentation(image, 1.0) writeToFile:_path atomically:YES];

insert after this
  UIImage *image = [UIImage imageWithCGImage:[UIImage imageWithData:data].CGImage
                                       scale:1.0
                                 orientation:[self getImageRotation]];

// insert this code
image = [UIImage imageWithCGImage:image.CGImage scale:image.scale orientation:UIImageOrientationLeftMirrored];

  // TODO(sigurdm): Consider writing file asynchronously.
  bool success = [UIImageJPEGRepresentation(image, 1.0) writeToFile:_path atomically:YES];

@peasfarmer awesome! Is it only working for iOS or both platforms?

@peasfarmer awesome! Is it only working for iOS or both platforms?

I have added Android, and i have test in my phone

Transform(
alignment: Alignment.center,
child: CameraPreview(controller),
transform: Matrix4.rotationY(mirror)
)

Hi, can i get full code?

Transform(
alignment: Alignment.center,
child: CameraPreview(controller),
transform: Matrix4.rotationY(mirror)
)

Hi, can i get full code?

Sure here it is:
`
import 'dart:async';
import 'package:camera/camera.dart';
import 'package:flutter/material.dart';
import 'dart:math' as math;
class CameraPage extends StatefulWidget {
static String routeName = "camera";
@override
_CameraPageState createState() {
return _CameraPageState();
}
}
class _CameraPageState extends State {
CameraController controller;
List cameras;
// 0 = front | 1 = back
int selectedCameraIndex;
@override
void deactivate() {
super.deactivate();
controller.dispose();
}
@override
void initState() {
super.initState();
// Get the listonNewCameraSelected of available cameras.
// Then set the first camera as selected.
availableCameras().then((availableCameras) {
cameras = availableCameras;
if (cameras.length > 0) {
setState(() {
// select front camera as default
selectedCameraIndex = 1;
});
    _onCameraSwitched(cameras[selectedCameraIndex]).then((void v) {});
  }
}).catchError((err) {
  print('Error: $err.code\nError Message: $err.message');
});

}
@override
Widget build(BuildContext context) {
if (controller == null || !controller.value.isInitialized) {
return Container(
color: Colors.black,
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height);
}
// mirror camera preview only for front camera
final double mirror = selectedCameraIndex == 1 ? math.pi : 0;

return Transform(
  alignment: Alignment.center,
  child: CameraPreview(controller),
  transform: Matrix4.rotationY(mirror),
);

}
Future _onCameraSwitched(CameraDescription cameraDescription) async {
if (controller != null) {
await controller.dispose();
}
controller = CameraController(cameraDescription, ResolutionPreset.high,
    enableAudio: false);

// If the controller is updated then update the UI.
controller.addListener(() {
  if (mounted) {
    setState(() {});
  }

  if (controller.value.hasError) {
    // Fluttertoast.showToast(
    //     msg: 'Camera error ${controller.value.errorDescription}',
    //     toastLength: Toast.LENGTH_SHORT,
    //     gravity: ToastGravity.CENTER,
    //     timeInSecForIos: 1,
    //     backgroundColor: Colors.red,
    //     textColor: Colors.white);
  }
});

try {
  await controller.initialize();
} on CameraException catch (e) {
  // _showCameraException(e);
}

if (mounted) {
  setState(() {});
}

}
}
`

When taking selfie in native camera at on Android devices, they are correcting the mirror effect, this is a useful feature to be baked into the camera package instead of modifing the image using Transform widget
Thanks for the issue!

@TahaTesser do you have any timeline as to when this can be fixed in the plugin code? We are about to go live.

Do we have a solution for video recording? Similar to that suggested by @peasfarmer for picture?

In the android library source code, I had modified a bit on the solution suggested by @peasfarmer in order to fix the mirroring on front camera
// Listen for picture being taken
  pictureImageReader.setOnImageAvailableListener(
      reader -> {
        try (Image image = reader.acquireLatestImage()) {
          ByteBuffer buffer = image.getPlanes()[0].getBuffer();

//Add this line.
          if (isFrontFacing) {
            byte[] buf2 = new byte[buffer.remaining()];
            buffer.get(buf2);
            Bitmap bitmap = BitmapFactory.decodeByteArray(buf2, 0, buf2.length);
            Matrix m = new Matrix();
            m.preScale(1, -1);
            m.postRotate(270);
            Bitmap dst = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), m, true);
            dst.setDensity(DisplayMetrics.DENSITY_DEFAULT);
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            dst.compress(Bitmap.CompressFormat.JPEG, 100, stream);
            buffer = ByteBuffer.wrap(stream.toByteArray());
          }

          writeToFile(buffer, file);
          pictureCaptureRequest.finish(file.getAbsolutePath());
        } catch (IOException e) {
          pictureCaptureRequest.error("IOError", "Failed saving image", null);
        }
      },
      null);

In the android library source code, I had modified a bit on the solution suggested by @peasfarmer in order to fix the mirroring.
// Listen for picture being taken
  pictureImageReader.setOnImageAvailableListener(
      reader -> {
        try (Image image = reader.acquireLatestImage()) {
          ByteBuffer buffer = image.getPlanes()[0].getBuffer();

//Add this line.
          if (isFrontFacing) {
            byte[] buf2 = new byte[buffer.remaining()];
            buffer.get(buf2);
            Bitmap bitmap = BitmapFactory.decodeByteArray(buf2, 0, buf2.length);
            Matrix m = new Matrix();
            m.preScale(1, -1);
            m.postRotate(270);
            Bitmap dst = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), m, true);
            dst.setDensity(DisplayMetrics.DENSITY_DEFAULT);
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            dst.compress(Bitmap.CompressFormat.JPEG, 100, stream);
            buffer = ByteBuffer.wrap(stream.toByteArray());
          }

          writeToFile(buffer, file);
          pictureCaptureRequest.finish(file.getAbsolutePath());
        } catch (IOException e) {
          pictureCaptureRequest.error("IOError", "Failed saving image", null);
        }
      },
      null);

@peasfarmer your answer is good solves the issue but the image is rotated 90 degrees in some devices

are you found any solution ?

So 2 years later this bug has still not been fixed?

Guys... i think i fixed it... i wasted 2 days of my life googling
Credits goes to: https://stackoverflow.com/questions/64498774/how-to-rotate-a-selected-set-image-flutter
Solution:
    XFile xfile = await _cameraController.takePicture();

    List<int> imageBytes = await xfile.readAsBytes();

    img.Image? originalImage = img.decodeImage(imageBytes);
    img.Image fixedImage = img.flipVertical(originalImage!);

    File file = File(xfile.path);

    File fixedFile = await file.writeAsBytes(
      img.encodeJpg(fixedImage),
      flush: true,
    );

Essentially we have to extract the image bytes we took into a temporary file variable, flip it and then write back those bytes into the original image we took, resulting in anti-mirrored file

Hello, i understand this way for images.
Is there a similar way to do ir from video files?

Hello, i understand this way for images. Is there a similar way to do ir from video files?

+1

Hey any updates on this?
I'm experiencing this issue both on iOS and Android.

Seems the issue is also happening for image streams.

Alternative solution is to mirror the preview instead:
import 'dart:math' as math;

final double mirror = selectedCameraIndex == 1 ? math.pi : 0;

...
Transform(
     alignment: Alignment.center,
     child: CameraPreview(controller),
     transform: Matrix4.rotationY(mirror)
)

Thank you so much! It's working perfectly as I expected... 🚀

Guys... i think i fixed it... i wasted 2 days of my life googling
Credits goes to: https://stackoverflow.com/questions/64498774/how-to-rotate-a-selected-set-image-flutter
Solution:
    XFile xfile = await _cameraController.takePicture();

    List<int> imageBytes = await xfile.readAsBytes();

    img.Image? originalImage = img.decodeImage(imageBytes);
    img.Image fixedImage = img.flipVertical(originalImage!);

    File file = File(xfile.path);

    File fixedFile = await file.writeAsBytes(
      img.encodeJpg(fixedImage),
      flush: true,
    );

Essentially we have to extract the image bytes we took into a temporary file variable, flip it and then write back those bytes into the original image we took, resulting in anti-mirrored file

Awesome! Also, how could we know the picture was taken with the front camera... in order to only flip the bytes when front camera is used.

From you current Camera description, the one the user is using to take the picture/video.
//Properties you need in your controller class
final cameras = List<CameraDescription>([]);
int camIndex = 0;

Then just check after taking the picture, like this:
    if (cameras.value[camIndex].lensDirection == CameraLensDirection.front) {
      originalImg = img.flipHorizontal(originalImg);
    }

Any update on this guys?

Is there a solution for videos? **also why does this issue keep getting closed even when it is unresolved! Just because people are not commenting, it does not mean the issue has magically stopped being an issue!

anyone have any leads on video?

anyone have any leads on video?

As said by gisinator

You can use ffmpeg to flip an image:
Setup https://pub.dev/packages/flutter_ffmpeg
use following ffmpeg code to flip an image:
"-y -i inputPath -filter:v "hflip" outputPath"
where -y parameter allows overwriting inputPath
example code that only flips image when using front camera:
`
// take our first picture
_cameraController.takePicture(_tempDir.path + "/tempfaver/firstPic.png")

I re-wrote a dependency library based on the Camera package to solve the front-facing camera flip problem, you can see:
https://github.com/q384264619/camera_recorder
https://pub.dev/packages/camera_recorder

I am currently using the camera pluggin on flutter. Is there a way to remove the mirror effect from the front camera (selfie camera) when you take a picture? If there is none, can it be added ?

I re-wrote a dependency library based on the Camera package to solve the front-facing camera flip problem, you can see:
https://pub.flutter-io.cn/packages/camera_recorder

A video recorded by the front camera is mirrored in a file, but looking good in the CameraPreview. Do we have a solution for video recording?

Any updates on this ?

iOS recorded video of the front camera is not mirrored as the default camera app in the iphone. This results to incorrect video output and very difficult to correct with postprocessing libraries of the video. This should be just a flag set in the SWIFT code. Can anybody help. I am able to test

import 'package:ffmpeg_kit_flutter/ffmpeg_kit.dart';
...
await FFmpegKit.execute("-y -i " +
videoFile.path +
      " -filter:v \"hflip\" -pix_fmt yuv420p -vcodec hevc_videotoolbox -b:v 1200k -tag:v hvc1 -c:a eac3 -b:a 64k  " +
      applicationTemporaryDirectoryPath + '/video_roeid_mirror.mp4'
  );

tune the -b:v parameters for video quality
Inside XCode you should add this:

When using Flutter SDK>3.x
final XFile xfile = await controller!.takePicture();
     debugPrint("camera id is ${controller!.cameraId}");
     Uint8List imageBytes = (await rawImage?.readAsBytes()) as Uint8List;

     img.Image? originalImage = img.decodeImage(imageBytes);
     img.Image fixedImage = img.flipHorizontal(originalImage!);

     File file = File(xfile.path);
     File fixedFile = await file.writeAsBytes(
       img.encodeJpg(fixedImage),
       flush: true,
     );

CamerAwesome now has a simple setting mirrorFrontCamera that let you decide wether you want the output to be mirrored or not.
Example usage:
CameraAwesomeBuilder.awesome(
  saveConfig: SaveConfig.photoAndVideo(
    photoPathBuilder: () => path(CaptureMode.photo),
    videoPathBuilder: () => path(CaptureMode.video),
    initialCaptureMode: CaptureMode.photo,
  ),
  onMediaTap: (mediaCapture) {
    OpenFile.open(mediaCapture.filePath);
  },
  mirrorFrontCamera: true, // Set it to true for mirroring, false otherwise
)

Feel free to share feedback!

Still persists.. But I found a solution using the image package:
import 'package:image/image.dart' as img;

  late CameraController _controller;
  late bool _isRearCameraSelected;
  late bool confirm;
  late bool isFlash;
  late XFile image;
  late img.Image flippedImage;

  Future<void> initCamera(CameraDescription cameraDescription) async {
    _controller = CameraController(
      cameraDescription,
      ResolutionPreset.high,
      enableAudio: false,
    );
    try {
      await _controller.initialize();

      if (!mounted) return;

      setState(() {});
    } on CameraException catch (e) {
      debugPrint("camera error $e");
    }
  }

  @override
  void initState() {
    super.initState();
    _isRearCameraSelected = true;
    confirm = false;
    isFlash = false;
    initCamera(widget.camera[0])
        .whenComplete(() => _controller.setFlashMode(FlashMode.off));
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }  Future<void> initCamera(CameraDescription cameraDescription) async {
    _controller = CameraController(
      cameraDescription,
      ResolutionPreset.high,
      enableAudio: false,
    );
    try {
      await _controller.initialize();

      if (!mounted) return;

      setState(() {});
    } on CameraException catch (e) {
      debugPrint("camera error $e");
    }
  }

  @override
  void initState() {
    super.initState();
    _isRearCameraSelected = true;
    confirm = false;
    isFlash = false;
    initCamera(widget.camera[0])
        .whenComplete(() => _controller.setFlashMode(FlashMode.off));
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

// This is the OnTap function of an InkWell widget
 () async {
                            try {
// we take the picture using the camera package
                              image = await _controller.takePicture();
                              if (!_isRearCameraSelected) {
                                flippedImage =
                                    img.decodeJpg(await image.readAsBytes())!; // we fill in the image in memory for manipulation
                                flippedImage = img.flipHorizontal(flippedImage); // we flip it
                                await img.encodeJpgFile(
                                    image.path, flippedImage); // and finally override the original image with the corrected one
                              }
                              // display the confirm
                              setState(() {
                                confirm = !confirm;
                              });
                            } catch (e) {
                              developer.log(e.toString(),
                                  name: "exception in takePicture");
                            }
                          }

I found a workaround involving a third party library: [package:image](https://pub.dev/packages/image)
import 'package:image/image.dart' as img; // import the library

// Then in your *Stateful* widget:

  late CameraController _controller;
  late bool _isRearCameraSelected; // have some variable to handle the state of switching between cameras...
  late XFile image; // the image file, managed by the controller
  late img.Image flippedImage; // the flipped image, gonna use this as a temp variable
...

// This is our version of initializing the camera with settings, feel free to modify as needed:
  Future<void> initCamera(CameraDescription cameraDescription) async {
    _controller = CameraController(
      cameraDescription,
      ResolutionPreset.high,
      enableAudio: false,
    );
    try {
      await _controller.initialize();

      if (!mounted) return;

      setState(() {});
    } on CameraException catch (e) {
      debugPrint("camera error $e");
    }
  }

  @override
  void initState() {
    super.initState();
    _isRearCameraSelected = true;
    confirm = false;
    isFlash = false;
    initCamera(widget.camera[0])
        .whenComplete(() => _controller.setFlashMode(FlashMode.off));
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

...

// Down into the function callback for when you click on a button to switch cameras:
 () async {
                            try {
                              image = await _controller.takePicture();
                              if (!_isRearCameraSelected) {
                                flippedImage =
                                    img.decodeJpg(await image.readAsBytes())!;
                                flippedImage = img.flipHorizontal(flippedImage);
                                await img.encodeJpgFile(
                                    image.path, flippedImage);
                              }
                              // display the confirm
                              setState(() {
                                confirm = !confirm;
                              });
                            } catch (e) {
                              developer.log(e.toString(),
                                  name: "exception in takePicture");
                            }
                          }

Still an issue for us.
we don't want to use a 3rd party plugin for this, and flipping videos with ffmpeg is a hudge performance problem.
Can we have a flag to prevent mirroring ? or to get the non mirrored video after record... ?
like iOS does in photo app when recording a video with front camera.

While using Transform or other post processing might work, with the release of camera: 0.10.4, the plugin allows for the camera to be flipped mid video recording. This means that simple flipping of the video post capture will no longer be correct as both parts of the video, those of the front and the back lens would be flipped.
If there are any native APIs that allow for the recording to be saved as previewed, then the camera plugin should probably expose them. Otherwise, recordings with multiple cameras will more or less always be incorrect if the user of the plugin will want to show exactly what was previewed to the user and save the video as such.

This issue should be closed after adding the mirror attribute (true, false) to the camera plugin itself

any update ?

Working fine in iOS but in Android it's still saving mirrored video/image. Any idea when it will be resolve?

Please add setMirror method and update target sdk to 33 currently it 28

any update ?

If you're only looking for solving mirror image issue try below snippet when user takes picture from front camera, however there is still issue of video mirroring though 🙃
this issue needs to be fixed ASAP
import 'dart:io';
import 'dart:typed_data';
import 'package:image/image.dart' as img;

  /// Flips and overrides provided image.
  static String flipImage(String path) {
    // Read the image from file.
    final inputImageFile = File(path);
    final bytes = inputImageFile.readAsBytesSync();
    var image = img.decodeImage(Uint8List.fromList(bytes))!;

    // Flip the image.
    image = img.flip(image, direction: img.FlipDirection.horizontal);

    // Save the flipped image.
    File(path).writeAsBytesSync(Uint8List.fromList(img.encodeJpg(image)));
    'Flipped image saved to: $path'.logD;
    return path;
  }

Is there any solution looking to come from this at all? By all appearances, the package camerawesome has managed to turn front camera mirroring into a toggle-able feature. Just curious if there's any similar solutions in the works for the main camera plugin. Recording any video (or image) content with text or other similar content is not really doable right now. At least not without doing video processing after the fact

I can't imagine a person in this world who likes to take a selfie without mirror mode on the camera. However, this package does not allow you to do that, even though this feature was requested in 2019. I understand that Flutter is a huge project and requires prioritizing. But, my question is: Should it be a priority to run Flutter even on a washing machine, when you still can't take a proper selfie on an iPhone? 🤷🏼♂

@siddharthadevops Hi, it's not about taking a photo not in selfie mode, it's about taking a video, as camera plugin serve both of this...
Taking a video in mirror mode is not the problem, but saving it in mirror mode it is, if you have something in background like a car, a brand name, it's all reversed... what would be great is to choose it, like in iOS / Swift

@jeyremy Hi, what I was trying to emphasize is that issues like this should be prioritized in the platform roadmap. Flutter should provide full support for enabling and disabling mirroring through this package and also image_picker, which depends on it. For both image and video, at the time the content is captured and, of course, at the time it is saved. Post-processing of content, especially video, is not an option.

Flutter should provide full support for enabling and disabling mirroring through this package and also image_picker, which depends on it.

image_picker does not depend on the camera package; the camera UI that is available through image_picker is provided entirely by the OS.

if it just about UI
Transform.flip(
    flipX: true,
    child: Image.file(
      File(selfieImagePath!),
    ),
  )

If you're only looking for solving mirror image issue try below snippet when user takes picture from front camera, however there is still issue of video mirroring though 🙃
this issue needs to be fixed ASAP
import 'dart:io';
import 'dart:typed_data';
import 'package:image/image.dart' as img;

  /// Flips and overrides provided image.
  static String flipImage(String path) {
    // Read the image from file.
    final inputImageFile = File(path);
    final bytes = inputImageFile.readAsBytesSync();
    var image = img.decodeImage(Uint8List.fromList(bytes))!;

    // Flip the image.
    image = img.flip(image, direction: img.FlipDirection.horizontal);

    // Save the flipped image.
    File(path).writeAsBytesSync(Uint8List.fromList(img.encodeJpg(image)));
    'Flipped image saved to: $path'.logD;
    return path;
  }

This function failed on Samsung devices. It rotated image instead of flipping.
This worked perfectly for me: https://github.com/flutter/flutter/issues/72243#issuecomment-747067005

My problem is that I use image picker package for the user to take an image from any of the cameras, front or rear, and I only want to mirror if the image was taken with the front camera. When the plugin returns an image I can't tell which camera it was taken with, so I can't apply any transformations.

My problem is that I use image picker package for the user to take an image from any of the cameras, front or rear, and I only want to mirror if the image was taken with the front camera. When the plugin returns an image I can't tell which camera it was taken with, so I can't apply any transformations.

If user takes image from image picker there is no problem with mirror effect

Maybe I'm missing something. I think it is a problem because of what I explained before. Because I can't determine the origin of the photo, front or rear camera, I don't know whether to apply the mirror effect or not.
This only happens on iOS, on Android pictures taken with the front camera have the mirror effect applied.

Maybe I'm missing something. I think it is a problem because of what I explained before. Because I can't determine the origin of the photo, front or rear camera, I don't know whether to apply the mirror effect or not. This only happens on iOS, on Android pictures taken with the front camera have the mirror effect applied.

If you get a captured JPEG, you may (in some cases) determine the source camera by examining the EXIF headers of this file. EXIF headers can provide rather detailed description of the camera that was used. E.g. Camera maker, Camera model…One indicator that can help is the Focal length. Here, this is 3.5-4mm for the "main" camera, and 2mm for the secondary lens.

Now, that the default android camera implementation is camerax is there a change this issue is revisted?
The problem with workarounds (other than using a another package) is that when using the mid-recording camera switching feature, you can no longer post process the video.
This seems like a major blocker for applications that try to create a camera experience that mimics the social media camera behaviour (record and double tap to change the camera used and save the video as previewed).
@stuartmorgan you originally assigned a p3 on this issue back in 2021. Have priorities shifted since then?

Any updates on this?

Do we have a release plan for a fix? As of today I still experience this issue. It would be great to let the developer choose to flip or not.
Updating the UI or editing the file afterwards is not a valid solution as the Camera will show a preview of the flipped photo for confirmation, leading to incoherent user experience.
If you know how to alter the confirmation preview with the current version of the package, please let me know.

I do have a  workaround. Not a fix, but a temporary solution to deal with this.
if you open the camera package itself, inside the .pub-cache folder, and find the camera_avfoundation-{version}
go to the ios folder then camera_avfoundation/Sources/FLTCam.m
Inside the file, find the line with
connection.videoMirrored = Yes;

Change it to No and save it.
When you build using this dependency in future, your output video will be recorded without mirroring. Unfortunately your preview also becomes unmirrored, but I find its easier to apply a conditional horizontal flip with a transform widget to correct thiis.
I feel like the ideal solution in future would be to have the package be able to pass and update this property through the CameraController, then auto-apply corrections to the preview. Also keep in mind, any time replacing the dependency. ie with a new version, this property will have to be updated again.


feat(eslint): add linting rules for testing

PR Checklist
Please check if your PR fulfills the following requirements:

[ ] The commit message follows our guidelines: https://github.com/graycoreio/daffodil/blob/develop/CONTRIBUTING.md#commit
[ ] Tests for the changes have been added (for bug fixes / features)
[ ] Docs have been added / updated (for bug fixes / features)

PR Type
What kind of change does this PR introduce?

[ ] Bugfix
[x] Feature
[ ] Code style update (formatting, local variables)
[ ] Refactoring (no functional changes, no api changes)
[ ] Build related changes
[ ] CI related changes
[ ] Documentation content changes
[ ] Other... Please describe:

What is the current behavior?

#122
What is the new behavior?
Maximum describe() depth of 3 set for tests.
Does this PR introduce a breaking change?
[ ] Yes
[x] No

Other information

This is awesome! @griest024 do you think we should set depth to 4 as warning, and 5 as error? I only see a few with 5, but many more with 3/4.

@damienwebdev 5 as an error sounds good. Can we mix error and warning values for the same rule? Afaik eslint does not allow for this.

https://github.com/graycoreio/daffodil/blob/d41bc5a949b1e827e35129ea4c0d449a2a8a7b47/tools/eslint/config/package.json#L14 needs an update for the dependency as well

needs a rebase

@gracetxgao Needs another rebase.


Database support

face_recognition version: 1.2.3
Python version: 3.9.5
Operating System: Window 10 x64 21H1 (19043.1081)

I know there is an example about web_service, however I only find the method (face_recognition.load_image_file) to load the original pictures. Is it possible that add one method to load images from database( just like mongoDB,pgSQL,mySQL)? If add the support about database, I can easily build one web application.
Sorry for my poor English. Thank you very much.

Yes their is a way I will make pull request on this file you get that how we attach our database with the face recognition programe.

And a piece of advise use python 3.6.0 for better compatibility of using face recognition programme.

Hey your issue is been resolved tell me if their is any problem check the file datset.py first and then go detector.py


deps convert output to stdout

It would be useful (at least to me) to be able to output the results of deps convert to wherever I want instead of it creating a file for me.  My specific use case is actually just a workaround while I wait for #129.
Currently my process looks like this to make a requirements.txt:
dephell deps convert # Creates a requirements.txt
echo --extra-index-url=$PRIVATE_URL > temp.txt
tail -n +2 requirements.txt >> temp.txt # Includes everything but the -i which doesn't work with --extra-index-url
rm requirements.txt
mv temp.txt requirements.txt

Obviously this would be nicer if I could do:
echo --extra-index-url=$PRIVATE_URL > requirements.txt
dephell deps convert | tail -n +2 >> requirements.txt

Not sure if there will be too many use cases after #129 is done, maybe for piping the output to pip for some reason?

Extra indices is already implemented in #129. I'm not ready to merge it, because I'm not sure about some corner cases yet :)
Anyway, I thought about stdout output, that's good point. Let's do it.

Realization is quite simple, btw. Just check that output file name is "stdout" and do print(dumper.dumps(...))

Cool, I can give it a shot later tonight if you want.

Closed in #140


How can I repeat this entry using typewind

How can I repeat this entry using typewind
it's custom color with opacity

Custom colours with opacity aren't currently supported by typewind's tw.* syntax. But I'm not sure what you mean by repeat. You could extract it out into a variable like
const custom_gradient = tw.raw("from-[#1F0637]/70")

and later use that
const style = `${custom_gradient} ${tw.bg_red}`

. If it's something else then feel free to comment here


Kusto 1.0.0b1

This is a track2 we start in TypeSpec

@lmazuel @sandeep-sen I need service tree service/product link.  Do you have a contact who can help sort out?  Service partners will need to have a product entry in service tree to associate the release plan.  Without they cannot create a release plan using the release planner at this time.


Feature/mmanyin/include geoschem

This allows GEOS-Chem (v12.4.0)  chemistry to be setup and run "out of the box".
Example HISTORY collections have been edited to comment out diagnostics that are
not supported yet in the latest GEOS-Chem release.
GEOS-Chem timestep is set to be 2 x HEARTBEAT, by default.
INTERNAL and IMPORT restarts for GEOS-Chem are now in AGCM.rc.tmpl,
commented out by default, and the setup scripts uncomment them as needed.
This PR is "zero diff" for standard PCHEM simulations.

@sdrabenh - Please consider approving this PR in the near term;  there is a new CHEM release that coincides with this PR, and the only impact on AGCM.rc is the addition of some commented lines. Thanks!

Actually there is one more change that belongs in AGCM.rc.tmpl --
@adarmenov asked that we remove the line with GOCART_DT, even though it's commented out,
since at this point not all species work correctly when GOCART_DT /= HEARTBEAT_DT.
I've just included that edit in the PR .  Let me know if it's preferable to just add a comment "not currently supported", to reduce the chance that users will just add GOCART_DT back in.
Note that GEOSchem_GridComp  v1.0.5  enforces GOCART_DT==HEARTBEAT_DT.

I think adding the comment "not currently supported" is preferable in order to alert users that things have changed since it seems to be a well known parameter. Also, I will review this pull request with Larry tomorrow (when I'm back in the office). Everything seems okay with me, but I am no expert.


Add testcase to verify obj mtime post setattrs

Object mtime should not change for any attr changes unless its a copy operation.
Verify the same using PutObjectACL op.
Tracker: https://tracker.ceph.com/issues/61770
Fix: https://github.com/ceph/ceph/pull/52160

I will backport it to ceph-master once https://github.com/ceph/ceph/pull/52160# is merged

cherry-picked to ceph-master

thanks @soumyakoduri! i saw this test case fail against dbstore, so opened https://tracker.ceph.com/issues/61915 to track it. if it's not an easy fix in dbstore, feel free to filter it out

thanks @soumyakoduri! i saw this test case fail against dbstore, so opened https://tracker.ceph.com/issues/61915 to track it. if it's not an easy fix in dbstore, feel free to filter it out

oops..thanks @cbodley .. I missed to re-run after merging other dbstore test PR. Will fix it.


Lift Understanding for control group

Bug description
The model has suggested me to run ads in 3 cities and have 'x'  value as incremental Y for 15 days. If, the results are similar when the ads are run in those cities - what conclusion should I make? Should I then be running the same advertisement in my control group as well where initially the advertisements were not executed? Does, it mean if I run the same advertisement in the rest of the cities I would be getting a similar lift?
Session information
Reproduction steps
Enter steps to reproduce the behavior.
Expected behavior
Give a clear and concise description of what you expected to happen.
Output goes here

Additional context
Add any other context about the problem here. (like proxy settings, network setup, overall goals, etc.)

Hi @roh-neenopal! Could you expand a bit of this scenario?
GeoLift works by analyzing the incremental effect of an intervention (generally running ads). Therefore, if the GeoLift model suggested running ads in 3 locations for 15 days, we wouldn't run ads on the control locations for the same duration. This will allow us to create a counterfactual and measure what was the true Lift of those ads. Inverse Geolifts are a great alternative when you want to have small holdouts!

So, the situation is as follows:-
Let's say that Geolift suggests that you should add City A, B and C in your test group for 15 days and you will get an incremental Y = 5000. In real-world, we conduct the same. Now, lets suppose there are three scenarios : A - Increment Y is 5000; B - Increment Y is 10,000 and C - Increment Y is 10. What conclusions can I make in all three scenarios.  If the expected increment Y is similar to real Increment Y - what should we do then? Should I also make the new changes in my control group too

If my expect lift is same as real-lift for an ad. What should be my next steps? Is it safe to say, that now since I know the lift for an ad through the treatment group - now I can run the ad in my control group as-well?

Hi @roh-neenopal!
So, simplifying it, there are two moments in GeoLift: one is before the test, the other is after the test.
Before the test, you will run the power module of GeoLift and select which are the best locations to build your treatment.  Along with other metrics, this will give you the Minimum Detectable Effect (this is what you are referring to as "expect lift").  This is the smallest effect size that we will be able to detect with sufficient confidence in our result.  If it is 5% for example, it means that if the real effect is below 5% (2%) we probably will not be able to observe it with high confidence.
After the test, you run the post-test analysis module that evaluates what the real effect of the treatment is.  So, the MDE and the real lift are independent, the MDE is just one of the metrics we use to signal if your treatment group can work for your particular dataset.
Going to your last question, after the test, GeoLift will tell you the effect of applying the treatment on the treatment group.  This can also tell you what is the Cost Per Incremental Conversion of running your treatment.  This can be used to calibrate attribution models or to have a general idea of how much each conversion influenced by this media cost you.  At this point in time, you should decide on thinking about new hypothesis of things to test.  If you don't want to do any more tests, its safe to show media to the entire country again, since the experiment has finished.
Related to your first question, as @ArturoEsquerra mentioned, GeoLift will give you the aggregate effect for the treatment in the treatment group.  Therefore, you cannot split the incremental between A, B & C, you can only see the effect for A+B+C since this is what the expeirment was built for.  If you would like to get the incremental for each separate city, you would have to build three different GeoLift experiments.


Revise DeMutableCSR to adapt DynamicFragment

What do these changes do?
Revise DeMutableCSR to adapt DynamicFragment

Related issue number

Fixes

Codecov Report

Merging #99 (dc580c9) into master (12d0959) will decrease coverage by 0.39%.
The diff coverage is 42.85%.

@@            Coverage Diff             @@
##           master      #99      +/-   ##
==========================================
- Coverage   72.19%   71.79%   -0.40%
==========================================
  Files          60       60
  Lines        4984     5039      +55
==========================================
+ Hits         3598     3618      +20
- Misses       1386     1421      +35

Flag
Coverage Δ

app_tests
71.79% <42.85%> (-0.40%)
:arrow_down:

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

grape/graph/de_mutable_csr.h
39.85% <41.05%> (-0.54%)
:arrow_down:

grape/fragment/csr_edgecut_fragment_base.h
64.24% <100.00%> (ø)

grape/graph/immutable_csr.h
90.62% <100.00%> (ø)


Operator controller rolling upgrade support for 1.6

Want to get on the books that we need a seamless (NO CLI's required) upgrade from 1.5 to 1.6 with the operator controller POD.    If there any incompatible control plane changes for 1.6, those need to be handled by the operator via the single IOP cr resource.

cc @sdake @linsun

This seems to be basically working, will close for now.


feat: Add support for repository creation template

Description

Add support for repository creation template

Motivation and Context

Breaking Changes

How Has This Been Tested?

[ ] I have updated at least one of the examples/* to demonstrate and validate my change(s)
[ ] I have tested and validated these changes using one or more of the provided examples/* projects

[ ] I have executed pre-commit run -a on my pull request

CI failure is superfluous - looks like pre-commit is removing the trailing line and a later hook is ensuring the trailing line is present

This PR is included in version 2.3.0 :tada:


[Bug] InternVL2-1B performance of lmdeploy is much worse compared to the original Hugging Face PyTorch model.

Checklist

[X] 1. I have searched related issues but cannot get the expected help.
[X] 2. The bug has not been fixed in the latest version.
[X] 3. Please note that if the bug-related issue you submitted lacks corresponding environment info and a minimal reproducible demo, it will be challenging for us to reproduce and resolve the issue, reducing the likelihood of receiving feedback.

Describe the bug
InternVL2-1B performance of lmdeploy is much worse compared to the original Hugging Face PyTorch model.
Reproduction
Thanks for your great work.
My task is to do image caption and I tried OpenGVLab/InternVL2-1B from Here and used the sample code from quick start to run the model. I found the performance is clearly worse in lmdeploy (but faster).
For example:

(source image:  https://content.api.news/v3/images/bin/7c169b05712f7657366268afaa47ae88 )

transformers version will response:  The image shows a group of police officers at a McDonald's restaurant, with a white car parked in front of them.
lmdeploy version will response: The image shows a police officer and a uniformed officer in a parking lot in front of a McDonald's restaurant. The officer in the uniform is in a handcuff, and the officer in the police uniform is in a handcuff. The McDonald's restaurant is in the background with a McDonald's and a Starbucks Coffee.

One can see the responses keep repeating similar sentence.
I tried many cases and different parameter (include repetition_penalty) but didn't work and sometime lmdeploy also response Chinese like The CCTV is in the parking lot of a convenience store, with a Coke-Cola vending machine and a suspiciously parked car. The store's facade is a stone and brick wall, and the parking lot is a curb with a red and white警示标志。
(although I have replaced Chinese system prompt in pipe.chat_template.meta_instruction and asked it must answer in English)
I tried QwenVL2-2B, and its performance remained consistent, but the memory usage of InternVL2-1B is more suitable for the scenario I'm dealing with.
Do you have any thoughts or suggestions on this issue?  I'm using lmdeploy 0.6.2
BTW,  I try a few VLM models (QwenVL, InternVL series) and I found the memory usage is higher(5g->6G) but speed is faster(10s->3s). Is this the expected phenomenon?
Thank you very much!
Environment
I'm using lmdeploy 0.6.2, torch 2.2.0 (install by pip)

Error traceback
No response

Thanks for your feedback. Could you provide a sample code to reproduce the results you mentioned using lmdeploy.
As for

Thanks for your response. Here is my code:
The upper part is the transformers version, and the lower part is lmdeploy, separated by a comment in between
import torch
from transformers import AutoTokenizer, AutoModel
import numpy as np
import torchvision.transforms as T
from PIL import Image
import time
from torchvision.transforms.functional import InterpolationMode

from lmdeploy import pipeline, TurbomindEngineConfig, GenerationConfig, PytorchEngineConfig, ChatTemplateConfig

model_path = 'OpenGVLab/InternVL2-1B'
prompt = "AI: "
system_prompt = """Describe what is happening in the image concisely.
Focus on the key observable points or any unusual events occurring in the image.

# Rules
- The description should be less than three sentences.
- The response must be in plain English without any formatting (e.g., no bullet points, Markdown, or JSON).
"""

test_img_list = ["test_img.jpeg"]

IMAGENET_MEAN = (0.485, 0.456, 0.406)
IMAGENET_STD = (0.229, 0.224, 0.225)

def build_transform(input_size):
    MEAN, STD = IMAGENET_MEAN, IMAGENET_STD
    transform = T.Compose([
        T.Lambda(lambda img: img.convert('RGB') if img.mode != 'RGB' else img),
        T.Resize((input_size, input_size), interpolation=InterpolationMode.BICUBIC),
        T.ToTensor(),
        T.Normalize(mean=MEAN, std=STD)
    ])
    return transform

def resize_image(img, max_image_size):
  width, height = img.size

  if max(width, height) > max_image_size:
      scaling_factor = max_image_size / float(max(width, height))
      new_width = int(width * scaling_factor)
      new_height = int(height * scaling_factor)
      img = img.resize((new_width, new_height), Image.LANCZOS)
      print(f'Image is resized from {width} x {height} to {new_width}x{new_height}')

  return img

def load_image(image_file, transform=None):
    image = Image.open(image_file).convert('RGB')
    image = resize_image(image, 512)
    if transform:
        pixel_values = torch.unsqueeze(transform(image), dim=0)
        return pixel_values
    else:
        return image

model = AutoModel.from_pretrained(
    model_path,
    torch_dtype=torch.bfloat16,
    # load_in_8bit=True,
    low_cpu_mem_usage=True,
    # use_flash_attn=True,
    attn_implementation="flash_attention_2",
    use_safetensors=True,
    trust_remote_code=True).eval().cuda()

tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True, use_fast=False)
transform = build_transform(input_size=448)
generation_config = dict(max_new_tokens=512,
                         do_sample=False,
                         temperature=0.8,
                         repetition_penalty=1,
                         )

for image_path in test_img_list:
    print(image_path)
    start_time = time.time()

    pixel_values = load_image(image_path, transform).to(torch.bfloat16).cuda()
    question = system_prompt
    breakpoint()
    response = model.chat(tokenizer, pixel_values, question, generation_config)

    print(f'elapsed time: {time.time() - start_time}')
    print(response)
    print('-' * 50)

# ================================= for lmdeploy part =================================

backend_config = TurbomindEngineConfig(# session_len=2048,
                                       # cache_chunk_size = 0,
                                       # max_batch_size = 1, # does not help
                                       # quant_policy=8,  # does not help and have higher prob to get bad answer
                                       # cache_block_seq_len = 32,
                                       eager_mode=True,
                                       # max_prefill_token_num=2048,
                                       enable_prefix_caching=False,  # it will output same sentence
                                       cache_max_entry_count=0.01,
                                       tp=1
                                       )

pipe = pipeline(model_path, backend_config=backend_config, log_level='WARN')
pipe.chat_template.meta_instruction = system_prompt

gen_config = GenerationConfig(temperature=0.5,
                              repetition_penalty=1.5,
                              do_sample=False,
                              # max_new_tokens=256  #default=512
                              )

for image_path in test_img_list:
    start_time = time.time()
    print(image_path)
    image = load_image(image_path)
    for i in range(3):  # it will response "internal error happened for some images, then retry (but still same error)"
        response = pipe((prompt, image), gen_config=gen_config)
        elapsed_time = time.time() - start_time

        print(f'elapsed time: {elapsed_time}')
        print(response.text)
        if response.text != "internal error happened":
            break
    print('-' * 50)

I appreciate your response, thank you!

@henry16lin hi, thanks for your sample code. There are two differences with the inference between hf and lmdeploy in your script . Pls try to keep the inputs are same and then compare the inference outputs

The pre-processings are different. Lmdeploy are aligned with example code in hf
hf uses default system_prompt but lmdeploy uses the custom system_prompt in your script

yes, that are few different, but I don't think that is the key factor result in poor response...
To clarify that, I just fully paste the same code (just modify the image source) from quick start in hf model card and the quality of the descriptions still varies significantly.
Here is the code: (almost same from quick start)
import numpy as np
import torch
import torchvision.transforms as T
from PIL import Image
from torchvision.transforms.functional import InterpolationMode
from transformers import AutoModel, AutoTokenizer

IMAGENET_MEAN = (0.485, 0.456, 0.406)
IMAGENET_STD = (0.229, 0.224, 0.225)

def build_transform(input_size):
    MEAN, STD = IMAGENET_MEAN, IMAGENET_STD
    transform = T.Compose([
        T.Lambda(lambda img: img.convert('RGB') if img.mode != 'RGB' else img),
        T.Resize((input_size, input_size), interpolation=InterpolationMode.BICUBIC),
        T.ToTensor(),
        T.Normalize(mean=MEAN, std=STD)
    ])
    return transform

def find_closest_aspect_ratio(aspect_ratio, target_ratios, width, height, image_size):
    best_ratio_diff = float('inf')
    best_ratio = (1, 1)
    area = width * height
    for ratio in target_ratios:
        target_aspect_ratio = ratio[0] / ratio[1]
        ratio_diff = abs(aspect_ratio - target_aspect_ratio)
        if ratio_diff < best_ratio_diff:
            best_ratio_diff = ratio_diff
            best_ratio = ratio
        elif ratio_diff == best_ratio_diff:
            if area > 0.5 * image_size * image_size * ratio[0] * ratio[1]:
                best_ratio = ratio
    return best_ratio

def dynamic_preprocess(image, min_num=1, max_num=12, image_size=448, use_thumbnail=False):
    orig_width, orig_height = image.size
    aspect_ratio = orig_width / orig_height

    # calculate the existing image aspect ratio
    target_ratios = set(
        (i, j) for n in range(min_num, max_num + 1) for i in range(1, n + 1) for j in range(1, n + 1) if
        i * j <= max_num and i * j >= min_num)
    target_ratios = sorted(target_ratios, key=lambda x: x[0] * x[1])

    # find the closest aspect ratio to the target
    target_aspect_ratio = find_closest_aspect_ratio(
        aspect_ratio, target_ratios, orig_width, orig_height, image_size)

    # calculate the target width and height
    target_width = image_size * target_aspect_ratio[0]
    target_height = image_size * target_aspect_ratio[1]
    blocks = target_aspect_ratio[0] * target_aspect_ratio[1]

    # resize the image
    resized_img = image.resize((target_width, target_height))
    processed_images = []
    for i in range(blocks):
        box = (
            (i % (target_width // image_size)) * image_size,
            (i // (target_width // image_size)) * image_size,
            ((i % (target_width // image_size)) + 1) * image_size,
            ((i // (target_width // image_size)) + 1) * image_size
        )
        # split the image
        split_img = resized_img.crop(box)
        processed_images.append(split_img)
    assert len(processed_images) == blocks
    if use_thumbnail and len(processed_images) != 1:
        thumbnail_img = image.resize((image_size, image_size))
        processed_images.append(thumbnail_img)
    return processed_images

def load_image(image_file, input_size=448, max_num=12):
    image = Image.open(image_file).convert('RGB')
    transform = build_transform(input_size=input_size)
    images = dynamic_preprocess(image, image_size=input_size, use_thumbnail=True, max_num=max_num)
    pixel_values = [transform(image) for image in images]
    pixel_values = torch.stack(pixel_values)
    return pixel_values

# If you want to load a model using multiple GPUs, please refer to the `Multiple GPUs` section.
path = 'OpenGVLab/InternVL2-1B'
model = AutoModel.from_pretrained(
    path,
    torch_dtype=torch.bfloat16,
    low_cpu_mem_usage=True,
    use_flash_attn=True,
    trust_remote_code=True).eval().cuda()
tokenizer = AutoTokenizer.from_pretrained(path, trust_remote_code=True, use_fast=False)

pixel_values = load_image('test_img.jpeg', max_num=12).to(torch.bfloat16).cuda()
generation_config = dict(max_new_tokens=1024, do_sample=True)

question = '<image>\ndescribe this image.'
response = model.chat(tokenizer, pixel_values, question, generation_config)
print(f'User: {question}\nAssistant: {response}')

print('=============================================================================')

from lmdeploy import pipeline, TurbomindEngineConfig
from lmdeploy.vl import load_image

model = 'OpenGVLab/InternVL2-1B'
image = load_image('test_img.jpeg')

pipe = pipeline(model, backend_config=TurbomindEngineConfig(session_len=8192))
response = pipe(('describe this image', image))
print(response.text)

and the response are as follow:
# hf:
User: <image>
describe this image.
Assistant: The image captures a scene outside a McDonald's restaurant.  The officers appear to be engaged in a conversation or discussion. One officer is holding a folder. The car might be parked there temporarily, as there is a yellow line in the parking area. In the background, McDonald's restaurant sign can be seen alongside a greenery from McDonald's canteen. The weather appears to be rainy, as there are puddles on the road surface. A woman in pink is standing slightly away, and there is a clear view of a trash can labeled with an "PPS" mark in front of a pedestrian exit area.

# lmdeploy:
The image shows a police officer and a uniformed officer in a parking lot in front of a McDonald's restaurant. The officer in the uniform is in a handcuff, and the officer in the police uniform is in a conversation. The McDonald's restaurant is in the background with a McDonald's McDonald's and a Starbucks Coffee. The parking lot is wet, and there are a few parked cars.

Thank you for your response and please help me to use InternVL2-1B with lmdeploy 🙏

@henry16lin hi, could you try with InternVL2-2B. Seems the smaller LLMs are not tolerant to the slightly  implementation differences between transformers and lmdeploy.

Yes, I had tried InternVL2-2B in lmdeploy but it need around 6G memory and it returns empty string to me...
My use case can only occupy less than 4GB of memory

In that case, could you try with quantization to reduce runtime mem  https://lmdeploy.readthedocs.io/en/latest/quantization/w4a16.html#

Model inference takes from 0.4s to 0.23s with lmdeploy , is it normal?  it is also too slow

@qiuhaining @lukashelff hi，vlm models are refactored on this PR https://github.com/InternLM/lmdeploy/pull/2810 . Could you have a try?


Swift not able get log level working for debug and release mode

Hello,
I have integrated framework in a macOS Swift project and it's working as expected but I recently realized that log level in Debug and Release mode is all same. In Objective-C I used to define ddLogLevel with Debug macro and it works all good but and for the Swift, I have defined same in Bridging header file. See below -
@import CocoaLumberjack;

#ifdef DEBUG
static  const int ddLogLevel = DDLogLevelInfo;
#else
static const int ddLogLevel = DDLogLevelError;
#endif

Logger is initialized in AppDelegate.swift, so even if I change to Error/Info for debug mode it is logging all statements,  Please advise if I am missing something here.
Update: Even I remove ddLogLevel app does compile and works without it so now not sure where to define the log level?
Thanks.

@mpogra The ddLogLevel you are setting is not used at all in Swift and is just for the Objective-C version of CocoaLumberjack. In Swift, there are two log levels you can define. However, only one of them is defined in code, the other is defined at build time.
One level is defined in your GCC_PREPROCESSOR_DEFINITIONS build setting. There you can add a DD_LOG_LEVEL define with whatever log level you want to log at the minimum (e.g. DDLogLevelInfo). Note, however, that this is the absolute minimum. There is no way to dynamically decrease the log level below this define. This is necessary to make sure, Swift does strip the strings which are not logged out of the binary.
The other, more dynamic level is defined using the global Swift variable dynamicLogLevel. With this, you can further control, what messages are logged and this one is also changeable at runtime. Strings that are below that level are not stripped from the binary, however.
Both levels have a default of DDLogLevelAll.
Hope I could help. I'm closing this since it isn't really an "issue" with CocoaLumberjack, but feel free to comment again if you have further questions.

Thanks so much for the details information and it is now clear to me. Surprisingly I wasn't able to find it anywhere, maybe it can be added to Swift integration docs.


error with Learning from User Demonstration

HostAgent and Appagent both using qwen-vl-max model。
API_TYPE: "Qwen" ,  API_KEY: "sk-",    API_MODEL: "qwen-vl-max",

execute the command:  python -m record_processor -r "calc sin30" -p "C:\Users\chen\Desktop\sinmath.zip"
sinmath.zip
1.

error：
example1
Error making API request: list index out of range
The API request of APP_AGENT failed: local variable 'response' referenced before assignment.
Switching to use the backup engine...
Error making API request: list index out of range
Traceback (most recent call last):
  File "C:\Users\chen\UFO\ufo\llm\qwen.py", line 68, in chat_completion
    messages=self.process_messages(messages),
  File "C:\Users\chen\UFO\ufo\llm\qwen.py", line 163, in process_messages
    img_data = content["image_url"]["url"].split(
IndexError: list index out of range

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\chen\UFO\ufo\llm\llm_call.py", line 66, in get_completions
    response, cost = service(configs, agent_type=agent_type).chat_completion(
  File "C:\Users\chen\UFO\ufo\llm\qwen.py", line 106, in chat_completion
    print_with_color(str(response), "red")
UnboundLocalError: local variable 'response' referenced before assignment

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\chen\UFO\ufo\llm\qwen.py", line 68, in chat_completion
    messages=self.process_messages(messages),
  File "C:\Users\chen\UFO\ufo\llm\qwen.py", line 163, in process_messages
    img_data = content["image_url"]["url"].split(
IndexError: list index out of range

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:\Users\chen\anaconda3\envs\ufo\lib\runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "D:\Users\chen\anaconda3\envs\ufo\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "C:\Users\chen\UFO\record_processor\__main__.py", line 7, in <module>
    record_processor.main()
  File "C:\Users\chen\UFO\record_processor\record_processor.py", line 54, in main
    summaries, total_cost = summarizer.get_summary_list(record)
  File "C:\Users\chen\UFO\record_processor\summarizer\summarizer.py", line 69, in get_summary_list
    response_string_list, cost = get_completions(
  File "C:\Users\chen\UFO\ufo\llm\llm_call.py", line 76, in get_completions
    return get_completions(
  File "C:\Users\chen\UFO\ufo\llm\llm_call.py", line 80, in get_completions
    raise e
  File "C:\Users\chen\UFO\ufo\llm\llm_call.py", line 66, in get_completions
    response, cost = service(configs, agent_type=agent_type).chat_completion(
  File "C:\Users\chen\UFO\ufo\llm\qwen.py", line 106, in chat_completion
    print_with_color(str(response), "red")
UnboundLocalError: local variable 'response' referenced before assignment

after fix some bugs，now it run ok.


  We should use them.

Actually, with the way stuff is right now, this doesn't really work for us.  Travis' documentation says that data doesn't persist between stages and jobs which makes our situation a tad difficult because we build a Docker image when we're testing, and expect to be able to push that when we're done.  I'd rather not rebuild multiple times if I can avoid that.
My plan is to rewrite the deployment script(s) in Bash and use them going forward.  This will make things a bunch cleaner and more maintainable, and will enable us to use Build Stages in a slightly more sane way. (Tests would get carried out outside of the Docker Image, then everything would get packaged up.)  @hawkrives, how does this sound?

it sounds worth a shot to me!

Or...maybe we could use Python for the scripts as you had mentioned, too.


SeriesExtention method FillMissing() does not work with double.NaN

We are actually using Deedle 1.2.5 where we use the FillMissing() series extension method  do fill the missing values with double.NaN.
Since we move our libs to NetStandard we need to use version 2.x.
I tried 2.03 up to 2.3.0 but the missing value will never be replaced with double.NaN.
any ideas?
thx and Regards
Manuel

double post

Could you provide a minimal repo of sample frame or series?


Blender 4.3

Features

New 4.3 nodes and updates

For each zones

GeometryNodeForeachGeometryElementInput
GeometryNodeForeachElementOutput

Gizmos

GeometryNodeGizmoDial
GeometryNodeGizmoLinear
GeometryNodeGizmoTransform

Grease Pencil

GeometryNodeCurvesToGreasePencil
GeometryNodeGreasePencilToCurves
GeometryNodeMergeLayers

Utilities

FunctionNodeHashValue
FunctionNodeIntegerMath
FunctionNodeMatrixDeterminant
GeometryNodeSetGeometryName
GeometryNodeWarning
FunctionNodeValueToString has new setting data_type
GeometryNodeToolSetSelection has new setting selection_type
NodeReroute has new setting socket_idname

Imports

GeometryNodeImportOBJ
GeometryNodeImportPLY
GeometryNodeImportSTL

Shader

ShaderNodeBsdfMetallic
ShaderNodeTexGabor
ShaderNodeVolumeScatter has new attribute phase

Node trees can now set a default group width
Nodes can now set their warning propagation
Added whitepoint correction method to CompositorNodeColorBalance

Now throws an error if an unknown correction method is specified

Added Foreach Geometry Element zones

Fixes

Update bpy_props_array location in Blender 4.3+
Import for GeometryNodeRepeatInput includes Blender 4.0.0

Tools

Downloading bpy documentation is a little more stable now
Added new foreach element types to ST

Other

NTP version bumped to v3.3.0
Blender max version bumped to 4.4

Zones should get cleaned up, adding a new zone should be as easy as just adding the input node name to a list


Git commit coming from detached headstate rather than previous commit

https://github.com/umccr/cwl-ica/actions/runs/3293944537/jobs/5430958508 gave wrong commit ids to workflows

https://github.com/umccr/cwl-ica/blob/main/.github/workflows/sync-tools_and_sync-workflows.yml#L40-L66 should instead use the .pull_request.head.ref attribute to get the branch name.
We can also use this to collect the git commit id at .pull_request.head.sha

Resolved with #156


resolve v1.21 breaks bundled graceful-fs in nextjs

As debugged in https://github.com/browserify/resolve/issues/264, resolve v1.21 introduces a change in behaviour which in turn breaks graceful-fs. A fix in graceful-fs is released with v4.2.9, but nft seems to be bundling a lower version.
As this potentially breaks a lot of next.js babel-setups (see f.e. https://github.com/vercel/next.js/issues/33003), a rerelease with the fixed graceful-fs-package would be great!

It would also be ideal if this package didn't bundle requireable things at all, so that downstream consumers benefited from automatic in-range version updates for bugfixes (like this one) and security fixes.

Can you share the steps to reproduce the issue?

"You could use https://github.com/vercel/next.js/tree/canary/examples/with-babel-macros as a quite simple reproduction for testing. Simply clone it and run "npm install && npm dev" to see the error in the browser."
as written here https://github.com/browserify/resolve/issues/264#issuecomment-1005917464

Note that if you update graceful-fs and recreate the bundle, that should be sufficient to solve the short-term problem.

So this isn't an issue with nft which doesn't rely on resolve?

ahhh right, this was filed on the wrong repo (about relying on graceful-fs, not on resolve). It's an issue with the index.js file in https://unpkg.com/browse/next@12.0.7/dist/compiled/@vercel/nft/ which bundles the broken graceful-fs instead of requiring it.
This should be closed and filed instead of the repo for the next package.

Upon further investigation, I think the issue is the global patch here: https://github.com/vercel/nft/blob/f146d3cce10ef1bc9af9bea7778152a150c60c88/src/node-file-trace.ts#L16
I think we can change nft to call the read/write methods directly instead of doing a global patch like this.

That would also be a great long-term solution for nft :-)
(altho it'd still require next to update its bundle and/or stop bundling third party deps)


Empire-External

What about external ip? i cant configure the .bat file that contains the powershell code with my external IP to get a reverse connection from outside my lan.
btw, empire is a very good tool, Thanks !

We have that already, 'foreign' listeners http://www.powershellempire.com/?page_id=102


[HOLD for payment 2024-08-01] [$250] Invoice - Invoice thread opens when starting DM with the user after sending invoice to them

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Version Number: 9.0.6-0
Reproducible in staging?: Y
Reproducible in production?: Y
If this was caught during regression testing, add the test name, ID and link from TestRail: N/A
Issue reported by: Applause - Internal Team
Action Performed:

Go to staging.new.expensify.com
Go to FAB > Send invoice
Enter amount and select any receiver
Go to FAB > Start chat > Chat
Scroll down and click on the same user in Step 3 (invoice receiver)

Expected Result:
DM with the user will open
Actual Result:
Invoice thread with the user opens
Workaround:
Unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[x] MacOS: Desktop

Screenshots/Videos
Add any screenshot/video evidence

https://github.com/Expensify/App/assets/78819774/f0529ee6-dbab-4f63-9714-956f7a1f8240
View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~0165c9231ff254ae89
Upwork Job ID:<PHONE_NUMBER>558506425
Last Price Increase: 2024-07-11
Automatic offers:

rayane-djouah | Reviewer | 103140621

Issue OwnerCurrent Issue Owner: @trjExpensify

@trjExpensify  FYI I haven't added the External label as I wasn't 100% sure about this issue. Please take a look and add the label if you agree it's a bug and can be handled by external contributors

Proposal
Please re-state the problem that we are trying to solve in this issue.
An invoice thread opens when we select the user from new chat page.
What is the root cause of that problem?
When we select a user, it will try to find the user chat by participants using getChatByParticipants.
https://github.com/Expensify/App/blob/a19ef9889c85991414943da1515abe811c05e31d/src/libs/ReportUtils.ts#L5561-L5584
The participants of the invoice report is the same as the DM participants, that is [currentUser, the other user]. Because they contains the same participant, getChatByParticipants has a chance to wrongly returns the wrong report, that is the invoice report instead of the DM.
What changes do you think we should make in order to solve the problem?

Skip invoice report/room when comparing the participant.
https://github.com/Expensify/App/blob/a19ef9889c85991414943da1515abe811c05e31d/src/libs/ReportUtils.ts#L5567-L5577
|| isInvoiceReport(report) || isInvoiceRoom(report)

(and any other report type if needed)
What alternative solutions did you explore? (Optional)
I want to propose using !isOneOnOneChat, but getChatByParticipants is also being used to find group chat in split bill.
https://github.com/Expensify/App/blob/a19ef9889c85991414943da1515abe811c05e31d/src/libs/actions/IOU.ts#L3806-L3809
So, the solution is if we aren't searching for group, then we use !isOneOnOneChat(report) condition.
|| (!shouldIncludeGroupChats && !isOneOnOneChat(report))

Then, we can remove the other checks (thread, group, task, etc.)

@cristipaval @davidcardoza for eyes on this.

Proposal
Please re-state the problem that we are trying to solve in this issue.
Invoice - Invoice thread opens when starting DM with the user after sending invoice to them
What is the root cause of that problem?
When we start DM with the user, we use getChatByParticipants function to find the report of the DM chat. In this function, we will exclude some types of reports and then compare the participants. But we don't exclude the invoice report and this report has the same participant with the DM chat. So sometimes this function can return wrongly if we find the invoice report first.
https://github.com/Expensify/App/blob/77d95c54b3b4d9d9eb7db560f150137de433f657/src/libs/ReportUtils.ts#L5544-L5549
What changes do you think we should make in order to solve the problem?
To avoid this bug happening in the future, we can prioritize the one one chat and group chat. With this change, we can make sure that this function will always return the DM or group first if the participant is matched.
return lodashOrderBy(Object.values(reports ?? {}), (report) => {
    if (isOneOnOneChat(report) || (isGroupChat(report) && shouldIncludeGroupChats)) {
        return 0;
    }
    return 1;
}).find((report) => {

https://github.com/Expensify/App/blob/77d95c54b3b4d9d9eb7db560f150137de433f657/src/libs/ReportUtils.ts#L5540
What alternative solutions did you explore? (Optional)

PR is ready
cc: @rayane-djouah

Deployed to staging 4 hours ago.

Requested in ND

Determine if we should create a regression test for this bug. There's no need; we've already included automated tests.

Hm, I don't think we forgo manual regression testing of features in lieu of automated tests. @cristipaval @davidcardoza are manual regression tests being handed over and added centrally for this project?

Payment summary as follows:

$250 to @bernhardoj for the fix
$250 to @rayane-djouah for the C+ review

^^ going to hold on the Upwork payment for C+ until we're aligned on this Q.

Cool, thanks! Settled up. 👍

$250 approved for @bernhardoj


enzyme-adapter-react-15.4 incompatible with react/react-dom 15.3

Hi!
The Enzyme docs (here) say to use enzyme-adapter-react-15.4 when using React 15.0-15.4.
As of #1234 / #1252, react-addons-test-utils is no longer a peerDependency of enzyme-adapter-react-15.4, but a normal dependency. This means that instead of the user being able to specify a suitable version, the adapter uses the version range 15.0.0-0 - 15.4.x, which resolves to 15.4.2, and so is incompatible with react/react-dom 15.3.x.
For example when using:
  "dependencies": {
    "react": "15.3.2",
    "react-dom": "15.3.2",
    ...
  },
  "devDependencies": {
    "enzyme": "3.1.0",
    "enzyme-adapter-react-15.4": "1.0.2",
    ...
  }

...enzyme-adapter-react-15.4 pulls in react-addons-test-utils 15.4.2, which contains:
module.exports = require('react-dom/lib/ReactTestUtils');

...which doesn't exist in react-dom 15.3.2, and so results in:
Module not found: Error: Can't resolve 'react-dom/lib/ReactTestUtils' in '....\node_modules\react-addons-test-utils'

Compare this to react-addons-test-utils 15.3.2, which contains:
module.exports = require('react/lib/ReactTestUtils');

I would presume the solutions to be either:

Revert the peer dependency change for #1234 / #1252 for older versions of the adapter.
Create a new enzyme-adapter-react-15.3 that has a reduced version range for react-addons-test-utils.

Many thanks :-)
CC @brucewpaul, @ljharb, @bdwain.

Interesting, that's a consequence that we didn't think of, and the reason that it needs to be a peer dep.
I'm thinking maybe we should revert the changes for all the adapters. @brucewpaul, @bdwain, thoughts?

I think 15.4 is a special case and in general within the same major version should be fine. I'm not totally familiar with what happened that required a change for react 15.4, but I don't think this would be an issue for react 16 or 15.5+. I'm not totally sure about 13 or 14 though. But i think it's best to only revert where there's a clear problem, which seems to just be 15.4.

@bdwain does that mean you're saying that using a 15.6 test-utils would work with 15.5, for example?
It's certainly possible that we need adapters for all of 15-15.3, 15.4, and 15.5+.

react addons test utils 15.6.2 has a peer dependency on "react-dom": "^15.4.2", so as long your version of react dom matches that it should be good.

ok, so are we looking at a specific case where react 15.3 breaks with test utils for 15.4, but that's not true for any other major line?

I'll investigate all of these tonight and get back to you.

I think I misread v 15.6.2's peer dependency. it's actually ^15.6.2. It looks like they've had a policy of bumping the peer dependency of react-test-renderer to match its version, so that react had to be at least as new. This may not have been a hard requirement, but it still causes npm ls to fail.
I opened an issue about this and it sounds like for version 16 they may be willing to change their policy and leave the peer dependency at ^16.0.0`. https://github.com/facebook/react/issues/11278
I think we will need to revert the change for everything but 16.0, but it sounds like we can leave 16.0 as a regular dependency (they are still on 16.0.0 anyway).
I can open this PR later

Makes sense.

#1301 should fix this @edmorley @ljharb


Normalize variable for switch statement

When getting nodeName on my computer, it is in Upper Case.
ensure that nodeName is always compared using lower case.
This will ensure compatibility between browsers.

Thanks for this PR! I'll push it out in the next release to npm :-)


[SMALLFIX] Add equals and hashCode methods for lineage options

Followup to https://github.com/Alluxio/alluxio/pull/3072

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/9428/
Test PASSed.

Merged build finished. Test PASSed.

LGTM. Thanks for the improvement.

LGTM


Fix for #367

Fixes compiler warnings abount unused local variables. Issue #367

Yes, with @ compiler fails
DocstringParsingError: Documented parameter "from_" not found in the parameter list of the function.
,DocstringParsingError: Documented parameter "value_" not found in the parameter list of the function.
,DocstringParsingError: Documented parameter "data_" not found in the parameter list of the function.
Compiliation failed. See above.

That is very annoying. I'm not sure I prefer this. I'm going to see if something can be changed in Solidity regarding this problem.

I've also tried another solution:
if(true || from_ == 0 || value_ == 0 || data_.length == 0 ) revert(); // Temporary fix for solidity compiler warning

But it affects generated code and I really don't like such side effect.

I agree. I also thought of something like assert(from_ == from_); as a sort of "nop". It should be removed by the optimizer but I haven't verified it.


4+ sec for a construct query?

Hi,
I'm using the Java client and running "quite" simple CONSTRUCT query which takes around 4 seconds to execute. The CONSTRUCT query is:
CONSTRUCT {
  <http://dbpedia.org/resource/Germany> <http://purl.org/dc/terms/subject> ?category .
  ?category <http://freme-project.eu/ns#info> ?info .
  ?category <http://www.w3.org/2000/01/rdf-schema#label> ?label
 } WHERE {
  <http://dbpedia.org/resource/Germany> <http://purl.org/dc/terms/subject> ?category .
  ?category <http://freme-project.eu/ns#info> ?info .
  ?category <http://www.w3.org/2000/01/rdf-schema#label> ?label
}

and it is executed against http://rv2622.1blu.de:5000/dbpedia-categories LDF endpoint.
Am I doing smth wrong or this is expected time? I tried to run the same query but using the JS client at http://rv2622.1blu.de/ldf-client/ and it is executed much faster.
Thanks!

oh, I see, this has been already discussed in previous issue https://github.com/LinkedDataFragments/Client.Java/issues/4
So, this performance seems to be expected. Unfortunately, we need to execute thousands of such construct queries in reasonable time. Maybe I try to split the construct in 3 simple request but this seems to be the same what the client is doing....

@m1ci Your best bet is the JavaScript client at the moment. The current Java stack (Jena) is not well-suited for the task. I will clarify this in the README.

Clarified in 1312b02d4a44548a53428bd8ef8d6455b9dd4cf2.