Implement configuration options from flake8-type-checking

[x] exempt-modules
[x] strict
[ ] pydantic-enabled
[ ] pydantic-enabled-baseclass-passlist
[ ] fastapi-enabled
[ ] fastapi-dependency-support-enabled
[ ] cattrs-enabled

See: #1785

@sondrelg - not urgent, but any input on these options based on your experience? Any thing you'd warn me about, etc.?

Is it feasible to create another script in addition to add_rule.py and add_plugin.py, e.g. add_option.py?
Not sure if this can be automated, didn't look into it. Could be a good thought to have in mind when new options are implemented.
ps. @charliermarsh some other options are labelled isort but I think should also have the configuration tag

I don't understand the problem for pydantic support. Can't we just assume that every class that has pydantic.BaseModel as a base class needs to have the types of their class attributes checked at runtime?

Oh, I believe we do now require that class attributes are present at runtime.

Weird to link to a tweet for reference but: https://twitter.com/charliermarsh/status/1623389778375843840

I don't understand the problem for pydantic support. Can't we just assume that every class that has pydantic.BaseModel as a base class needs to have the types of their class attributes checked at runtime?

What if you do this?
# a.py

class AppBaseModel(BaseModel):
    name: str  # every model in my app will have this attribute

# b.py
from a import AppBaseModel

class Foo(AppBaseModel):

It's been a while since we discussed it, but I think there's a number of way to assume incorrectly. And since the consequence of a false negative is potential runtime errors in your prod app, we should try to avoid that at all costs.
Does that make sense @sasanjac?

Does that make sense @sasanjac?

No, because Foo.mro() still contains BaseModel.

@sondrelg - I don't think so but I haven't really looked back on it. You can see the docs here. The logic is that if you're in a module or class scope, the annotations need to be added to __annotations__, so they end up getting evaluated at runtime. In a function scope, there's no such construct, so they just get skipped.
There are some comments from Python core contributors in that thread: https://twitter.com/MissingClara/status/1623435238289608709

nvm, my brain left me there for a bit.

Does that make sense @sasanjac?

~No, because Foo.mro() still contains BaseModel.~

But can't we then turn the procedure around? Explicitely state all base classes that inherit from BaseModel?

Tangentially related: is there a way to enforce imports that must be present like from __future__ import annotations?

@ofek - Yeah, we support it via required-imports (which maps to I002).

nvm, my brain left me there for a bit.

Does that make sense @sasanjac?

~No, because Foo.mro() still contains BaseModel.~

But can't we then turn the procedure around? Explicitely state all base classes that inherit from BaseModel?

The example above isn't the worst case - we could have n layers of base classes and mixins to traverse located in m different files. Since flake8 operates in a one-file-at-the-time type of way, leaving the scope of the single file was not something that seemed worth the investment in the original plugin, but maybe ruff has some foundations that make it worth considering :slightly_smiling_face:

Yeah I totally forgot about that. But why don't leave it up to the user to specify all pydantic base classes in the config file? I mean with the default config, the user will encounter runtime errors anyway.

Mostly because no one has requested it :slightly_smiling_face:  How will they run into runtime errors anyway?

Because with the default config they will move all typing imports into the TYPE_CHECKING block.
For me it just seems the most straightforward way to have something like type-checking-pydantic-enabled-baseclasses instead of dropping the config options.

Maybe just call it type-checking-pydantic-baseclasses? Yeah I don't see why not if you want that feature :slightly_smiling_face:

Ok, now I only have to learn rust 🙈

The remaining options are covered by #3292 (albeit with an API that differs from the original flake8-type-checking), thanks to @sasanjac!


Fix of "thread 'main' panicked at 'range start index 130 out of range…

… for slice of length 104', src/output.rs:21:9"

@ghfghfg23 Thank you for making the changes. I'm merging this into development branch to run a few tests & will roll this out along with the next release.


List Based Definitions

Command option for a list based define command/new command for multiple definitions in one line. (Just an idea. It won't break my heart if it doesn't happen.)
For example, instead of:

define var1: val1
define var2: val2
...

Doing:

define var1|var2|var3: val1|val2|val3

yeah, no, just use multiple lines. (Or, one day, MapTag, when that's done... not quite the same but close)


Fix consumer is never called when extract uncompressed 0 byte entry

Fixes #
Changes proposed in this PR

Fixes bug which closure consumer is never called while extracting 0 byte entry from uncompressed archive.

Tests performed

Add testExtractUncompressedEmptyFile

testExtractUncompressedEmptyFile.zip is copy from testExtractUncompressedDataDescriptorArchive.zip

Further info for the reviewer

Using XCTestExpectation to verify consumer closure surely called at once.

Open Issues
N/A

Thanks for providing this PR - good catch!
I saw that you also filed a similar issue for compressed entries: #191
I haven't been able to reproduce it yet, but from reading your description it doesn't look like it can be closed with this PR?

I saw that you also filed a similar issue for compressed entries: #191
I haven't been able to reproduce it yet, but from reading your description it doesn't look like it can be closed with this PR?

Hmm. In my memory, method is different betweeon compressed and uncompressed entry... (It's the reason I created an another issue)
I'll check again and report to #191 .


[CP] Hotfix fragment shaders fix into stable

Issue Link
https://github.com/flutter/flutter/issues/141296 https://github.com/flutter/flutter/issues/141838
Target
stable
PR Link
https://github.com/flutter/engine/pull/49754
Changelog Description
Fixes fragment shader loading on the web (cavaskit).
Impacted Users
All Flutter devs using fragment shaders on Flutter web projects.
Impact Description
A runtime crash.
Currently, there is a bug when loading shader data for fragment shaders in runtime ( https://github.com/flutter/flutter/issues/141296). This makes shader-based views no to render as a result of the crash. The app may get unresponsive.
Workaround
There is no workaround
Risk
high
Test Coverage
yes
Validation Steps
Load a fragment shader on a flutter web project.

@renancaraujo before we can review this, we'll need a PR opened to the stable branch. Can you update your PR description with a PR pointing to flutter-3.19-candidate.1? Thanks!

Sorry i am, not sure how to do this since the OG PR (https://github.com/flutter/engine/pull/49754) is on stable.

@renancaraujo we've written a wiki entry on the cherry-pick process.
If there is anything that is still confusing, please call it out so that we may make it more clear.

Right now fragment shaders apparently doesn't work on flutter web in 3.19. Is there any chance this will get fixed in stable before 3.22?

@renancaraujo closing as there has been no movement on this cherry-pick issue.
@troels please feel free to open an issue for us to track.


Minor README improvements

A few sentences weren't quite clear. I tried to touch up the English a little bit.

Thanks


Adding Polish

Adding installation instructions to the README
trying to clean-up help dialog in the cobra commands.

I'm going to go ahead and merge this, feel free to submit a PR with any corrections @joshgav!


Added Network Interface driver for TI TM4C1294NCPDT and Compiler supp…

…ort for TI Code Composer Studio.
Network Interface driver for TI TM4C1294NCPDT
Description
Added NIC driver for TM4C1294NCPDT to FreeRTOS+TCP stack.
Test Steps
Not an issue, but a contribution to the project. To test the implementation, acquire the TI EK-TM4C1294XL evaluation kit, compile FreeRTOS and FreeRTOS+TCP and include the TCP Echo Server module.
Related Issue
N/A
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

Thanks a lot for sharing this new driver! I will have a closer look later today.
In the past, when creating demo software for evaluation boards, every chip vendor would provide yet another PHY driver. That driver would work for one particular PHY and not for others.
A couple of years ago, I downloaded all PDF's about all major 100 Mbps PHY's, and I looked for what they have in common, and what is different. As you know some registers are obligatory, and other registers are part-specific.
The result of this can be found in phyHandling.c. It will poll all 32 ports, form 0 up to 31. I tries to read a PHY ID on every port. Some PHY's are actually network switches showing their ID on 4 or 5 PHY ports. These will all be reset and initialised.
Here is a list of PHY's that work well with this driver:
/* ID's of supported PHY's : */
    #define PHY_ID_LAN8742A        0x0007c130
    #define PHY_ID_LAN8720         0x0007c0f0

    #define PHY_ID_KSZ8041         0x000010A1
    #define PHY_ID_KSZ8051         0x000010A1
    #define PHY_ID_KSZ8081         0x000010A1

    #define PHY_ID_KSZ8863         0x00221430
    #define PHY_ID_KSZ8081MNXIA    0x00221560

    #define PHY_ID_DP83848I        0x20005C90
    #define PHY_ID_DP83TC811S      0x2000A250

    #define PHY_ID_MV88E6071       0xFF000710

and the latest will be KSZ8795.
Many network interfaces make use of phyHandling.c, for instance the STM32Fxx driver.
Initialisation is this simple:
static EthernetPhy_t xPhyObject;
void vMACBProbePhy( void )
{
    vPhyInitialise( &xPhyObject, xSTM32_PhyRead, xSTM32_PhyWrite );
    xPhyDiscover( &xPhyObject );
    xPhyConfigure( &xPhyObject, &xPHYProperties );
}

As you see, it needs two access functions: xSTM32_PhyRead(), and xSTM32_PhyWrite().
After this, the object will tell you the actual properties of the connection, and on which ports there is a Link Status.
Would it be possible to integrate this PHY-driver into you Network Interface? I will help where necessary.
Thanks,

@htibosch I've addressed your comments as of the latest commit (5fa21f4ed35ad457b8037059136dc5cced7a7c56). I also enabled and tested checksum offloading to the MAC. Thank you for your comments. I'll keep an eye out for more suggestions.

My mistake; the correct commit should be 8a8717b9e09bdb485a1de5daef0628dcc5d3c583. I just removed a stale debug statement. Apologies.

I approve this PR and want to thank you for your efforts and your patience.

@htibosch  Thanks! And no problem at all. I appreciate the feedback. My apologies if I made this PR more difficult than it needed to be. I don't often contribute to GitHub projects, so this was a learning experience. I appreciate your help and patience as well!

/bot run uncrustify

@htibosch Is there something else I need to do to get this finished? It looks like we're pending the pr-bar-raiser reviews.


Endless recursion with wrong arguments for Mongo.update/4

Hi,
I think I stumbled upon a bug: if someone supplies wrong arguments to Mongo.update/4, it results in an endless recursive call to normalise_updates/1 (a private function). The update/4 has 4 params: topology_pid, collection, updates, opts . updates should be a list of keyword lists, but if it's anything else is supplied (e.g empty list) it seems to goes south.
This is the snippet which I think are relevant (from https://github.com/zookzook/elixir-mongodb-driver/blob/master/lib/mongo.ex#L1133 ):
  def update(topology_pid, coll, updates, opts) do
    write_concern =
      filter_nils(%{
        w: Keyword.get(opts, :w),
        j: Keyword.get(opts, :j),
        wtimeout: Keyword.get(opts, :wtimeout)
      })

    normalised_updates = updates |> normalise_updates()
    # rest of update function

  defp normalise_updates([[{_, _} | _] | _] = updates) do
    updates
    |> Enum.map(&normalise_update/1)
  end

  defp normalise_updates(updates), do: normalise_updates([updates])

If you agree this is a bug, I'm willing to submit a patch.
I'm a bit new to Mongo, so not sure what the expected behaviour is, but I propose to change it such that update/4 checks if updates is a keyword list with at least q/query + u/update/update keys, WDYT?
Small snippet to reproduce:
{:ok, conn} = Mongo.start_link(url: "mongodb://localhost:27017/example")
Mongo.update(conn, "example", :rick_roll, [])

Hey Tuxified,
yes, it make sense to capture the empty list and maybe raise an exception or return an error in this case. To be honestly I never used the function. It was introduced to support the ecto MongoDB framework. Please feel free to submit a PR.
Thank you for reporting this issue!

Alright, finally got around making a small PR, plz let me know if you have questions/comments


Bug: Call to undefined method CodeIgniter\Pager\PagerRenderer::getDetails() with multiple paginations in single view

PHP Version
8.0
CodeIgniter4 Version
4.1.2
CodeIgniter4 Installation Method
Composer (as dependency to an existing project)
Which operating systems have you tested for this bug?
macOS, Linux
Which server did you use?
apache
Database
MariaDB 10.6.5
What happened?
After PR https://github.com/codeigniter4/CodeIgniter4/pull/6211, I can access multiple pagers on a single page. It works when I use:
<?= $pager->links('contacts') ?>
<?= $pager->links('orders') ?>

on the same page, but when I'm trying to use template where I'm using function
$pager->getDetails($group ?? 'default')

to get details about pagination it doesn't work on the same page.
Steps to Reproduce
See https://github.com/codeigniter4/CodeIgniter4/issues/6230#issuecomment-1174641005
I'm using partial template for Full pagination like:
<?php
    $details = $pager->getDetails($group ?? 'default');
    $perPage = $details['perPage'];
    $showing = $perPage * $details['currentPage'];
    $total   = $details['total'];
    $from    = $showing + 1 - $perPage;
?>

<?= lang('Pager.showingResults', [
                $from < 0 ? 0 : $from,
                $showing > $total ? $total : $showing,
                $total,
            ]) ?>

        <?= $pager->links($group ?? 'default') ?>

and calling that partial from view like:
<?= view('pager/_pager', ['group' => 'contacts']) ?>
<?= view('pager/_pager', ['group' => 'orders']) ?>

I'm getting Error like:
Call to undefined method CodeIgniter\Pager\PagerRenderer::getDetails()

Expected Output
Expected is to have an option to call getDetails() from all of the groups.
Anything else?
No response

Try to change the name pager to something else.
        $data = [
            'users' => $model->paginate(10),
            'pager' => $model->pager, // the key
        ];

        return view('users/index', $data);

Try to change the key name pager to something else.
        $data = [
            'users' => $model->paginate(10),
            'pager' => $model->pager, // the key
        ];

        return view('users/index', $data);

@kenjis It works after change from pager -> test and accessing with test variable.

It seems this is a bug in Pager class, the variable name collision.
pager is used here:
https://github.com/codeigniter4/CodeIgniter4/blob/edb894f2fde3eac146094eb3e5e0491a62d47f96/system/Pager/Pager.php#L123-L125
When this code runs, PagerRenderer will be set in the pager in View.

It seems this is a bug in Pager class, the variable name collision.
pager is used here:
https://github.com/codeigniter4/CodeIgniter4/blob/edb894f2fde3eac146094eb3e5e0491a62d47f96/system/Pager/Pager.php#L123-L125
When this code runs, PagerRenderer will be set in the pager in View.

@kenjis  Yes, I can confirm this behaviour.
If I use test instead pager in debug toolbar now I can see what I expect:

After change back to pager it looks like this with used $pager in view like:
<?= $pager->links() ?>

So it's not anymore CodeIgniter\Pager\Pager but CodeIgniter\Pager\PagerRenderer.

@kenjis
So I think that the whole logic of pager is wrapped around a single pagination on the page. This code will add pager var to a view if there is used different key like pagination instead of the pager.
If the key is also pager, then it will rewrite the whole pager var to PagerRenderrer because of all of the functions like setSurroundCount(2) etc. used in the pager template by default.
As a workaround to get multiple paginations on the same view, we can use a different name for a pager and then it seems to work as needed. It will just add a var pager with a group from which we call a pager.

<?php

namespace App\Controllers;

class Home extends BaseController
{
    public function index()
    {
        $model = new \App\Models\UserModel();

        $data = [
            'users' => $model->paginate(1),
            'pager' => $model->pager,
        ];

        return view('user', $data);
    }
}

<?php

namespace App\Models;

use CodeIgniter\Model;

class UserModel extends Model
{
    protected $table = 'user';
}

Views/user.php
<?= view('partial') ?>
<?= view('partial') ?>

Views/partial.php
<?php $details = $pager->getDetails() ?>
<?= $pager->links() ?>

@jozefrebjak Can you try this?
--- a/system/Pager/Pager.php
+++ b/system/Pager/Pager.php
@@ -122,7 +122,8 @@ class Pager implements PagerInterface

         $pager = new PagerRenderer($this->getDetails($group));

-        return $this->view->setVar('pager', $pager)->render($this->config->templates[$template]);
+        return $this->view->setVar('pager', $pager)
+            ->render($this->config->templates[$template], null, false);
     }

     /**

@jozefrebjak Can you try this?
--- a/system/Pager/Pager.php
+++ b/system/Pager/Pager.php
@@ -122,7 +122,8 @@ class Pager implements PagerInterface

         $pager = new PagerRenderer($this->getDetails($group));

-        return $this->view->setVar('pager', $pager)->render($this->config->templates[$template]);
+        return $this->view->setVar('pager', $pager)
+            ->render($this->config->templates[$template], null, false);
     }

     /**

@kenjis I can confirm that it works.

@jozefrebjak Thank you for confirmation.
I sent a PR #6251

@jozefrebjak That fix was not correct.
Please check #7758 if you have time.


fixed #26 Output document puts cursor in wrong place

Coverage decreased (-0.8%) to 41.964% when pulling 357336b76ff4d33005d3c94a4d4468a6e9b5159f on #26 into 6562728df7a8216990197021e1099f0c359cdd7d on master.

Coverage decreased (-2.2%) to 40.517% when pulling 6ecb78a33d1f670d08c227959ae5c8b7d751b9c0 on #26 into 6562728df7a8216990197021e1099f0c359cdd7d on master.


Do a simple deduplication when searching for missing task dependencies

so we don't look at certain nodes many times
We did run in an OOM when using the latest wrapper on the Gradle build itself. This PR fixes the OOM.

@bot-gradle Test QFL

@bot-gradle Test QFL

Sorry I don't understand what you said, please type @bot-gradle help to get help.

Sorry I don't understand what you said, please type @bot-gradle help to get help.

@bot-gradle test QFL

@bot-gradle test QFL

OK, I've already triggered QuickFeedbackLinux build for you.

OK, I've already triggered QuickFeedbackLinux build for you.


[release] prepare for 2.0.0-RC3

Codecov Report

Merging #6482 into master will decrease coverage by <.01%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master    #6482      +/-   ##
==========================================
- Coverage   39.51%   39.51%   -0.01%
==========================================
  Files        3085     3085
  Lines       92042    92042
  Branches    11903    11903
==========================================
- Hits        36369    36368       -1
- Misses      52661    52662       +1
  Partials     3012     3012

Impacted Files
Coverage Δ

...p/pinpoint/rpc/stream/StreamChannelRepository.java
75% <0%> (-10%)
:arrow_down:

...cluster/zookeeper/ZookeeperClusterDataManager.java
52.9% <0%> (-1.94%)
:arrow_down:

...pinpoint/profiler/monitor/DeadlockMonitorTask.java
18.6% <0%> (-1.17%)
:arrow_down:

...point/rpc/client/DefaultPinpointClientHandler.java
72.4% <0%> (+0.32%)
:arrow_up:

...orp/pinpoint/rpc/server/DefaultPinpointServer.java
79.92% <0%> (+0.7%)
:arrow_up:

...om/navercorp/pinpoint/rpc/codec/PacketDecoder.java
59.57% <0%> (+2.12%)
:arrow_up:

Continue to review full report at Codecov.

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


chore: release 0.4.2

:robot: I have created a release *beep* *boop*
0.4.2 (2022-05-05)
Bug Fixes

server: panic when checking signatures (8956c78)
server: fix signatures ignored when too many git notes exists for a repo (6c50b6b)

This PR was generated with Release Please. See documentation.

:robot: Release is at https://github.com/werf/trdl/releases/tag/v0.4.2 :sunflower:


PT-BR translation update

I've been busy in recently time, but now, I'm ready to return to my "open-source life".
I'm glad to show my recently (emergencial) translation work, for the pt-br.
:smile:

Some of your lines, namely 669 and 683, miss their trailing comma. That's also why JSHint (and therefore Travis) fails.

Oh , I had no idea, that I had forgotten the commas . Sorry for my mistake . Now , I've commited my fix . :smiley:

@eliezerb @rodrigost23 Could you maybe take a look at these changes?

Look at the "Health data", that I've translated as "Relatório de saúde" with intention to make the Brackets more "human".
I open to sugestions.

Due to the lack of feedback, I'm gonna merge this PR as it is.


Merge pull request #1 from godswearhats/master

merge

merge

sorry, my bad!

Was getting a little confused!


Create e2e tests for user journeys on analyst portal

Ticket to write user journey for analysts.
AC:

[ ] Happo screenshots
[ ] Should attempt to save some data in RFI and Assessments page at least
[ ] Change the status on the analyst side and check if the relevant status change is visible/invisible on applicant side

 What are the User Journeys we want to test?

[ ] RFI process
[ ] Assessments process

[ ] Screening
[ ] Project Management
[ ] Financial
[ ] Technical

[ ] Status (change status is reflecting in both portals)

Is it make sense to have one PR for each e2e test?

I mean we could? The assessments process should/can probably just be one single PR

Yes, I agree

We can move them individually if we do not connect the PRs to the issue.
When all PRs are done, we move the card to Sprint Done and connect the PRs to it.

@MarsRomer When I was writing this I mentioned this status change, but right now there are no status changes on the analyst side that would be visible on the applicant side. Want me to create a test with a fake status that would be visible or would you rather split this and make it part of the acceptance criteria of #1338


Feature | Dark / Light mode

Setup Dark & Light mode for the app where light mode = currrent setup.
The Color, typography, spacing, roundedness, etc. should be easily configurable from 1 config file.
Build using tailwind CSS.
Ensure that you're implementing modes in the most optimised, efficient manner.
DO NOT BREAK EXISTING FEATURES

I'd like to work on this feature. As the project is in tailwind I would try implementing it using the selector strategy.

Sure. only 1 issue can be assigned to a contributor at a time.
If no one claims the issue before you complete #146, will assign it to you.

Sure. only 1 issue can be assigned to a contributor at a time.
If no one claims the issue before you complete #146, will assign it to you.

Can you assign it

Sure

@vverma022 - Please set the primary, secondary colors for both light and dark mode in tailwind.config.js And then use bg-primary / bg-secondary in the code.
This would be a much cleaner approach and will be easier to maintain in future

Assign this task to me

Assign this to me.

Share your approach first.

1.Enable the 'darkMode' feature in the 'tailwind.config.js' file.
2. Create a component that toggles dark mode and save preference in localStorage.
3. Modify the logout function to preserve the dark mode preference.
4. And then style the UI Ex. dark:bg-white.

We are planning to integrate Shadcn soon. Can you implement dark modes using Shadcn ?

We are planning to integrate Shadcn soon. Can you implement dark modes using Shadcn ? I'll do it I have the code base already.

If shadcn needs to be implemented then the implication will be easy as well as structuring the app-bar component. I'll make a new brach to solve this issue as the current one has its issues.

I have already implemented dark mode; only a few things remain.

Every thing is responsive including AppBar Component

@aadeshkulkarni if this is OK, then I can create a pull request for this issue.

@Shashan17J  - Is this done using shadcn ?

@aadeshkulkarni without shadcn.

In that case, pause.
@vverma022 - Can you build it using shadcn ? If yes, please share timelines.

In that case, pause. @vverma022 - Can you build it using shadcn ? If yes, please share timelines.

Probably yes, Shadcn already provides dark theme as well as the toggle component. I'll try and get to done by tomorrow. Any preferences or suggestions.

In that case, pause. @vverma022 - Can you build it using shadcn ? If yes, please share timelines.

Probably yes, Shadcn already provides dark theme as well as the toggle component. I'll try and get it done by tomorrow. Any preferences or suggestions ?

Yes.

Use default theme, instead of New york. So that we can make use of lucide-react icons in future.
Try to ensure that all colors are configurable from one place (global.css or tailwind config)

Break the task down into steps.
Step 1: Try to setup shadcn first. And see everything works as is currently. (Light mode i mean)
Step 2: Add dark mode incrementally. One page at a time.
Step 3: Once all pages are done. Check components.
Don't add any Shadcn components for now. (unless absolutely necessary). We will do it as a separate ticket.
Document everything that you achieved and also things that can be done later.

As of now I have just added 2 components. A button and a dropdown which will act as the trigger's for the dark mode. So instead of using one of the default colour schemes implement it manually by changing and adding theme's in the index.css and tailwind files.

As of now I have just added 2 components. A button and a dropdown which will act as the trigger's for the dark mode. So instead of using one of the default colour schemes implement it manually by changing and adding theme's in the index.css and tailwind files.

Revising the date of completion I might take a bit more than a day. But it'll be done before this week

Thank you for your contribution @vverma022 !!


KAFKA-17910: Create integration tests for Admin.listGroups and Admin.describeClassicGroups

Followup: https://github.com/apache/kafka/pull/17626#discussion_r1824798591
Add integration test for GroupsCommand, Admin.listGroups, and Admin.describeClassicGroups.
Committer Checklist (excluded from commit message)

[ ] Verify design and implementation
[ ] Verify test coverage and CI build status
[ ] Verify documentation (including upgrade notes)

@FrankYang0529 could you please rebase code to include #17666?

Rebased it. Thanks.


Getting Internal Server for Chorme Browser

Hi Team,
I am getting internal server error for chrome browser , below is my json .
{
"chrome": {
"default": "108.0",
"versions": {
"108.0": {
"image": "selenoid/chrome:108.0",
"port": "4444",
"path": ""
},
"109.0": {
"image": "selenoid/chrome:109.0",
"port": "4444",
"path": "/"
},
"64.0": {
"image": "selenoid/vnc_chrome:64.0",
"port": "4444",
"path": "/"
}
}
},
"firefox": {
"default": "109.0",
"versions": {
"109.0": {
"image": "selenoid/vnc_firefox:109.0",
"port": "4444",
"path": "/wd/hub"
}
}
}
}
However using same json I am able to launch firefox. Please help.
Please suggest

@ayushi-nyk path parameter for Chrome should be /.

@vania-pooh Tried that as well still same issue .
2023/02/01 07:03:37 [-] [INIT] [Loading configuration files...]
2023/02/01 07:03:37 [-] [INIT] [Loaded configuration from /etc/selenoid/browsers.json]
2023/02/01 07:03:37 [-] [INIT] [Video Dir: /opt/selenoid/video]
2023/02/01 07:03:37 [-] [INIT] [Your Docker API version is 1.41]
2023/02/01 07:03:37 [-] [INIT] [Timezone: UTC]
2023/02/01 07:03:37 [-] [INIT] [Listening on :4444]
2023/02/01 07:04:50 [-] [NEW_REQUEST] [unknown] [<IP_ADDRESS>]
2023/02/01 07:04:50 [-] [NEW_REQUEST_ACCEPTED] [unknown] [<IP_ADDRESS>]
2023/02/01 07:04:50 [2] [LOCATING_SERVICE] [chrome] [108.0]
2023/02/01 07:04:50 [2] [USING_DOCKER] [chrome] [108.0]
2023/02/01 07:04:50 [2] [CREATING_CONTAINER] [selenoid/chrome:108.0]
2023/02/01 07:04:51 [2] [STARTING_CONTAINER] [selenoid/chrome:108.0] [f762ecde79a197c4754d302fe38c74baaf408fbe8c0a55bcfcc9cbcb1f797e45]
2023/02/01 07:04:51 [2] [CONTAINER_STARTED] [selenoid/chrome:108.0] [f762ecde79a197c4754d302fe38c74baaf408fbe8c0a55bcfcc9cbcb1f797e45] [0.25s]
2023/02/01 07:04:53 [2] [SERVICE_STARTED] [selenoid/chrome:108.0] [f762ecde79a197c4754d302fe38c74baaf408fbe8c0a55bcfcc9cbcb1f797e45] [2.58s]
2023/02/01 07:04:53 [2] [PROXY_TO] [f762ecde79a197c4754d302fe38c74baaf408fbe8c0a55bcfcc9cbcb1f797e45] [http://<IP_ADDRESS>:4444]
2023/02/01 07:04:53 [2] [SESSION_ATTEMPTED] [http://<IP_ADDRESS>:4444] [1]
2023/02/01 07:04:57 [2] [SESSION_FAILED] [http://<IP_ADDRESS>:4444] [500 Internal Server Error]
2023/02/01 07:04:57 [2] [REMOVING_CONTAINER] [f762ecde79a197c4754d302fe38c74baaf408fbe8c0a55bcfcc9cbcb1f797e45]
2023/02/01 07:04:57 [2] [CONTAINER_REMOVED] [f762ecde79a197c4754d302fe38c74baaf408fbe8c0a55bcfcc9cbcb1f797e45]

@vania-pooh
Update Json -
{
"chrome": {
"default": "108.0",
"versions": {
"108.0": {
"image": "selenoid/vnc_chrome:108.0",
"port": "4444",
"path": "/"
},
"109.0": {
"image": "selenoid/vnc_chrome:109.0",
"port": "4444",
"path": "/"
},
"64.0": {
"image": "selenoid/vnc_chrome:64.0",
"port": "4444",
"path": "/"
}
}
},
"firefox": {
"default": "109.0",
"versions": {
"109.0": {
"image": "selenoid/vnc_firefox:109.0",
"port": "4444",
"path": "/wd/hub"
}
}
}
}

@vania-pooh Even if i am trying to start the session manually then as well it is throwing same error , however firefox is working fine.

@ayushi-nyk if you have Mac M1 then Chrome will not work.

really .. why so ?

will it work on linux / ubantu machine @vania-pooh

@vania-pooh it's not running on mac it is running under docker container then why it wont work . can you please help me to understand .
is it the case that the docker images - selenoid/vnc_chrome wont support chrome if host machine is mac.

@vania-pooh I have tried on ubuntu machine as well , there alse firefox driver got created but not chrome - below is the error  logs -
Exception found  - org.openqa.selenium.InvalidArgumentException: Requested environment is not available
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:53'
System info: host: 'ip-172-..', ip: '172...', os.name: 'Linux', os.arch: 'amd64', os.version: '5.15.0-1021-aws', java.version: '1.8.0_352'
Driver info: driver.version: RemoteWebDriver
remote stacktrace:
org.openqa.selenium.InvalidArgumentException: Requested environment is not available
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:53'
System info: host: 'ip-172---', ip: '172...', os.name: 'Linux', os.arch: 'amd64', os.version: '5.15.0-1021-aws', java.version: '1.8.0_352'
Driver info: driver.version: RemoteWebDriver
remote stacktrace:
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$errorHandler$0(W3CHandshakeResponse.java:62)
at org.openqa.selenium.remote.HandshakeResponse.lambda$getResponseFunction$0(HandshakeResponse.java:30)
at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:126)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:499)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:486)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:531)
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:128)
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:74)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:136)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213)
at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:131)
at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:144)
at SeleniumTest.main(SeleniumTest.java:20)
Any insight about it .

@ayushi-nyk you are providing browser name and version that are not present in Selenoid configuration.

@vania-pooh even without that it is not working ..

Exception found  - org.openqa.selenium.InvalidArgumentException: Requested environment is not available
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:53'
System info: host: '', ip: '<IP_ADDRESS>', os.name: 'Linux', os.arch: 'amd64', os.version: '5.15.0-1021-aws', java.version: '1.8.0_352'
Driver info: driver.version: RemoteWebDriver

@ayushi-nyk let's compare your capabilities and browsers.json contents here then.

@vania-pooh - my browsers.json -
{
"chrome": {
"default": "108.0",
"versions": {
"108": {
"image": "selenoid/vnc_chrome:108.0",
"port": "4444",
"path": "/"
},
"109": {
"image": "selenoid/vnc_chrome:109.0",
"port": "4444",
"path": "/"
}
}
},
"firefox": {
"default": "109.0",
"versions": {
"109.0": {
"image": "selenoid/vnc_firefox:109.0",
"port": "4444",
"path": "/wd/hub"
}
}
}
}
my code looks like -
import java.net.URL;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class SeleniumTest {
public static void main(String[] args)  {
try {
System.out.println("Test Start");
DesiredCapabilities caps = new DesiredCapabilities();
	    System.out.println("created caps");

	    String url = "http://localhost:4444/wd/hub/";
		WebDriver driver = new RemoteWebDriver(new URL(url), caps);
		System.out.println("created remote driver");
		driver.get("https://google.com");

		Thread.sleep(2000);

		driver.quit();
		System.out.println("Test End");

		}

catch (Exception e) {
System.out.println("Exception found  - " + e);
e.printStackTrace();
}
}
}

just to highlight on running the chrome driver locally getting error - ChromeDriver was started successfully.
Exception found  - org.openqa.selenium.WebDriverException: unknown error: Chrome failed to start: exited abnormally.
(unknown error: DevToolsActivePort file doesn't exist)
(The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:53'
System info: host: '', ip: '', os.name: 'Linux', os.arch: 'amd64', os.version: '5.15.0-1021-aws', java.version: '1.8.0_352'
But if selenoid uses docker conatiner to run browser then it should be the issue .
Please suggest .

@ayushi-nyk your desired capabilities are empty:
DesiredCapabilities caps = new DesiredCapabilities();

At least you should set browser name:
caps.setCapability("browserName", "chrome");

This is Selenium basics and not related to Selenoid at all.

@vania-pooh Even for firefox it works like this only ,in selenium it is not mandate ..
Still i tried that as well but it is not working

reference-
public class Test {
public static void main(String[] args)  {
try {
System.out.println("Test Start");
	   DesiredCapabilities caps = new DesiredCapabilities();
	caps.setCapability("browserName", "chrome");

	    System.out.println("created options");

	    String url = "http://localhost:4444/wd/hub/";

		WebDriver driver = new RemoteWebDriver(new URL(url), caps);

		System.out.println("created remote driver");
		driver.get("https://google.com");

		Thread.sleep(2000);

		driver.quit();
		System.out.println("Test End");

		}

catch (Exception e) {
System.out.println("Exception found  - " + e);
e.printStackTrace();
}
}
}

@vania-pooh I have requirement to run 25-30 test in parallel on Chrome browser on 108 / latest chrome version . Can you please share me detailed documentation to do so if possible so that I can follow that only. I have already check Selenoid official documentation and followed that so far .
I will be using aws for infra .
Not able to run chrome browser.

@ayushi-nyk to run dozens of tests in parallel with Selenoid you have to start one big VM with 20-30 CPUs and set Selenoid -limit flag accordingly or use Ggr.


Granula integration (round 1)

Can one of the admins verify this patch?

Granula integration was finished in a different PR. Closing.


Changed Download to a Delay

Per Your Proposed Solution
Fixes #21
Edit: While Not Working Because of Variables in a PR - Demonstration can be found in this Travis Build

I've got a different direction in 39009be79aba0208e83ef77a45db49db2cb104ee. Please let me know if it doesn't work for you.

That is a far more complete solution. I was only attempting to reduce the burden of a new release, it was even your code. Thank you again!


chore: remove all direct usages of react-transition-group

wow... we need to get rid of mesosphere-reactjs before we can drop the dep.

:tada: This PR is included in version 2.153.3 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:

:tada: This PR is included in version 2.153.3 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Firmware script reports WP enabled even after I took the screw out of Glimmer board

I bought a lot of 1st-gen Lenovo 11e Chromebooks, which uses a GLIMMER board. Over a month ago, I successfully used the script to install full UEFI and convert one of the machines to a ChromeOS-free Linux box.
Today, I tried to convert another 11e, but the Firmware script tells me "Fw WP: Enabled" even after I removed the WP screw. I don't think I've done anything differently with this second machine (but it's possible; it's been a month). However, I noticed the release date on the script output (2022-10-19) was between my last attempt and this one, so that seems like the likelier change.
The device is in developer mode and has the WP screw removed. I am running the script from a Ctrl+Alt+T + shell terminal. Is there some other step to disabling firmware WP I've forgotten, or has the script's WP detection changed for my board in the last month or two?
My script output is:
  ChromeOS Device Firmware Utility Script [2022-10-19]
 (c) Mr Chromebox<EMAIL_ADDRESS>*********************************************************
**   Device: Lenovo ThinkPad 11e/Yoga Chromebook (GLIMMER)
** Platform: Intel BayTrail
**  Fw Type: Stock ChromeOS
**   Fw Ver: Google_Glimmer.5216.198.188 (05/27/2018)
**    Fw WP: Enabled
*********************************************************
**      1) Install/Update RW_LEGACY Firmware
** [WP] 2) Install/Update UEFI (Full ROM) Firmware
** [WP] 3) Set Boot Options (GBB flags)
** [WP] 4) Set Hardware ID (HWID)
** [WP] 5) Remove ChromeOS Bitmaps
** [WP] 6) Restore ChromeOS Bitmaps
*********************************************************

Trying option #2 anyway tells me, Hardware write-protect enabled, cannot flash Full ROM firmware.

nothing has changed with the script's WP detection in probably two years. Your device simply is still grounding the !WP pin, preventing the software WP from being disabled. There may be some metal still around the screw hole which is creating connectivity between the segments.

Okay, that's clear enough! I did have a tough time getting this one out, so that wouldn't surprise me. Worst case I can always run an RW_LEGACY boot on this one system. Thanks!

using RW_LEGACY on an EOL system is far from ideal; worst case you could just flash the chip directly using a USB programmer and a chip clip

Problem solved, thanks for the tip! I opened the case back up and blew air into the screw port like my NES cartridge wasn't working; it is now fully writeable. 😁


Broken docs

In the documentation there are a lot of broken images and stylesheets, you can see this page for example: http://daemonite.github.io/material/docs/4.1/components/card/

Some third parties changed how they host some of the files that are being used by the documentation site, hence the broken styles. This has been fixed in the latest version.


JFXDialog overlayCloseProperty

Is there any way to know when the dialog it's closing with the overlayCloseProperty?

Currently, no. feel free to add your own contribution to JFoenix.
Regards,


VB-629 Create Index of vistit_ID on sub tables

What does this pull request do?
added index on one to many relationships
What is the intent behind these changes?
make sure, basic indexing is in place for performance reason

As discussed


modules for repositories are ignored when building

Please describe your issue:
I'm linking a module from a git repository
"react-photonkit": "https://github.com/react-photonkit/react-photonkit#master",
everything works as expected if i run electron-forge start but when i run electron-forge make the react-photonkit module is not copied in Electron.app/Contents/Resources/app/node_modules.
After the manual copy the app works as expected
I noticed this happens every time with git modules even if they are linked by one of my modules

Console output when you run electron-forge with the environment variable DEBUG=electron-forge:*. (Instructions on how to do so here. Please include the stack trace if one exists.
>DEBUG=electron-forge:* electron-forge make

><EMAIL_ADDRESS>make /Users/g3z/Documents/Sviluppo/Node.js/revenue/revenue-gui
> electron-forge make

WARNING: DEBUG environment variable detected.  Progress indicators will be sent over electron-forge:lifecycle
  electron-forge:lifecycle Process Started: Checking your system +0ms
  electron-forge:lifecycle Process Succeeded: Checking your system +18ms
  electron-forge:runtime-config setting key: verbose to value: false +7ms
WARNING: DEBUG environment variable detected.  Progress indicators will be sent over electron-forge:lifecycle
  electron-forge:lifecycle Process Started: Resolving Forge Config +0ms
  electron-forge:project-resolver searching for project in: /Users/g3z/Documents/Sviluppo/Node.js/revenue/revenue-gui +2ms
  electron-forge:project-resolver electron-forge compatible package.json found in /Users/g3z/Documents/Sviluppo/Node.js/revenue/revenue-gui/package.json +6ms
  electron-forge:lifecycle Process Succeeded: Resolving Forge Config +6ms
We need to package your application before we can make it
  electron-forge:lifecycle Process Started: Preparing to Package Application for arch: x64 +1ms
  electron-forge:project-resolver searching for project in: /Users/g3z/Documents/Sviluppo/Node.js/revenue/revenue-gui +0ms
  electron-forge:project-resolver electron-forge compatible package.json found in /Users/g3z/Documents/Sviluppo/Node.js/revenue/revenue-gui/package.json +1ms
  electron-forge:packager packaging with options { asar: false,
  overwrite: true,
  afterCopy: [ [Function], [Function], [Function] ],
  afterExtract: [],
  dir: '/Users/g3z/Documents/Sviluppo/Node.js/revenue/revenue-gui',
  arch: 'x64',
  platform: 'darwin',
  out: '/Users/g3z/Documents/Sviluppo/Node.js/revenue/revenue-gui/out',
  electronVersion: '1.4.14',
  quiet: true } +1ms
  electron-forge:lifecycle Process Succeeded: Preparing to Package Application for arch: x64 +9s
  electron-forge:lifecycle Process Started: Compiling Application +2ms
  electron-forge:lifecycle Process Succeeded: Compiling Application +2s
  electron-forge:lifecycle Process Started: Preparing native dependencies +1ms
  electron-forge:lifecycle Process Succeeded: Preparing native dependencies +128ms
  electron-forge:lifecycle Process Started: Packaging Application +0ms
  electron-forge:lifecycle Process Succeeded: Packaging Application +6s
Making for the following targets: zip
  electron-forge:lifecycle Process Started: Making for target: zip - On platform: darwin - For arch: x64 +2ms
  electron-forge:lifecycle Process Succeeded: Making for target: zip - On platform: darwin - For arch: x64 +9s

What command line arguments are you passing?
electron-forge make

What does your config.forge data in package.json look like?
{"config": {
    "forge": {
      "make_targets": {
        "win32": [
          "squirrel"
        ],
        "darwin": [
          "zip"
        ],
        "linux": [
          "deb",
          "rpm"
        ]
      },
      "electronPackagerConfig": {},
      "electronWinstallerConfig": {
        "name": ""
      },
      "electronInstallerDebian": {},
      "electronInstallerRedhat": {},
      "github_repository": {
        "owner": ""
      },
      "windowsStoreConfig": {
        "packageName": ""
      }
    }
  }
}

Please provide either a failing minimal testcase (with a link to the code) or detailed steps to
reproduce your problem. Using electron-forge init is a good starting point, if that is not the
source of your problem.

Hmm, @G3z can you post your package.json structure

Sure!
{
  "name": "revenue-gui",
  "version": "1.0.0",
  "productName": "Revenue",
  "description": "",
  "main": "server/main.js",
  "scripts": {
    "start": "electron-forge start",
    "package": "electron-forge package",
    "make": "electron-forge make"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "debug": "^2.6.0",
    "electron-compile": "^5.1.2",
    "flux": "^3.1.2",
    "lodash": "^4.17.4",
    "numeral": "^2.0.4",
    "react": "^15.4.2",
    "react-d3": "^0.4.0",
    "react-dom": "^15.4.2",
    "react-photonkit": "https://github.com/react-photonkit/react-photonkit#master",
    "react-router": "^3.0.2",
    "recharts": "^0.20.5",
    "revenue-core": "^1.0.4"
  },
  "devDependencies": {
    "babel-preset-latest": "^6.16.0",
    "babel-preset-react": "^6.5.0",
    "del": "^2.2.2",
    "electron-prebuilt-compile": "1.4.14",
    "merge2": "^1.0.3",
    "optimist": "^0.6.1",
    "vinyl-buffer": "^1.0.0",
    "vinyl-source-stream": "^1.1.0"
  },
  "config": {
    "forge": {
      "make_targets": {
        "win32": [
          "squirrel"
        ],
        "darwin": [
          "zip"
        ],
        "linux": [
          "deb",
          "rpm"
        ]
      },
      "electronPackagerConfig": {},
      "electronWinstallerConfig": {
        "name": ""
      },
      "electronInstallerDebian": {},
      "electronInstallerRedhat": {},
      "github_repository": {
        "owner": ""
      },
      "windowsStoreConfig": {
        "packageName": ""
      }
    }
  }
}

That is quite odd. Does react-photonkit get deleted if you run npm prune --production in your app directory?

yes npm prune --production removes react-photonkit

@G3z What is your npm version?

4.1.1 is this an npm bug ?

From the sounds of it yes, npm prune --production shouldn't remove a production dependency.  Can you revert to node v6 and npm v3 and see if it fixes the "issue" 😄

I reverted to<EMAIL_ADDRESS>removed node_modules and npm installed.
now electron-forge make produced a working build!
so it's an npm bug (or changed behavior)
TY

Do you mind filing a bug in in the npm repo and linking it here?

I'm digging the changelogs to be sure it's a bug, than I will update you.

This seems to be it: https://github.com/npm/npm/issues/9889


Fix error message

Fixes the error messages for small widths and also add max-width like it was before

Before:

:tada: This PR is included in version 4.0.0 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


[FLINK-8475][config][docs] Integrate Mesos options

What is the purpose of the change
This PR integrates the Mesos ConfigOptions into the configuration docs generator.
Brief change log

extend generator configuration to pick up MesosOptions/MesosTaskManagerParameters classes in flink-mesos
update generator file matching to accept MesosTaskManagerParameters
Add missing descriptions to config options (derived from existing description/javadocs)
integrate mesos configuration tables into config.md

The current documentation has high-availability.zookeeper.path.mesos-workers: The ZooKeeper root path for persisting the Mesos worker information. Do you know why this is not there anymore?

Looks good except for the one question I had! 👍

And I like how the options where not sorted before and also related options where not next to each other ... 😅

That option is defined in the HighAvailabilityOptions, far away from the mesos option classes..

Currently we assign each ConfigOption to exactly one table, so there's little we can do at the moment about this option.

So when we get to the HA options this will show up again? If yes, please go ahead.

yes, it will show up in the HA table. merging.


AT client lib: processResponse race  condition?

Hi,
I am debugging a new issue, that seems to be timing related.
It's pretty trivial to analyze though.
Situation:

We are requesting from a socket:

0:01:06:964 - +USORD: 0,245
0:01:06:965 - OK
0:01:06:965 - AT+USORD=0,1024
0:01:07:001 - 10 }}}}"
0:01:07:007 -
0:01:07:007 - OK
0:01:07:007 -
0:01:07:007 - +UUSOCL: 0
0:01:07:008 -  OK
0:01:07:008 - Server: BaseHTTP/0.6 Python/3.5.2
0:01:07:009 - Date: Fri, 24 Nov 2023 12:16:07 GMT
0:01:07:010 -
0:01:07:011 - {"nonper" : {"OTA": {"crc":<PHONE_NUMBER>, "size": 217224, "ver": "aaaa Built aaa",  "url":"/getOTA.html"}, "per" : { "senscfg" : { "acc_hwt_sens" : 10 }}}}"
0:01:07:016 -
0:01:07:016 - OK
0:01:07:016 -
0:01:07:016 - +UUSOCL: 0

We are here in code:

Issue:
If we "slow down the code", causing the entire reply to already be inside of the response buffer, I think what happens is that the code in processResponse  first sees that there is an OK at the end (stoptag), instead of first checking whether the URC was actually matched, and an OK followed it.
The result is that sometimes the parser will miss replies.
Am I correct in this assumption?

EDIT - the bufferMatch should check only at the START of the buffer. So that shouldn't be the issue.
Ok, give me a few mins, I'll narrow it down

So, this is just an issue.. because of debugging.
The details get complicated, but simply said, if I single step over lines in uCellSockRead, like here:

It is -normal- that when it tries to retrieve thisActualReceiveSize, it fails.
Why? Because, when you single step, the debugger breaks the entire MCU, including the UART peripheral. Since the modem cannot send everything fast enough before the debugger breaks, data is lost.
I initially tried to increase DMA buffer sizes, but all of that does not matter when the UART peripheral (and DMA) are suspended during debugging.
The only correct way to debug this code, is to let it run until the modem has sent all data out, so practically this means placing breakpoints after the full command read loop. e.g here:

When the debugger breaks there, the underlying code must have (in loop) let the UART do its thing to fill up the buffers without interruption, and retrieve it.
So yea, never mind this issue ..

Hehe, love the GIF.
It is true, of course, that in real time systems one needs a "stream" type log of activity which, for some reason, no [embedded!] platform's toolset ever really gives you.  So we do printf()'s, or our own RAM-log type buffered systems, as required (internally for our cellular modem development we have a very complex tool that does tokenised "prints" for real time modem operation).
Anyway, sorry you had to be distracted by this and thanks for posting a resolution.


Twitter Handles can't be used as "markup" value

Hi guys,
weird problem: I want to do build a textarea with a twitter autocomplete. When a user enters "@" it should start the autocomplete process. for example: this is a test, hello @jollife.
As a result, I want the text to stay the same this is a test, hello @jollife. When using @__id__ as markup value, the whole process gets stuck:
typing the first @j would lead to a highlighted j, and cursor is captured and i can't add a single more character.
When using "@@__id__" and typing "@jollife" only the "@" gets highlighted and the underlying value of the form field is @@@jollife.
When using "__display__" it kind of works, but the whole text is highlighted. and when I choose a specific twitter handle, I get a second suggestion after adding the first to the textarea.

I'm afraid using the markup @__id__ is currently not supported. That is because internally we'd generate the regexp @(.+?) for matching mentions in the text value. What you'd need however is a regexp, such as @(\w+).
It seems a good idea to allow users to optionally specify a custom regex for markup matching.

This is related to #21

Actually, this even is a duplicate of #21

@johannesnagl If you want to work on a solution for this, take a look at the custom-regex branch, where I started implementing customizability for markup matching some time ago, but it's obviously quite outdated.


How to get affected models from a FlowContentObserver.OnModelStateChangedListener

Hi I am new to DBFlow and so far I really like it. I had a question about ObservableModel's.  I have set up a FlowContentObserver.OnModelStateChangedListener and it is working well, however, I would like to know which models were affected by the change.
mObserver = new FlowContentObserver();

// registers for callbacks from the specified table
mObserver.registerForContentChanges(this, Ant.class);
mObserver.addModelChangeListener(new FlowContentObserver.OnModelStateChangedListener() {
        @Override
        public void onModelStateChanged(Class<? extends Model> table, BaseModel.Action action) {
            // Here I want to know which Ant Model's were affected in this change
        }
});

Is there a way to get the get the affected models or possible just their primary keys? This would be a great help for my use case.

hey @easyspeak, Not currently in this release. I will have to formulate some kind of way to handle cases where there are complex primary keys (maybe enforce a row_id/single primary key instead).

Hi @agrosner thanks for the quick reply and adding this enhancement to the next milestone. This feature would allow for some very simple yet powerful data-binding, I can't wait to see it in action.


Use custom regex for matching parameters?

Express is permissive when it comes to accepting what characters are captured with route parameters. For example:
Route path: /users/:userId
Request URL: http://localhost:3000/users/name@example.com:ResetPassword
req.params: { "userId": "name@example.com:ResetPassword" }

An alternative regex for parameter matching can be set on a route by route basis with parentheses. For example:
Route path: /user/:userId(\d+)
Request URL: http://localhost:3000/user/42
req.params: {"userId": "42"}

Is it possible to change the default parameter match regex so it doesn't need to be specified within every route?
I ask because Google's Api design recommendation is to use colons to specify custom method names. For example:
https://service.name/v1/some/resource/name:customVerb
http://localhost:3000/users/name@example.com:ResetPassword
Source: https://cloud.google.com/apis/design/custom_methods
I'd like to write an Express route to match paths with Google style custom methods. For example:
Route path: /users/:userId::ResetPassword
Request URL: `http://localhost:3000/users/name@example.com:ResetPassword`
req.params: {"userId"<EMAIL_ADDRESS>
But the above doesn't seem possible with Express' default parameter match regex, if I'm not doing something wrong. Any ideas?

Does app.param (http://expressjs.com/en/api.html#app.param) work for your use case? If it doesn't, that's OK, but I may need to understand why not so I can better understand the request.
At the base level, no, it's not possible to define a default character set for what a parameter matches currently. But that doesn't mean you cannot achieve what you're trying to do in another way that let's you not repeat yourself over and over, which is what I'm trying to help figure out with the above question 👍

Thanks for the assistance Doug. Please let me know if there is anything that isn't clear, or if you need a minimal, reproducible example.

Does app.param (http://expressjs.com/en/api.html#app.param) work for your use case? If it doesn't, that's OK, but I may need to understand why not so I can better understand the request.

I'm new to express. I'm just spent some time reading the docs for app.param. From what I can tell, the app.param functionality isn't what I'm looking for. But maybe I'm not seeing how the to take advantage of it for my use case.
The closest I can get so far, without defining a custom parameter match regex, is
import express from 'express';

const router = express.Router();

router
    .get('/users/:userId::action', async (req, res) => {
        // Route 1.
        console.log('Route 1 matched.', req.params);
        switch (req.params.action) {
            case 'ResetPassword':
                res.send('ResetPassword');
                break;
            case 'update':
                res.send('updated');
                break;
            default:
                res.send('invalid action');
                break;
        }
    })
    .get('/users/:userId', async (req, res) => {
        // Route 2.
        console.log('Route 2 matched.');
        res.send(`User info for "${req.params.userId}"`);
    });

Route 1  will be matched with the following routes.

/users/JohnSmith:ResetPassword
/users/JohnSmith:ResetPassword:otherRandomAction

Route 2 will be matched with /users/JohnSmith due to the order in which the routes are defined.

I think adding the following to your code example above should result in the behavior you're looking for:
router.param('userId', (req, res, next, userId) => next(userId.contains(':') ? 'route' : null))

I think adding the following to your code example above should result in the behavior you're looking for:
router.param('userId', (req, res, next, userId) => next(userId.contains(':') ? 'route' : null))

Calling next('route'); causes Express to return an error doesn't it? If so, I'm not sure how that helps. Am I misunderstanding something?
What I'm looking to do is match Google style API routes with custom methods specified with a colon (:). For example:

http://localhost:3000/users/<name>:CustomMethod
http://localhost:3000/users/<name>:ResetPassword

My first instinct is to aim for something like:
router
    // Should match `/users/john`
    .get('???', async (req, res) => {
        // Route 1.
        res.send('User info');
    })
    // Should match `/users/john:PasswordReset`
    .get('???', async (req, res) => {
        // Route 2.
        res.send('Password reset');
    })
    // Should match `/users/john:RefreshGravatar`
    .get('???', async (req, res) => {
        // Route 3.
        res.send('Liked');
    });

But so far I can only get this to work using regular expressions.
router
    // Should match `/users/john`
    .get('/users/:userId([^:/]+)', async (req, res) => {
        // Route 1.
        res.send('User info');
    })
    // Should match `/users/john:PasswordReset`
    .get(/users\/([^:\/]+):ResetPassword$/, async (req, res) => {
        // Route 2.
        res.send('Password reset');
    })
    // Should match `/users/john:RefreshGravatar`
    .get(/users\/([^:\/]+):RefreshGravatar$/, async (req, res) => {
        // Route 3.
        res.send('Gravatar refreshed');
    });

But regular expressions are hard to read, so it would be nice to use Express' route syntax, if possible. No stress if it's not. If this hasn't come up before, it's probably not a typical use case. :)

Calling next('route'); causes Express to return an error doesn't it? If so, I'm not sure how that helps. Am I misunderstanding something?

No, it shouldn't produce an error. Did adding that to your code and then making those requests result in an error? It shouldn't have; interesting. What error did you get?

Ok, I just looked at the docs again, next('route') should "bypass the remaining route callbacks", if so, that may explain what I saw.
The code I tested is as below:
const router = express.Router();

router.param('userId', (req, res, next, userId) => {
    next(userId.includes(':') ? 'route' : null);
});

router
    .get('/users/:userId::action', async (req, res) => {
        // Route 1.
        console.log('Route 1 matched.', req.params);
        switch (req.params.action) {
            case 'ResetPassword':
                res.send('ResetPassword');
                break;
            case 'update':
                res.send('updated');
                break;
            default:
                res.send('invalid action');
                break;
        }
    })
    .get('/users/:userId', async (req, res) => {
        // Route 2.
        console.log('Route 2 matched.');
        res.send(`User info for "${req.params.userId}"`);
    });

In the above configuration, the userId value in
router.param('userId', (req, res, next, userId) => {
    next(userId.includes(':') ? 'route' : null);
});

never contains a colon, so the result is always next(null), in which case nothing happens as far as I can tell.
I did change the router.param to always return next('route') and then response in Postman was shown as:
<!DOCTYPE html>

        <meta charset="utf-8">
        <title>Error</title>

Cannot GET /api/v1/notes/users/john:ResetPassword

So, I assume that response should be as expected.

Ah, sorry, then. I was thinking that may get you the behavior you were looking for in your example, though I'm not at my computer where I can test it. I'll have to circle back around again on this issue another day if no one else is available to help, as it is quite late where I am now :) Sorry I wasn't able to get your example working quickly :(

No problem, Doug, I appreciate the help. It's likely I'm just being daft. 😃


CMake build script for TSMP-PDAF

Goal of this PR is writing a CMake script for TSMP-PDAF that works in the CMake framework set up in the eTSMP repository.
Current status: A minimized Bash build script can compile CLM35-ParFlow-PDAF after the component models have been compiled using CMake in eTSMP.

Hey @kvrigor  thanks a lot for the great template BuildPDAF.cmake! I started from this and was now able to build the formerly Bash-script built PDAF versions with CMake.
I changed the format a little bit, using three seperate CMake files (maybe this fits the modular structure of CMake).
More things will be developed in the future, and I still have the problem with the duplicate -lmct that I will write an issue about, but in general from my side this can be merged!

I added a small change after merging PDAF-patches for OASIS under a cpp-definition.

Looks good @jjokella ! I did a couple of minor improvements. Could you also test in your side if the build still works? Some comments:

${CMAKE_INSTALL_PREFIX} should be used instead of ${BUILD_DIR} for referencing the header files and
the libraries since ${BUILD_DIR} is a temporary folder that can be deleted after the cmake --install step. This is already fixed.
Does the PDAF build generate an executable? If so, after the install step it should be visible under ${CMAKE_INSTALL_PREFIX}/bin. If it doesn't appear, then the executable may need to be manually installed like how it's done in BuildCOSMO.cmake:

https://github.com/HPSCTerrSys/eTSMP/blob/d1eddfed78ce0ee72698107234a5285014c3d7ca/cmake/BuildCOSMO.cmake#L33-L36

The PDAF-Framework project generates an executable ${CMAKE_INSTALL_PREFIX}/bin/tsmp-pdaf. I guess, this can be done in a nicer CMake-way, though.
I have slightly changed giving the USE_PDAF to eCLM, in particular I have moved this out of the OASIS nested condition.

The PDAF-Framework project generates an executable ${CMAKE_INSTALL_PREFIX}/bin/tsmp-pdaf. I guess, this can be done in a nicer CMake-way, though.

That's already perfect! The model's native build system is supposed to properly install its artifacts to the right locations. What we did for COSMO is actually a workaround 😅

Looks good @jjokella ! I did a couple of minor improvements. Could you also test in your side if the build still works?

I ran the tests on JURECA and had to re-introduce some of the ugly path-setting. I tried to document the files that were missing.
Now, I am back at the point that everything compiles, except the "Duplicate -lmct Issue" for eCLM-ParFlow-PDAF. When I fix this by hand and only run the last linker command, then I can also compile eCLM-ParFlow-PDAF.

I ran the tests on JURECA and had to re-introduce some of the ugly path-setting. I tried to document the files that were missing.

 This fix installs all header files to ${CMAKE_INSTALL_PREFIX}/include/clm3.5.

When I fix this by hand and only run the last linker command

Can you share the exact commands so I could also replicate them?  This fix installs all header files to ${CMAKE_INSTALL_PREFIX}/include/clm3.5.

In my tests with CLM3.5,  ${CMAKE_INSTALL_PREFIX}/include/clm3.5 contains object files (*.o).
For CLM3.5-PDAF this was fine.
For CLM3.5-ParFlow-PDAF and the compilation is asking me for  ParFlow-related header files like amps_common.h and parflow_config.h. I have added these two by hand, but not yet committed it, because there was still an error left in CLM3.5-ParFlow-PDAF compilation, when I finished yesterday.
eCLM-ParFlow-PDAF

When I fix this by hand and only run the last linker command

Can you share the exact commands so I could also replicate them? :)

The whole command is very long. Easiest replication should be running the README for eCLM-Parflow-PDAF, then finally running the build command with -v option. Then, the last command before the error can be copied from command line output, the eCLM -lmct has to be changed to -lmct2.
Summary of commands
# README commands until build step

# Build step, verbose
cmake --build ${BUILD_DIR} -v

# Rename eCLM-generated `libmct.a` to `libmct2.a`
mv ${CMAKE_INSTALL_PREFIX}/lib/libmct.a ${CMAKE_INSTALL_PREFIX}/lib/libmct2.a

# Move into compile directory
cd ${PDAF_SRC}/interface/framework

# Run copied and manipulated linking command for PDAF-Framework
#  (the pasted command is my command with specific paths replaced by the corresponding environment variables)
#  Notice: `-lmct2` in eCLM library section
${EBROOTPSMPI}/bin/mpif90 -O2 -xHost -r8 -o ${CMAKE_INSTALL_PREFIX}/bin/tsmp-pdaf mod_parallel_model.o mod_tsmp.o mod_parallel_pdaf.o mod_assimilation.o parser_mpi.o mod_read_obs.o pdaf_terrsysmp.o integrate_pdaf.o init_parallel_pdaf.o finalize_pdaf.o init_pdaf.o init_pdaf_parse.o init_pdaf_info.o assimilate_pdaf.o init_ens.o prepoststep_ens_pdaf.o next_observation_pdaf.o distribute_state_pdaf.o collect_state_pdaf.o init_obs_pdaf.o init_dim_obs_pdaf.o obs_op_pdaf.o prodrinva_pdaf.o init_obsvar_pdaf.o add_obs_error_pdaf.o init_obscovar_pdaf.o init_n_domains_pdaf.o init_dim_l_pdaf.o g2l_state_pdaf.o l2g_state_pdaf.o prodrinva_l_pdaf.o init_obs_l_pdaf.o init_dim_obs_l_pdaf.o g2l_obs_pdaf.o init_obsvar_l_pdaf.o init_dim_obs_f_pdaf.o init_obs_f_pdaf.o obs_op_f_pdaf.o localize_covar_pdaf.o -L${PDAF_SRC}/lib -lpdaf-d -Wl,--start-group ${EBROOTIMKL}/mkl/latest/lib/intel64/libmkl_intel_lp64.a ${EBROOTIMKL}/mkl/latest/lib/intel64/libmkl_intel_thread.a ${EBROOTIMKL}/mkl/latest/lib/intel64/libmkl_core.a -L${EBROOTPSMPI}/lib64 -Wl,--end-group -qopenmp -lpthread -lm ${CMAKE_INSTALL_PREFIX}/lib/libmodel.a -L${CMAKE_INSTALL_PREFIX}/lib -L${EBROOTPSMPI}/lib -lmpich -L${EBROOTNETCDF}/lib64 -L${EBROOTNETCDFMINFORTRAN}/lib -lnetcdff -lnetcdf -L${CMAKE_INSTALL_PREFIX}/lib -leclm -lclm -ldatm -lglc -lgptl -lice -lmosart -locn -lpio -lwav -lesp -lmct2 -lmpeu -lpnetcdf -qmkl -lcsm_share -L${CMAKE_INSTALL_PREFIX}/OASIS3-MCT/lib -lpsmile.MPI1 -lmct -lmpeu -lscrip -L${CMAKE_INSTALL_PREFIX}/lib -lpfsimulator -lamps -lpfkinsol -lgfortran -lcjson -L${EBROOTHYPRE}/lib -lHYPRE -L/lib64 -lslurm

In my tests with CLM3.5, ${CMAKE_INSTALL_PREFIX}/include/clm3.5 contains object files (*.o).

My bad! Already fixed in https://github.com/HPSCTerrSys/CLM3.5/commit/6301079b68e08297a5eb7814bc90ad4f39e770c6. PDAF should now be able to include from ${CMAKE_INSTALL_PREFIX}/include/clm3.5.

For CLM3.5-ParFlow-PDAF and the compilation is asking me for ParFlow-related header files like amps_common.h and parflow_config.h.

Assuming you have this fix, all ParFlow header files should be under ${CMAKE_INSTALL_PREFIX}/include/parflow:
$ ls ${INSTALL_DIR}/include/parflow
amps_common.h      f2c.h                index_space.h         parflow_config.h     pf_omploops.h
amps.h             fgetopt.h            info_header.h         parflow.h            pfversion.h
amps_proto.h       file_versions.h      input_database.h      parflow_netcdf.h     problem_bc.h
backend_mapping.h  general.h            kinsol_dependences.h  parflow_proto_f90.h  problem_eval.h
background.h       geometry.h           lb.h                  parflow_proto_f.h    problem.h
bc_pressure.h      geostats.h           llnlmath.h            parflow_proto.h      region.h
char_vector.h      globals.h            llnltyps.h            pf_cudaloops.h       solver.h
clustering.h       grgeometry.h         logging.h             pf_cudamalloc.h      time_cycle_data.h
communication.h    grgeom_list.h        loops.h               pf_devices.h         timing.h
computation.h      grgeom_octree.h      matrix.h              pf_hypre.h           vector.h
drv_gridmodule.h   grid.h               metadata.h            pf_kokkosloops.h     well.h
drv_module.h       hbt.h                nl_function_eval.h    pf_kokkosmalloc.h
drv_tilemodule.h   hypre_dependences.h  n_vector.h            pf_module.h

Hey @jjokella we're almost there! We can merge this PR after we nail these three things:

[ ] All include and linker paths passed to PDAF should reference solely from ${CMAKE_INSTALL_PREFIX}.  We strive to package the built component models into a single install folder (i.e. ${CMAKE_INSTALL_PREFIX} ), which means all model binaries and its dependencies should live inside this folder.

eCLM should now be fine, but CLM3.5 and ParFlow still declares paths outside ${CMAKE_INSTALL_PREFIX}.
If there are still missing include files, we need to fix them at the component model side.

[ ] CLM3.5-ParFlow-PDAF build should work
[ ] eCLM-ParFlow-PDAF build should work (libmct.a is now automatically renamed after eCLM installation )

Hey @kvrigor  thanks for your changes! We really are getting close. After my tests, we have three unwanted include paths left:
eCLM:
https://github.com/HPSCTerrSys/eTSMP/blob/dfc8ac037f9b07ef6f844ae11294cbabf284e675/cmake/BuildPDAFMODEL.cmake#L36-L37
ParFlow:
https://github.com/HPSCTerrSys/eTSMP/blob/dfc8ac037f9b07ef6f844ae11294cbabf284e675/cmake/BuildPDAFMODEL.cmake#L43

EDIT: for the Parflow-side, I have introduced a proposed fix: https://github.com/HPSCTerrSys/parflow/commit/0ce06f95136b4e6615c7331eb2e8c60fb12e9db6

I think our commit are clashing: this should have been fixed at https://github.com/HPSCTerrSys/parflow/commit/dbeda10622f0abaa9b2690f1304832b474ab30f2, but I don't see this anymore after your commit. Can you help to fix this?

EDIT: for the Parflow-side, I have introduced a proposed fix: HPSCTerrSys/parflow@0ce06f9

I think our commits are clashing: this should have been fixed at HPSCTerrSys/parflow@dbeda10, but I don't see this anymore after your commit. Can you help to fix this?

You entered the commit in the master and I merged it into the branch tsmp-pdaf. In this branch, both changes are inside: https://github.com/HPSCTerrSys/parflow/blob/tsmp-pdaf/pfsimulator/amps/CMakeLists.txt
Hm, in my test, adding the files to HEADER_FILES did not help. Maybe the files are added after the install command in pfsimulator/parflow_lib/CMakeLists.txt is executed?
Anyway, I will also do a test without my change inside.

CLM3.5-ParFlow-PDAF works! However I get an error for eCLM-ParFlow-PDAF:
../make.arch/linux_ifort.h:18: *** Recursive variable 'CC' references itself (eventually).  Stop.
gmake[2]: *** [CMakeFiles/PDAF.dir/build.make:86: PDAF/src/PDAF-stamp/PDAF-build] Error 2
gmake[1]: *** [CMakeFiles/Makefile2:173: CMakeFiles/PDAF.dir/all] Error 2

CLM3.5-ParFlow-PDAF works! However I get an error for eCLM-ParFlow-PDAF:

Yes that was me being overly eager to start making the PDAF compilation less environment-specific by changing PDAF's own Makefile(-header) in order to use the compilers specified by the envvars FC and CC set from the scripts in eTSMP/env.
With the newest version of PDAF, this should be fixed (by commenting out setting FC in the Makefile-header).

eCLM-PDAF now works 👍🏽. eCLM/devel-pdaf has now been merged to eCLM/master. The README needs to be updated so that it points to the default eCLM branch. I'll test the eCLM-PDAF build once more; this time with eCLM/master.
@jjokella feel free to do final cleanups/edits as you wish. Once you give me the green light I will merge this PR.


Updated JDK versions in Cloud Shell/Code Editor

Changes:

Updated JDK versions in Cloud Shell/Code Editor
Save Native Image build output JSON
Using Micronaut 3.7.3

Hi @ashok-cm - can you please review and merge my changes?


4.0.0 rc1 : translation not working

Hi guys,
I downloaded the first release candidate for version 4 but I could not manage to make translation working. I tried the following for both French and Spanish without success:
First, I import javascript files as follow:
<script src="path/to/select2/dist/js/select2.min.js"></script>
<script src="path/to/select2/dist/js/i18n/fr.js"></script>

Then I apply options on my select as follow:
$("#my-select").select2({
    maximumSelectionLength: 3,
    language: "fr",
});

My console shows no error. The same goes using select2.js instead of select2.min.js.
Thanks!
Quentin

I cannot reproduce the issue you are seeing.
Here is the test case I used: http://jsbin.com/vononirehu/1/edit

Okay maybe I should have added a bit more details here. Anyway, your explanation is a bit elusive to me.
Please check out that JS Bin and let me know if you see some French when you try to select a second option: http://jsbin.com/bugawebiqa/1/
Cheers

The issue is that maximumSelected is misspelled in the French locale.

 There are 15 languages with the same spelling error (according to GitHub search results). I will fork and ask for pull request.
Thanks for your time!


Allow version x.yz.w format in release workflow

Describe your changes

Linked issues

Closes
Breaking changes

[ ] This issue contains breaking changes

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Comparison is base (d12f31e) 69.20% compared to head (bcc3a39) 69.20%.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #414   +/-   ##
=======================================
  Coverage   69.20%   69.20%
=======================================
  Files          71       71
  Lines        3117     3117
  Branches      315      315
=======================================
  Hits         2157     2157
  Misses        810      810
  Partials      150      150

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


Unable to pass undefined as mock return value

Currently an Env mapping is missing a value for... error will be thrown when a mapping specifies undefined as its return value, ie
[call(shouldReturnUndefined), undefined]

due to the check on line 164 of core.js:
var nextValFound = nextVal !== undefined;

I believe undefined is a valid return value, so this throw condition seems to be in error.  The absence of a return value should instead be caught by isNestedArray, which confirms the array has a length of 2.
My suggested fix would be to remove line 164 (happy to do a PR!), but raising an issue to confirm there's not some other reasoning behind this assertion.

@steevsachs I think that's a fair point. Happy to receive a PR on it! :-)


Add Warning for Users Compiling Native Link

The Rust compiler, rustc, can generate a ton of artifacts in compilation, ranging from dependencies and macros to generated code and intermediate files. Users should be warned that if they choose to compile the program for source, they should keep an eye on the associated files and their impact on disk usage on the host.
For users looking to understand the impact, they can look at the target/ directory. Users relying on the executable should not have this problem.

@MarcusSorealheis , @blakehatch
It's a really good idea, I think.
I actually faced that kinda disk full issue while I was working on my Windows VPS machine which has low capacity of hard disks.
At that time, I used cargo run command and multiple download of libraries seem to pile up my disk and it finally made my VPS to get stuck.
In my case cargo clean command worked fine for deleting the cache files which is large.
Plus, when we use bazel run, I think bazel clean --expunge command would work fine.
Of course, it's true that it's a simple general knowledge but we should target novice users as well, I think.
Thanks.


ERROR: Could not build wheels for nes-py, which is required to install pyproject.toml-based projects

pip install nes-py
Collecting nes-py
  Downloading nes_py-8.2.1.tar.gz (77 kB)
     ---------------------------------------- 77.7/77.7 kB 613.0 kB/s eta 0:00:00
  Preparing metadata (setup.py) ... done
Collecting gym>=0.17.2 (from nes-py)
  Downloading gym-0.26.2.tar.gz (721 kB)
     ---------------------------------------- 721.7/721.7 kB 827.3 kB/s eta 0:00:00
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Installing backend dependencies ... done
  Preparing metadata (pyproject.toml) ... done
Requirement already satisfied: numpy>=1.18.5 in e:\python311-venv\lib\site-packages (from nes-py) (1.25.0)
Collecting pyglet<=1.5.21,>=1.4.0 (from nes-py)
  Downloading pyglet-1.5.21-py3-none-any.whl.metadata (7.6 kB)
Requirement already satisfied: tqdm>=4.48.2 in e:\python311-venv\lib\site-packages (from nes-py) (4.66.1)
Collecting cloudpickle>=1.2.0 (from gym>=0.17.2->nes-py)
  Downloading cloudpickle-3.0.0-py3-none-any.whl.metadata (7.0 kB)
Collecting gym-notices>=0.0.4 (from gym>=0.17.2->nes-py)
  Downloading gym_notices-0.0.8-py3-none-any.whl.metadata (1.0 kB)
Requirement already satisfied: colorama in e:\python311-venv\lib\site-packages (from tqdm>=4.48.2->nes-py) (0.4.6)
Downloading pyglet-1.5.21-py3-none-any.whl (1.1 MB)
   ---------------------------------------- 1.1/1.1 MB 800.4 kB/s eta 0:00:00
Downloading cloudpickle-3.0.0-py3-none-any.whl (20 kB)
Downloading gym_notices-0.0.8-py3-none-any.whl (3.0 kB)
Building wheels for collected packages: nes-py, gym
  Building wheel for nes-py (setup.py) ... error
  error: subprocess-exited-with-error

  × python setup.py bdist_wheel did not run successfully.
  │ exit code: 1
  ╰─> [28 lines of output]
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build\lib.win-amd64-cpython-311
      creating build\lib.win-amd64-cpython-311\nes_py
      copying nes_py\nes_env.py -> build\lib.win-amd64-cpython-311\nes_py
      copying nes_py\_image_viewer.py -> build\lib.win-amd64-cpython-311\nes_py
      copying nes_py\_rom.py -> build\lib.win-amd64-cpython-311\nes_py
      copying nes_py\__init__.py -> build\lib.win-amd64-cpython-311\nes_py
      creating build\lib.win-amd64-cpython-311\nes_py\app
      copying nes_py\app\cli.py -> build\lib.win-amd64-cpython-311\nes_py\app
      copying nes_py\app\play_human.py -> build\lib.win-amd64-cpython-311\nes_py\app
      copying nes_py\app\play_random.py -> build\lib.win-amd64-cpython-311\nes_py\app
      copying nes_py\app\__init__.py -> build\lib.win-amd64-cpython-311\nes_py\app
      creating build\lib.win-amd64-cpython-311\nes_py\wrappers
      copying nes_py\wrappers\joypad_space.py -> build\lib.win-amd64-cpython-311\nes_py\wrappers
      copying nes_py\wrappers\__init__.py -> build\lib.win-amd64-cpython-311\nes_py\wrappers
      running build_ext
      building 'nes_py.lib_nes_env' extension
      creating build\temp.win-amd64-cpython-311
      creating build\temp.win-amd64-cpython-311\Release
      creating build\temp.win-amd64-cpython-311\Release\nes_py
      creating build\temp.win-amd64-cpython-311\Release\nes_py\nes
      creating build\temp.win-amd64-cpython-311\Release\nes_py\nes\src
      creating build\temp.win-amd64-cpython-311\Release\nes_py\nes\src\mappers
      cl.exe /c /nologo /O2 /W3 /GL /DNDEBUG /MD -Ines_py/nes/include -IE:\Python311-venv\include -IE:\Python311\include -IE:\Python311\Include /EHsc /Tpnes_py/nes/src/mappers\mapper_CNROM.cpp /Fobuild\temp.win-amd64-cpython-311\Release\nes_py/nes/src/mappers\mapper_CNROM.obj -std=c++1y -pipe -O3
      error: command 'cl.exe' failed: None
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for nes-py
  Running setup.py clean for nes-py
  Building wheel for gym (pyproject.toml) ... done
  Created wheel for gym: filename=gym-0.26.2-py3-none-any.whl size=827637 sha256=4bd5ea8e44a83ff271acbca77ab5ff7b8bd0bcd02a9d8b2065ef66a3c9b9ce5b
  Stored in directory: c:\users\ManPython\appdata\local\pip\cache\wheels\1c\77\9e\9af5470201a0b0543937933ee99ba884cd237d2faefe8f4d37
Successfully built gym
Failed to build nes-py
ERROR: Could not build wheels for nes-py, which is required to install pyproject.toml-based projects

Also need here pre-built wheels for python3.11 and python3.12
https://github.com/Youlixx/cynes/issues/1#ref-pullrequest-2194667773

pip install pyntendo
Collecting pyntendo
  Using cached pyntendo-0.0.8.tar.gz (1.1 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Building wheels for collected packages: pyntendo
  Building wheel for pyntendo (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Building wheel for pyntendo (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [35 lines of output]
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build\lib.win-amd64-cpython-311
      creating build\lib.win-amd64-cpython-311\nes
      copying nes\instructions.py -> build\lib.win-amd64-cpython-311\nes
      copying nes\meta.py -> build\lib.win-amd64-cpython-311\nes
      copying nes\peripherals.py -> build\lib.win-amd64-cpython-311\nes
      copying nes\rom.py -> build\lib.win-amd64-cpython-311\nes
      copying nes\tests.py -> build\lib.win-amd64-cpython-311\nes
      copying nes\utils.py -> build\lib.win-amd64-cpython-311\nes
      copying nes\__init__.py -> build\lib.win-amd64-cpython-311\nes
      creating build\lib.win-amd64-cpython-311\tests
      copying tests\__init__.py -> build\lib.win-amd64-cpython-311\tests
      creating build\lib.win-amd64-cpython-311\nes\cycore
      copying nes\cycore\__init__.py -> build\lib.win-amd64-cpython-311\nes\cycore
      creating build\lib.win-amd64-cpython-311\nes\pycore
      copying nes\pycore\bitwise.py -> build\lib.win-amd64-cpython-311\nes\pycore
      copying nes\pycore\carts.py -> build\lib.win-amd64-cpython-311\nes\pycore
      copying nes\pycore\memory.py -> build\lib.win-amd64-cpython-311\nes\pycore
      copying nes\pycore\mos6502.py -> build\lib.win-amd64-cpython-311\nes\pycore
      copying nes\pycore\ppu.py -> build\lib.win-amd64-cpython-311\nes\pycore
      copying nes\pycore\system.py -> build\lib.win-amd64-cpython-311\nes\pycore
      copying nes\pycore\__init__.py -> build\lib.win-amd64-cpython-311\nes\pycore
      running build_ext
      building 'nes.cycore.apu' extension
      creating build\temp.win-amd64-cpython-311
      creating build\temp.win-amd64-cpython-311\Release
      creating build\temp.win-amd64-cpython-311\Release\nes
      creating build\temp.win-amd64-cpython-311\Release\nes\cycore
      cl.exe /c /nologo /O2 /W3 /GL /DNDEBUG /MD -IE:\Python311-venv\include -IE:\Python311\include -IE:\Python311\Include /Tcnes/cycore\apu.c /Fobuild\temp.win-amd64-cpython-311\Release\nes/cycore\apu.obj
      apu.c
      E:\Python311\include\pyconfig.h(59): fatal error C1083: can't open file : 'io.h': No such file or directory
      error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\VC\\Tools\\MSVC\\14.39.33519\\bin\\Hostx64\\x64\\cl.exe' failed with exit code 2
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for pyntendo
Failed to build pyntendo
ERROR: Could not build wheels for pyntendo, which is required to install pyproject.toml-based projects

Looks it's more complicated problem here.


Move prefix struct to rattler

There is a utility struct called Prefix in the current repository. It contains high level code to interact with a conda environment on disk. It would be nice to move this to the rattler crate and add additional functionalities to it (like executing a transaction on it).
https://github.com/prefix-dev/pax/blob/7231f7ccccdb39f7e75dc3059aa6fd3abdf402ee/src/prefix.rs#L7-L8

Im not entirely sure whether or not we should do this still. There is some functionality (like discovering installed packages) that should be moved, but the Prefix struct itself has grown to incorporate pixi specific stuff.

Closing for now, open for to long without anything, reopen if still relevant


Remove $mw_log logger

Removing log which will no longer be used.

Just noticed while backporting https://github.com/ManageIQ/manageiq/pull/17130.
:level_mw: info can be removed from config/settings.yml as well?

Yes, that setting can be removed.


[SPARK-5476][SQL] Move RDD->DataFrame implicit conversion from SQLContext to api.scala.dsl.

This way it is more robust and reduces an import.

Test build #26304 has started for   PR 4265 at commit 5494d43.

This patch merges cleanly.

ML changes look good to me.

Test build #26304 has finished for   PR 4265 at commit 5494d43.

This patch fails Spark unit tests.
This patch merges cleanly.
This patch adds no public classes.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/26304/
Test FAILed.

This is breaking our current repo. Unless we can solve that, this likely won't go in.


A strange problem about "group"

Hi,
I encountered a strange problem when using external keyboard and group on "STM32F103";
My logic :
1、Create a group;
2、Create "window1",and create a hidden button on it，and set the button click event,add "btn" to group
3、When press "enter" key , delete "window1" to save rams，and create "window2" at the same time；
4、Create some objects on "window2" and add to group;
5、Create a hidden button on "window2". When press "enter" key, delete "window2" and Create "window1"；
My problem is in “window2”，Part of the code is as follows:
`
lv_res_t makeUpDlg(lv_obj_t *obj)
{
//printf("pvSetDlg\r\n");
setCurrentUi(0);
reloadGroup();
delPreDlg(obj);
lv_obj_t *cont;
cont = lv_cont_create(lv_scr_act(),NULL);
lv_cont_set_style(cont,&cont_style);
lv_obj_set_size(cont,LV_HOR_RES,LV_VER_RES);

setEscCallback(cont,setDlg);

lv_obj_t *label1;
label1 = lv_label_create(cont,NULL);
lv_label_set_text(label1,"设  置 >> 修  正");
lv_obj_align(label1,cont,LV_ALIGN_IN_TOP_LEFT,30,20);

lv_obj_t *btn1[6];
lv_obj_t *label[6];
for(uint8_t i = 0; i < 6; i ++)
{
	btn1[i] = lv_btn_create(cont,NULL);
	lv_btn_set_style(btn1[i],LV_BTN_STATE_REL,&cont_style);
	lv_btn_set_style(btn1[i],LV_BTN_STATE_PR,&cont_style);
	lv_btn_set_layout(btn1[i],LV_LAYOUT_OFF);
	lv_obj_set_size(btn1[i],320,34);
	lv_group_add_obj(group,btn1[i]);
	label[i] = lv_label_create(btn1[i],NULL);
}
lv_label_set_text(label[0],"1:小信号切除");
lv_label_set_text(label[1],"2:零点修正");
lv_label_set_text(label[2],"3:满度修正");
lv_label_set_text(label[3],"4:总量清零初始设置");
lv_label_set_text(label[4],"5:总量清零许可");
lv_label_set_text(label[5],"6:定量累计值自动清零许可");

lv_obj_align(btn1[0],cont,LV_ALIGN_IN_TOP_MID,-10,60);
lv_obj_align(btn1[1],btn1[0],LV_ALIGN_OUT_BOTTOM_LEFT,0,0);
lv_obj_align(btn1[2],btn1[1],LV_ALIGN_OUT_BOTTOM_LEFT,0,0);
lv_obj_align(btn1[3],btn1[2],LV_ALIGN_OUT_BOTTOM_LEFT,0,0);
lv_obj_align(btn1[4],btn1[3],LV_ALIGN_OUT_BOTTOM_LEFT,0,0);
lv_obj_align(btn1[5],btn1[4],LV_ALIGN_OUT_BOTTOM_LEFT,0,0);

lv_obj_align(label[0],btn1[0],LV_ALIGN_IN_LEFT_MID,10,0);
lv_obj_align(label[1],btn1[1],LV_ALIGN_IN_LEFT_MID,10,0);
lv_obj_align(label[2],btn1[2],LV_ALIGN_IN_LEFT_MID,10,0);
lv_obj_align(label[3],btn1[3],LV_ALIGN_IN_LEFT_MID,10,0);
lv_obj_align(label[4],btn1[4],LV_ALIGN_IN_LEFT_MID,10,0);
lv_obj_align(label[5],btn1[5],LV_ALIGN_IN_LEFT_MID,10,0);

lv_btn_set_action(btn1[0],LV_BTN_ACTION_CLICK,ssignalCut);
lv_btn_set_action(btn1[1],LV_BTN_ACTION_CLICK,zeroCorrect);
lv_btn_set_action(btn1[2],LV_BTN_ACTION_CLICK,maxCorrect);
lv_btn_set_action(btn1[3],LV_BTN_ACTION_CLICK,initTotalVal);
lv_btn_set_action(btn1[4],LV_BTN_ACTION_CLICK,totalClrEnable);
lv_btn_set_action(btn1[5],LV_BTN_ACTION_CLICK,fiexTotalClrEnable);

label1 = lv_label_create(cont,NULL);
lv_label_set_text(label1,VERSION);
lv_obj_align(label1,cont,LV_ALIGN_IN_BOTTOM_MID,0,0);

lv_obj_t *line;
line = lv_line_create(cont,NULL);
lv_line_set_points(line,lin_p1,2);
lv_line_set_style(line,&cont_style);

line = lv_line_create(cont,line);
lv_line_set_points(line,lin_p2,2);
return LV_RES_INV;

}
static lv_res_t maxCorrect(lv_obj_t *obj)
{
setCurrentUi(10);
reloadGroup();//Delete group objects and recreate group
delPreDlg(obj);//Delete the previous window
lv_obj_t *cont;
cont = lv_cont_create(lv_scr_act(),NULL);
lv_cont_set_style(cont,&cont_style);
lv_obj_set_size(cont,LV_HOR_RES,LV_VER_RES);

setEscCallback(cont,makeUpDlg);

lv_obj_t *label1;
label1 = lv_label_create(cont,NULL);
lv_label_set_text(label1,"满度修正");
lv_obj_align(label1,cont,LV_ALIGN_IN_TOP_MID,0,20);
//pos 1:

lv_obj_t *ta;
ta = lv_ta_create(cont,NULL);
lv_ta_set_one_line(ta,true);
lv_obj_align(ta,cont,LV_ALIGN_CENTER,0,0);
lv_obj_set_size(ta,200,20);
lv_ta_set_style(ta,LV_TA_STYLE_BG,&cont_style);
lv_ta_set_text(ta,"0");
lv_group_add_obj(group,ta);

//pos 2:

label1 = lv_label_create(cont,NULL);
lv_label_set_text(label1,VERSION);
lv_obj_align(label1,cont,LV_ALIGN_IN_BOTTOM_MID,0,0);

lv_obj_t *line;
line = lv_line_create(cont,NULL);
lv_line_set_points(line,lin_p1,2);
lv_line_set_style(line,&cont_style);

line = lv_line_create(cont,line);
lv_line_set_points(line,lin_p2,2);
//pos 3:
setHiddenEnterBtn(cont,makeUpDlg);

return LV_RES_INV;

}
void setHiddenEnterBtn(lv_obj_t *parent,lv_action_t action)
{
hidden_enter_btn = lv_btn_create(parent,NULL);
lv_obj_set_hidden(hidden_enter_btn,true);
//lv_group_add_obj(group,hidden_enter_btn);
lv_btn_set_action(hidden_enter_btn,LV_BTN_ACTION_CLICK,action);
}
`
When the function "setHiddenEnterBtn()" is on "//pos 1",the "maxCorrect" window will not be loaded and the program will be circulate in "lv_draw.c"
When the function "setHiddenEnterBtn()" is on "//pos 2".When the "enter" key is pressed, there will be a segment error，I tracked the debug result is when window "makeUpDlg()" delete the "line" object of "maxCorrect()",That's what I can't understand because the others "callback"  of  "makeUpDlg()" It's normal.
I put the "setHiddenEnterBtn()" on "//pos 3:" in the end,and it worked well.I don't know why;
I don't know if I have described the problem clearly . I would like to know if there are any points for attention when using the group?

please can you edit your post and use github markup to enclose the code in backquotes?
See https://guides.github.com/features/mastering-markdown/#examples

Hi,
I'm sorry！Now I uploaded my project code, running in PC simulator;
The code that appears to be problem is located in "app/pvset.c"，and I added annotations in line.210 and line.222;
The operation steps are：
1、Run the compiled program;
2、Press "enter" key and jump to next "window"
3、Group default focus on "流量"，and press "enter",jupm to next "window"
4、Press "Tab" key to focus on "3:流量上限设定",then the fault will appear;
pc_simulator_test.zip
Thanks for your help!

Hi,
As @hydra asked please format the code in your first post using markdown.
I tested your project and I needed to increase LV_MEM_SIZE even to see the first screen. I changed LV_MEM_SIZE to 8 * 1024 and it worked for me. See the attached image.
Is it working there with larger LV_MEM_SIZE?

Hi,
I don't think it's a memory problem，now i set the LV_MEM_SIZE to 100 * 1024 , but the fault still exists;
And it's very strange, see the picture:
The function setHiddenEnterBtn is in line.210，it works well;

The function setHiddenEnterBtn is in line.222，and set text of "ta" to "hello" ,it works well;

But it will get fault when set text of "ta" to others such as "0"、“1”、"123" and so on;

This is just a part of the problem，sometimes it makes a mistake at different locations of different windows，now I make the program normal by modifying the function position；
But I am not sure whether it is normal after normal use or adding other functions, because I can't fully control the code now . I tried to track debugging, but I can't find the reason now.

Now I've found another problem，see the pictures:

Hi,
It seems like you write to mush data into a buffer or array. Especially according to the last post ('.' changed to ',').

Please update lvgl from the dev-5.2 branch. Thre are some fixes in it, maybe it's a library issue.
Run your code in Debug to see where it will halt.

Hi ,
I Debug my code , when this fault is appear:

The code will break here:

I really can't understand，can you help me?

Ok，i'm update lvgl from the dev-5.2 branch，it works well now!

Huh, great! :)


peek: 1.3.0 -> 1.3.1

Semi-automatic update generated by https://github.com/ryantm/nixpkgs-update tools.
This update was made based on information from https://repology.org/metapackage/peek/versions.
These checks were done:

built on NixOS
ran ‘/nix/store/6qsj0hw5vl2i0398i0y2n9jjg0l28mz5-peek-1.3.1/bin/peek -h’ got 0 exit code
ran ‘/nix/store/6qsj0hw5vl2i0398i0y2n9jjg0l28mz5-peek-1.3.1/bin/peek --help’ got 0 exit code
ran ‘/nix/store/6qsj0hw5vl2i0398i0y2n9jjg0l28mz5-peek-1.3.1/bin/.peek-wrapped -h’ got 0 exit code
ran ‘/nix/store/6qsj0hw5vl2i0398i0y2n9jjg0l28mz5-peek-1.3.1/bin/.peek-wrapped --help’ got 0 exit code
found 1.3.1 with grep in /nix/store/6qsj0hw5vl2i0398i0y2n9jjg0l28mz5-peek-1.3.1
directory tree listing: https://gist.github.com/d9ae1da7a87a6e5703b8ef273d0bab8a

cc @puffnfresh for review

No attempt on x86_64-darwin (full log)
The following builds were skipped because they don't evaluate on x86_64-darwin: peek
Partial log (click to expand)

a) For `nixos-rebuild` you can set
  { nixpkgs.config.allowUnsupportedSystem = true; }
in configuration.nix to override this.

b) For `nix-env`, `nix-build`, `nix-shell` or any other Nix command you can add
  { allowUnsupportedSystem = true; }
to ~/.config/nixpkgs/config.nix.

Success on x86_64-linux (full log)
Attempted: peek
Partial log (click to expand)
post-installation fixup
Wrapping program /nix/store/1kiwbr7yz7024i9hdv7sg5q85cfmdiij-peek-1.3.1/bin/peek
shrinking RPATHs of ELF executables and libraries in /nix/store/1kiwbr7yz7024i9hdv7sg5q85cfmdiij-peek-1.3.1
shrinking /nix/store/1kiwbr7yz7024i9hdv7sg5q85cfmdiij-peek-1.3.1/bin/.peek-wrapped
gzipping man pages under /nix/store/1kiwbr7yz7024i9hdv7sg5q85cfmdiij-peek-1.3.1/share/man/
strip is /nix/store/j75dgadrff2d1fyc4fczmcgqkid2imdx-binutils-2.30/bin/strip
stripping (with command strip and flags -S) in /nix/store/1kiwbr7yz7024i9hdv7sg5q85cfmdiij-peek-1.3.1/bin
patching script interpreter paths in /nix/store/1kiwbr7yz7024i9hdv7sg5q85cfmdiij-peek-1.3.1
checking for references to /build in /nix/store/1kiwbr7yz7024i9hdv7sg5q85cfmdiij-peek-1.3.1...
/nix/store/1kiwbr7yz7024i9hdv7sg5q85cfmdiij-peek-1.3.1

Success on aarch64-linux (full log)
Attempted: peek
Partial log (click to expand)
post-installation fixup
Wrapping program /nix/store/w9qllxv5qwgfpgayq0vjj7k9w9dzxqin-peek-1.3.1/bin/peek
shrinking RPATHs of ELF executables and libraries in /nix/store/w9qllxv5qwgfpgayq0vjj7k9w9dzxqin-peek-1.3.1
shrinking /nix/store/w9qllxv5qwgfpgayq0vjj7k9w9dzxqin-peek-1.3.1/bin/.peek-wrapped
gzipping man pages under /nix/store/w9qllxv5qwgfpgayq0vjj7k9w9dzxqin-peek-1.3.1/share/man/
strip is /nix/store/j7d4mr0ikv974ig7yzhknpsq288js4bs-binutils-2.30/bin/strip
stripping (with command strip and flags -S) in /nix/store/w9qllxv5qwgfpgayq0vjj7k9w9dzxqin-peek-1.3.1/bin
patching script interpreter paths in /nix/store/w9qllxv5qwgfpgayq0vjj7k9w9dzxqin-peek-1.3.1
checking for references to /build in /nix/store/w9qllxv5qwgfpgayq0vjj7k9w9dzxqin-peek-1.3.1...
/nix/store/w9qllxv5qwgfpgayq0vjj7k9w9dzxqin-peek-1.3.1

This app needs ffmpeg to work outside the Gnome desktop.

fixed


Use docker instead of MkDocs via Python if project reduces itself to material theme

Feature request / just an idea
As far as I can see this plugin uses MkDocs via Python "directly"; as it is documented, Python has to be available on the system.
The material theme for MkDocs has a Docker image available. I think it would be an improvement, if this plugin would be used with Docker as the only local dependency instead of Python, as Docker is (among others) system independent, and I can imagine Gradle-users having installed Docker way more often compared to Python.

Thank you for the idea - it is indeed an interesting option.
But I have to postpone this for now (I spent too much time on mkdocs plugin already and have some other urgent things to do right now). Later (more likely next year) I will look.


update benchmark.py

huggingface -> Hugging Face

huggingface -> Hugging Face

Thanks, but I don't think this change is particularly necessary. This is just an internal script and you can find plenty of places where the name is not capitalised.