Use CSE 2.0 API in search

@jseldess I attempted this but ran into a problem: our docs pages CSS overrides the default table CSS stylings. The Google results use table elements, and so they looked messed up on our page. I see two solutions:

We just redirect to google.com.
Someone fixes the CSS. This is not an easy change because it would require auditing all the uses of table on the site to figure out how to keep them correct and also allow the google tables to work. The docs CSS is kind of a mess because we have custom CSS, bootstrap CSS, and something called lavish CSS (which is some theme or something on bootstrap, but it's like not a strict subs or super-set of bootstrap so it's not easy to remove. I looked into this once a decided I didn't want to fix it). Doing a CSS deep dive and refactor is not something I'm going to do unless the sky is falling.

Thanks for looking into this, @mjibson. Fortunately, the sky isn't falling; we have a year to move over.
In the meantime, @kuanluo, once DivisionOf does a style audit between the site and docs, perhaps a next step could be to get them to help us cleanup/simplify the css. If we can get them for that, @mjibson, perhaps you could give guidance in terms of what we want the end-state to look like?

Yup, that's what I'm planning on, @jseldess. And if @mjibson is available, some guidance to Div/Of would be incredibly useful. Let me know!

I'm not really qualified to give much guidance here. Decisions like "how do we want our CSS organized" should be done by a person who has experience doing frontend/design stuff. I can describe a feature we want, which is that we want the CSS rules to uses classes instead of only raw elements, which would fix the above bug. Beyond that, I'm not sure.

Point taken, @mjibson, but in addition to sharing details about that bug with DivisionOf, I think your insights about our current css mess would be a good starting point for a cleanup by DivisionOf. A lot of the mess comes from the theme I chose when I started, and how we messily built on that subsequently.

@kuanluo, just fyi, this is definitely something for the web dev, once that's filled.

@jseldess Sounds great, totally agree.

@mjibson, do you remember what I might have meant by "CSE 2.0 API" here? I'm finding nothing on that when I search for alternatives to Google Site Search, for example, https://www.impactbnd.com/blog/3-life-saving-alternatives-to-google-site-search

I don't know where I got CSE from, but it's Google Custom Search.

According to the red note at the bottom of this page, "Google Site Search will be completely shut down by April 1, 2018." @kuanluo, that means this isn't an urgent project for Q4. But if we hire a web dev, it would be good to start looking at alternatives so we can implement something in Q1.

@jseldess That's fairly soon! I will prioritize that after we make the hire. Thanks for finding out the info.

Google API for search: https://developers.google.com/custom-search/json-api/v1/overview

@mjibson @jseldess @kuanluo, I went digging into this a bit more and I don't think we can go the Google route here.  As far as I can tell there is no version of Custom Search that is free and also unbranded/doesn't use AdSense.  The link that @jseldess indicated points to an API that hits Custom Search but requires either the free version (AdSense) or the paid version (currently in sunset) to be implemented.  So I think this ultimately will require us to go with a solution outside of Google.  If any of this doesn't sound correct please let me know.

Note that we can always have our search bar just redirect to google with a site: tag. Yes, it causes people to leave the site, but it does work and is free. Just something to keep in mind as a compromise or backup.

Thanks for the update, @j-low. In your research, have you found good potential alternatives? It's definitely preferable that we retain a search experience that keeps users on our site when they're using our search (as opposed to going directly to google).
It might be best for you to compile some alternatives and then schedule a meeting with @jess-edwards, @kuanluo, myself, and @mjibson.
FYI, the aerospike docs used to use google site search like us, and now they're using something else. Might want to check into that.
@bdarnell, what search does read the docs use, for example, on your tornado docs site?

Nevermind, @bdarnell, just found the answer: http://docs.readthedocs.io/en/latest/features.html?highlight=search#search

@jseldess, I did some research over the previous week and put together some rough notes on each including pricing and some breakdown of the features.  Almost all of them actively market themselves as an alternative to GSS. I'd be happy to review some of these in a meeting context.  I'll also look into Aerospike in the meantime.

@jseldess That readthedocs feature applies to the global search box on readthedocs.org, not the search boxes on individual doc pages (as far as I can tell - at least the tornado one is not using the RTD feature)
The tornado docs search is actually a feature of sphinx. It's hardly documented at all, just mentioned in passing in the sphinx configuration docs. If we move to sphinx, we'd get this search for free; if we don't make the switch then it probably wouldn't make sense to try to use it from jekyll (although there are probably jekyll plugins with a similar implementation)

Ah, thanks for clarifying, @bdarnell. I doubt we'll be able to move to Sphinx before the Google Site Search expires, but that's a larger project that @j-low is looking into.

This is done. Closing.


rawAggregation returns only the last aggregation instead of all aggregations

Package Version
4.0.3
Describe the Bug
The rawAggregation method is only returning the last aggregation result, instead of returning all specified aggregations.
To Reproduce
Here is the code that demonstrates the issue:
$body = [
    'query' => 'match_all',
    'size' => 0,
    'aggs' => [
        'brands' => [
            'terms' => [
                'field' => 'brand',
                'size'  => 100,
            ],
        ],
        'price_ranges' => [
            'range' => [
                'field' => 'price',
                'ranges' => [
                    ['to' => 10000],
                    ['from' => 10001, 'to' => 20000],
                    ['from' => 20001, 'to' => 50000],
                    ['from' => 50001],
                ],
            ],
        ],
        'fuel_types' => [
            'terms' => [
                'field' => 'fuel',
                'size'  => 100,
            ],
        ],
        'transmission_types' => [
            'terms' => [
                'field' => 'transmission',
                'size'  => 100,
            ],
        ],
    ],
];

$results = VehicleElastic::rawAggregation($body);
dd($results);

Issue Explanation
The query above defines multiple aggregations (brands, price_ranges, fuel_types, and transmission_types).
The rawAggregation method should return the results for all specified aggregations, but currently, it only returns the result for the last aggregation (transmission_types in this case).
Expected Behavior
The expected behavior is that the rawAggregation method should return the results for all specified aggregations as part of the response.
Component Versions
Please find the relevant versions from the composer.json file:
"require": {
    "php": "^8.2",
    "laravel/framework": "^11.9",
    "laravel/tinker": "^2.9",
    "league/flysystem-aws-s3-v3": "^3.28",
    "pdphilip/elasticsearch": "^4.0",
    "spatie/laravel-medialibrary": "^11.8",
    "tucker-eric/eloquentfilter": "^3.4"
}

Thanks for flagging @cristian-araujo - this will be fixed in the next release.

Hi @cristian-araujo - this has been fixed in the latest release: https://github.com/pdphilip/laravel-elasticsearch/releases/tag/v4.0.4


OPA- Different YAML configs in constraint creation

What kind of request is this (question/bug/enhancement/feature request):
question
Steps to reproduce (least amount of steps as possible):
From dashboard -> Install OPA Gatekeeper
Create constraint from form
Preview as YAML
Cancel creation
From constraint view, create as YAML
Result:
Create constraint from form -> Preview as YAML:

Create constraint from YAML

These two YAML configurations are different. Different constraint templates are used by default. Create from form uses k8sAllowedRepos as default. Create from YAML uses k8sRequiredLabels as default.
Should we change these so they use the same configuration?
Environment information

Rancher version (rancher/rancher/rancher/server image tag or shown bottom left in the UI): rancher\rancher:master-head version db8a864
Installation option (single install/HA): HA

I think it should be consistent but it appears to already be consistent for me.

Tested with Rancher server rancher\rancher:master-head version 298a206 and rancher\rancher:v2.5-head version 7d5afc0
Create as YAML and Edit as YAML are consistent with template used:

Create as YAML

Edit as YAML


Colorize text field

Hi Scott,
I'm using the sparkle-form-field in my web ressource. Now I want to change the background color of the field according to the field values. Can you please give me a hint how to do that?
Best Regards
Matt

You would have to provide an additional template parameter that could be bound to the VM. The templates are defined in https://github.com/scottdurow/SparkleXrm/blob/master/SparkleXrmSource/CrmPackage/WebResources/sparkle_/html/form.templates.htm
Perhaps a css class name would be the best way of parameterising the templates.

Thanks, Scott. I will try that.
In the meantime, I replaced the template with plain HTML and managed to set the CSS class name by using the "jQuery.Select" function. Of course, your approach with the template parameter would be much nicer.


736 threaded comments

Central changes to handle comment threading on the client implemented and polished.
Depends on https://github.com/Hylozoic/hylo-node/pull/595
Still a little left to do to paginate backwards through long sub-comment threads, but a UX review now would be great!

it all looks good, except i am seeing a bug where i click to load 36 previous comments and then it shows 16 previous comments, then it click it again and it says click to show -4 previous comments, and then i click it again and it says click to show -24 previous comments, and then i click it and it is showing all comments

Oh, well that's kinda weird but I sortof put all bets off on the pagination logic until the issues with the backend returning the wrong totals are resolved. I made myself a note to revisit and retest once the issue has been fixed in holonic-architecture.

another bug im seeing is i can only ever see the last two sub comments under a comment. when i add a third comment the first one disappears. even after page reload

This should be fixed now, it was to do with the logic for only showing a subset from the server. I am now adjusting totals for the newly injected comments which I think is probably the simplest/best way of handling this in this particular UI. But if the totals cached in Redux need to also be updated, there's more work there.
Probably worth testing what happens when somebody else adds a comment while you're looking at a thread, because that might throw totals off and require deeper integration than what I have added in 1203743d.

also a reminder to change the base of these PRs to the holonic-architecture branches


[BUG] Terminal has weird name on NixOS with home-manager

Describe the bug
On NixOS under home-manager the terminal app name starts with a . and ends with -wrapped,
I know this is because home-manager creates a kitty script which then calls an executable with the name .kitty-wrapped as seen below ↓

My proposal is to try parsing the $TERM or $TERMINFO environment variables if possible
To Reproduce
Steps to reproduce the behavior:

Run macchina
Look at result

Expected behavior
Terminal appears as kitty
Screenshots

System Information
You don't have to provide this information if you're not comfortable doing so, but it'll help us solve the issue a lot faster.

Distribution: NixOS
Desktop Environment: Hyprland
Operating System: Linux 5.15.79
Terminal: kitty
Macchina's version: 6.1.8

The current implementation parses /proc to determine the most likely terminal, but it does so through the /proc/PID/comm file which we have no way of saniziting.

Ah makes sense

$TERM has proven to be unreliable at detecting the real terminal being used (anyone can for example set the variable to xterm and that would then be reflected in macchina).

Thats true, I have seen that done a lot

$TERMINFO is new to me, I've never had to directly interact with it.
I believe we're better off returning the relevant terminfo description directly.

Yeah, I agree, idk if this helps but I found a crate that could aid in this https://crates.io/crates/terminfo

Yeah, I agree, idk if this helps but I found a crate that could aid in this crates.io/crates/terminfo

Yeah it looks like it will, I was never really a fan of our little procfs hack.

Oh yeah definitely seems pretty hacky

@grtcdr If you'd like I can write up something with this, just wanna know in case someone has already started on this.

Absolutely, go ahead!
I await the improvements your pull request will bring :)

After implementing terminfo, it seem futile, same issue as with $TERM

I found this result on stackoverflow that uses ps -o 'cmd=' -p $(ps -o 'ppid=' -p $$) to get the term name, which results in something like this

could the path then be stripped to only get exec name, as this method seems to use the exact exec name

Okay, so it sorta works. I mean it does, but when its in a nix-shell it says rc, which happens to be the exec name of nix shells. I'm quite sad, because I kept getting rc, and was very confused until i just ran ps, and it also said rc

I'll make the pr now

I've made a PR now! https://github.com/Macchina-CLI/libmacchina/pull/130

I'm closing this issue due to inactivity.


Is there a way to add a hive database with kerberos authentication?

The superset version is 1.0.0.The  "add database" operation works good with mysql database,but I can't succeed to connect hive database enabled kerberos authentication.

The response told me 'please check your logs for details',but there is only one line  in superset.log indicating "logging is configured successfully".
The configuration related with logging has been set as
ENABLE_TIME_ROTATE = Ture
TIME_ROTATE_LOG_LEVEL = "DEBUG"
LOG_LEVEL = "DEBUG"
I wonder how to specify user keytab and krb5.conf in the Add Database operation and how to enable the failing logs.
Could any one show me an example  to config the connection settings?

Your connection string is good for me. You can try to get a valid kerberos ticket in user superset on linux and run superset with user superset so that connection should be good.

Thanks for your reply.
I deploy superset on k8s and successfully use command 'kinit' to get   a kerberos ticket. The only difference with your advice is that both steps are with user root.However I still fail to connect to hive.
I have 2 questions :
1.Why  can't  superset print debug or even error massage in logs when failling to connect hive database ? If those logs are printed maybe I can know the reason.
2.How to use the following configuration ? The comments says it can be used to connect hive and It seems a better way to connect to hive.

1.Why can't superset print debug or even error massage in logs when failling to connect hive database ? If those logs are printed maybe I can know the reason.
You can find the reason in superset server log if you set your log LOG_LEVEL = "DEBUG"
2.How to use the following configuration ? The comments says it can be used to connect hive and It seems a better way to connect to hive.
I don't use this so I can't answer

I solved the problem by replacing the IP address with domain name. With IP address the kerberos  principal requested is incorrect.
Thank you all the same.

Hello!
@tsingmmy can you be so kind to explain where to put kerberos ticker in config?

Sorry. After so many years I can't remember clearly how to do it.  Maybe I just used kinit command to get the ticket. This was not graceful and I did't use superset in product environment.


Grabber isn't adding image data to local MySQL database(WampServer 2.2e, Gelbooru 0.1.11, Grabber 4.6.0)

Hi Bionus.
Though, it seems that the previously mentioned issue(#577) is solved with the update to 4.6.0 version, Grabber is still unable to add images to the local version of gelbooru. To be exact, Grabber is not adding appropriate data(tags, etc) to the database for some reason.
Grabber log shows that there was an error([18:09:57.367] line) while initializing commands and that's all. Here is full log:
[18:09:15.183] New session started.
[18:09:15.183] Software version: 4.6.0.
[18:09:15.183] Path: C:/Program Files (x86)/Grabber
[18:09:15.183] Loading preferences from C:\Users\user\AppData\Local\Bionus\Grabber\settings.ini
[18:09:15.185] Loading sources
[18:09:15.203] %n source(s) found: behoimi.org (Danbooru), chan.sankakucomplex.com (Sankaku), danbooru.donmai.us (Danbooru (2.0)), derpibooru.org (Booru-on-rails), e621.net (Danbooru), gelbooru.com (Gelbooru (0.2)), hijiribe.donmai.us (Danbooru (2.0)), ichijou.org (Danbooru), idol.sankakucomplex.com (Sankaku), konachan.com (Moebooru), rule34.paheal.net (Shimmie), rule34.xxx (Gelbooru (0.2)), safebooru.org (Gelbooru (0.2)), sonohara.donmai.us (Danbooru (2.0)), tentaclerape.net (Shimmie), www.zerochan.net (Zerochan), yande.re (Moebooru)
[18:09:15.203] It seems that Imgbrd-Grabber hasn't shut down properly last time.
[18:09:16.557] Logging into Gelbooru (gelbooru.com)...
[18:09:17.110] Updating "New tab" tab options.
[18:09:17.110] Updating checkboxes.
[18:09:17.155] Fin de l'initialisation.
[18:09:17.350] Logging into Gelbooru (gelbooru.com) finished (success).
[18:09:17.363] Updating "New tab" tab options.
[18:09:17.363] Updating checkboxes.
[18:09:49.230] Loading results...
[18:09:49.230] Loading page http://gelbooru.com/index.php?page=dapi&s=post&q=index&limit=20&pid=0&tags=guweiz horns
[18:09:49.329] Parse
[18:09:49.329] Receiving page http://gelbooru.com/index.php?page=dapi&s=post&q=index&limit=20&pid=0&tags=guweiz horns
[18:09:57.348] Batch download started.
[18:09:57.367] Error while initializing commands
[18:09:57.367] SQL execution of """"
[18:09:57.374] Loading images 'http://gelbooru.com/index.php?page=dapi&s=post&q=index&limit=3&pid=0&tags=guweiz horns'
[18:09:57.434] Parse
[18:09:57.439] Received image page 'http://gelbooru.com/index.php?page=dapi&s=post&q=index&limit=3&pid=0&tags=guweiz horns' (3)
[18:09:57.440] All images' urls have been received (3 images).
[18:09:57.446] Downloading images directly.
[18:09:57.450] Loading image from http://gelbooru.com/images/fe/c1/fec14954b4bae044ecb354d3c4f56db1.jpg 1
[18:09:57.651] Image received from http://gelbooru.com/images/fe/c1/fec14954b4bae044ecb354d3c4f56db1.jpg 1
[18:09:57.654] Execution of """"
[18:09:57.654] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("1girl", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.654] Execution of """"
[18:09:57.654] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("animal", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.654] Execution of """"
[18:09:57.654] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("armor", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.654] Execution of """"
[18:09:57.654] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("artist_name", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.654] Execution of """"
[18:09:57.654] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("black_hair", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.654] Execution of """"
[18:09:57.654] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("blue_ribbon", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.654] Execution of """"
[18:09:57.654] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("blurry", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.655] Execution of """"
[18:09:57.655] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("breasts", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.655] Execution of """"
[18:09:57.655] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("broken_cup", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.655] Execution of """"
[18:09:57.655] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("butterfly", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.655] Execution of """"
[18:09:57.655] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("chains", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.655] Execution of """"
[18:09:57.655] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("cleavage", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.655] Execution of """"
[18:09:57.655] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("clenched_hand", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.655] Execution of """"
[18:09:57.655] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("closed_mouth", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.655] Execution of """"
[18:09:57.655] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("cup", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.655] Execution of """"
[18:09:57.655] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("demon_girl", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.655] Execution of """"
[18:09:57.655] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("demon_horns", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.655] Execution of """"
[18:09:57.655] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("depth_of_field", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.656] Execution of """"
[18:09:57.656] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("dragon", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.656] Execution of """"
[18:09:57.656] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("earrings", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.656] Execution of """"
[18:09:57.656] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("expressionless", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.656] Execution of """"
[18:09:57.656] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("floating_hair", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.656] Execution of """"
[18:09:57.656] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("glasses", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.656] Execution of """"
[18:09:57.656] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("glowing", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.656] Execution of """"
[18:09:57.656] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("guweiz", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.656] Execution of """"
[18:09:57.656] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("highres", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.656] Execution of """"
[18:09:57.656] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("holding", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.656] Execution of """"
[18:09:57.656] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("holding_cup", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.656] Execution of """"
[18:09:57.656] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("horn_ornament", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.656] Execution of """"
[18:09:57.656] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("horn_ribbon", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.656] Execution of """"
[18:09:57.656] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("horns", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.656] Execution of """"
[18:09:57.656] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("insect", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.656] Execution of """"
[18:09:57.656] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("jewelry", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.656] Execution of """"
[18:09:57.656] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("long_hair", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.656] Execution of """"
[18:09:57.656] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("looking_at_viewer", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.656] Execution of """"
[18:09:57.656] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("medium_breasts", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.656] Execution of """"
[18:09:57.656] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("monster", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.656] Execution of """"
[18:09:57.656] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("necklace", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.658] Execution of """"
[18:09:57.658] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("orange_eyes", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.658] Execution of """"
[18:09:57.658] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("original", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.658] Execution of """"
[18:09:57.658] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("pendant", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.658] Execution of """"
[18:09:57.658] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("pink_lips", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.658] Execution of """"
[18:09:57.658] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("rain", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.658] Execution of """"
[18:09:57.658] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("ribbon", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.658] Execution of """"
[18:09:57.658] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("round_glasses", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.658] Execution of """"
[18:09:57.658] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("sharp_teeth", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.658] Execution of """"
[18:09:57.658] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("shoulder_pads", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.658] Execution of """"
[18:09:57.658] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("solo", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.658] Execution of """"
[18:09:57.658] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("teacup", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.658] Execution of """"
[18:09:57.658] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("teeth", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.658] Execution of """"
[18:09:57.658] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("very_long_hair", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.658] Execution of """"
[18:09:57.658] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("water", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.658] Execution of """"
[18:09:57.658] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("wind", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.658] Execution of """"
[18:09:57.658] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("yellow-framed_eyewear", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.660] Execution of "C:\Windows\System32\cmd.exe /C copy "C:\00\fec14954b4bae044ecb354d3c4f56db1.jpg" "C:\w64\www\gelbooru\images\1\fec14954b4bae044ecb354d3c4f56db1.jpg""
[18:09:57.680] SQL execution of "INSERT INTO posts(creation_date, hash, image, height, width, ext, rating, tags, directory, active_date) VALUES(NOW(), "fec14954b4bae044ecb354d3c4f56db1", "fec14954b4bae044ecb354d3c4f56db1.jpg", 918, 1600, ".jpg", "safe", " 1girl animal armor artist_name black_hair blue_ribbon blurry breasts broken_cup butterfly chains cleavage clenched_hand closed_mouth cup demon_girl demon_horns depth_of_field dragon earrings expressionless floating_hair glasses glowing guweiz highres holding holding_cup horn_ornament horn_ribbon horns insect jewelry long_hair looking_at_viewer medium_breasts monster necklace orange_eyes original pendant pink_lips rain ribbon round_glasses sharp_teeth shoulder_pads solo teacup teeth very_long_hair water wind yellow-framed_eyewear ", "1", "20110619");"
[18:09:57.686] Loading image from http://gelbooru.com/images/72/22/72223d32cdf598856b3b2cb7b39a77b3.jpg 1
[18:09:57.689] Image received from http://gelbooru.com/images/72/22/72223d32cdf598856b3b2cb7b39a77b3.jpg 1
[18:09:57.691] Execution of """"
[18:09:57.691] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("1girl", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.691] Execution of """"
[18:09:57.691] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("artist_name", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.691] Execution of """"
[18:09:57.691] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("black_dress", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.691] Execution of """"
[18:09:57.691] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("blue_hair", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.692] Execution of """"
[18:09:57.692] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("breasts", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.692] Execution of """"
[18:09:57.692] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("cleavage", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.692] Execution of """"
[18:09:57.692] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("cleavage_cutout", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.692] Execution of """"
[18:09:57.692] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("demon", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.692] Execution of """"
[18:09:57.692] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("dress", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.692] Execution of """"
[18:09:57.692] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("earrings", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.692] Execution of """"
[18:09:57.692] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("female", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.692] Execution of """"
[18:09:57.692] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("glowing", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.692] Execution of """"
[18:09:57.692] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("guweiz", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.692] Execution of """"
[18:09:57.692] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("horns", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.692] Execution of """"
[18:09:57.692] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("injury", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.692] Execution of """"
[18:09:57.692] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("jewelry", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.692] Execution of """"
[18:09:57.692] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("looking_afar", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.693] Execution of """"
[18:09:57.693] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("looking_up", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.693] Execution of """"
[18:09:57.693] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("medium_breasts", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.693] Execution of """"
[18:09:57.693] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("motion_blur", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.693] Execution of """"
[18:09:57.693] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("necklace", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.693] Execution of """"
[18:09:57.693] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("orange_eyes", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.693] Execution of """"
[18:09:57.693] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("parted_lips", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.693] Execution of """"
[18:09:57.693] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("pendant", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.693] Execution of """"
[18:09:57.693] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("pointy_ears", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.693] Execution of """"
[18:09:57.693] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("portrait", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.693] Execution of """"
[18:09:57.693] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("rain", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.693] Execution of """"
[18:09:57.693] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("red_lips", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.693] Execution of """"
[18:09:57.693] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("short_hair", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.693] Execution of """"
[18:09:57.693] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("solo", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.693] Execution of """"
[18:09:57.693] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("upper_body", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.694] Execution of """"
[18:09:57.694] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("water", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.694] Execution of """"
[18:09:57.694] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("water_drop", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.695] Execution of "C:\Windows\System32\cmd.exe /C copy "C:\00\72223d32cdf598856b3b2cb7b39a77b3.jpg" "C:\w64\www\gelbooru\images\1\72223d32cdf598856b3b2cb7b39a77b3.jpg""
[18:09:57.711] SQL execution of "INSERT INTO posts(creation_date, hash, image, height, width, ext, rating, tags, directory, active_date) VALUES(NOW(), "72223d32cdf598856b3b2cb7b39a77b3", "72223d32cdf598856b3b2cb7b39a77b3.jpg", 1101, 900, ".jpg", "safe", " 1girl artist_name black_dress blue_hair breasts cleavage cleavage_cutout demon dress earrings female glowing guweiz horns injury jewelry looking_afar looking_up medium_breasts motion_blur necklace orange_eyes parted_lips pendant pointy_ears portrait rain red_lips short_hair solo upper_body water water_drop ", "1", "20110619");"
[18:09:57.711] Loading image from http://gelbooru.com/images/b7/f7/b7f7c3952d8b375ef9d35f1e945ba148.png 1
[18:09:57.711] Image received from http://gelbooru.com/images/b7/f7/b7f7c3952d8b375ef9d35f1e945ba148.png 1
[18:09:57.711] Execution of """"
[18:09:57.711] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("1girl", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.711] Execution of """"
[18:09:57.711] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("arm_up", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.711] Execution of """"
[18:09:57.711] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("ass", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.711] Execution of """"
[18:09:57.711] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("black_hair", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.711] Execution of """"
[18:09:57.711] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("boots", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.711] Execution of """"
[18:09:57.711] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("breasts", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.711] Execution of """"
[18:09:57.711] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("cleavage", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.711] Execution of """"
[18:09:57.711] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("destruction", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.711] Execution of """"
[18:09:57.711] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("gradient", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.711] Execution of """"
[18:09:57.711] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("gradient_background", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.711] Execution of """"
[18:09:57.711] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("guweiz", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.711] Execution of """"
[18:09:57.711] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("horns", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.711] Execution of """"
[18:09:57.711] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("kill_la_kill", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.711] Execution of """"
[18:09:57.711] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("lens_flare", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.711] Execution of """"
[18:09:57.711] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("matoi_ryuuko", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.711] Execution of """"
[18:09:57.711] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("midriff", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.711] Execution of """"
[18:09:57.711] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("miniskirt", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.711] Execution of """"
[18:09:57.711] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("motion_blur", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.727] Execution of """"
[18:09:57.727] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("multicolored_hair", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.727] Execution of """"
[18:09:57.727] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("navel", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.727] Execution of """"
[18:09:57.727] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("revealing_clothes", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.727] Execution of """"
[18:09:57.727] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("scissor_blade", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.727] Execution of """"
[18:09:57.727] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("senketsu", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.727] Execution of """"
[18:09:57.727] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("short_hair", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.727] Execution of """"
[18:09:57.727] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("skirt", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.727] Execution of """"
[18:09:57.727] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("solo", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.727] Execution of """"
[18:09:57.727] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("stomach", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.727] Execution of """"
[18:09:57.727] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("sunlight", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.727] Execution of """"
[18:09:57.727] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("suspenders", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.727] Execution of """"
[18:09:57.727] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("sword", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.727] Execution of """"
[18:09:57.727] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("thigh_boots", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.727] Execution of """"
[18:09:57.727] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("thighhighs", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.727] Execution of """"
[18:09:57.727] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("two-tone_hair", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.727] Execution of """"
[18:09:57.727] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("underboob", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.727] Execution of """"
[18:09:57.727] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("upper_body", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.727] Execution of """"
[18:09:57.727] SQL execution of "INSERT INTO tag_index(tag, index_count) VALUES("weapon", 1) ON DUPLICATE KEY UPDATE index_count = index_count+1;"
[18:09:57.727] Execution of "C:\Windows\System32\cmd.exe /C copy "C:\00\b7f7c3952d8b375ef9d35f1e945ba148.png" "C:\w64\www\gelbooru\images\1\b7f7c3952d8b375ef9d35f1e945ba148.png""
[18:09:57.750] SQL execution of "INSERT INTO posts(creation_date, hash, image, height, width, ext, rating, tags, directory, active_date) VALUES(NOW(), "b7f7c3952d8b375ef9d35f1e945ba148", "b7f7c3952d8b375ef9d35f1e945ba148.png", 900, 900, ".png", "safe", " 1girl arm_up ass black_hair boots breasts cleavage destruction gradient gradient_background guweiz horns kill_la_kill lens_flare matoi_ryuuko midriff miniskirt motion_blur multicolored_hair navel revealing_clothes scissor_blade senketsu short_hair skirt solo stomach sunlight suspenders sword thigh_boots thighhighs two-tone_hair underboob upper_body weapon ", "1", "20110619");"
[18:09:57.753] Images download finished.
[18:10:04.508] SQL execution of "UPDATE post_count SET pcount = (SELECT COUNT(*) FROM posts), last_update = (CURDATE() + 0) WHERE access_key = "posts";"
[18:10:04.508] Batch download finished

Could you please investigate this?
What steps will reproduce the problem?

Configure Grabber, WampServer and Gelbooru the same way as described in the WIKI( https://github.com/Bionus/imgbrd-grabber/wiki/Gelbooru ) with the exception of this line in config.php:
$mysql_user = "root";
It is not mentioned in the original manual, though without this change Gelbooru can't create new database or access an existing one.
Download a batch of images.

What is the expected behavior? What do you get instead?
According to the WIKI every time I download a pack of images, they will be added to local version of Gelbooru running on the WampServer, but Grabber only copies images to the image directory in Gelbooru folder without adding any records to the database.
What version of the program are you using? On what operating system?
Guest OS running on VMware
Windows 8.1(9600) x64
Grabber 4.6.0
WampServer 2.2e x64 (https://sourceforge.net/projects/wampserver/files/WampServer 2/WampServer 2.2/wampserver2.2e/wampserver2.2e-php5.4.3-httpd-2.4.2_PATCH001-x64.exe/download)
Gelbooru 0.1.11
Host OS
Windows 7 SP1(7601) x64
Grabber 4.6.0
WampServer 3.0.4 x64 apache2.4.18 mysql5.7.11 php5.6.19 (https://sourceforge.net/projects/wampserver/files/WampServer 3/WampServer 3.0.0/wampserver3.0.4_x64_apache2.4.18_mysql5.7.11_php5.6.19-7.0.4.exe/download)
Gelbooru 0.1.11

While this doesn't help with your Gelbooru issue, just a suggestion for someone who's tried the Gelbooru route. Gelbooru's source is old and they haven't made a new source release in quite a while.
If you do not already have images added to gelbooru consider setting up https://github.com/moebooru/moebooru instead.
You can then use curl -F "login=username" -F "password_hash=passwordhash" -F "post[tags]=%allo%" -F "post[file]=@%path%" -F "post[rating]=%rating%" localhost:8080/post/create as your image command to add the images through the API. This generates thumbnails properly and correctly adds tags to each image. Since you're running windows you'll likely also need to get curl for windows, but that shouldn't be too difficult.

This works fine with the tutorials in the wiki: https://github.com/zixaphir/gelbooru-fork

@barryanders

This works fine with the tutorials in the wiki: https://github.com/zixaphir/gelbooru-fork, although I execute the SQL manually.

Frankly speaking, I wasn't able to find any tutorial by following the link above, except maybe a small readme file in the "install" folder. None the less, I tried gelbooru-fork, the gelbooru itself works fine, but it is still impossible to add data to MySQL database using Grabber. Thanks anyway.
@Flat

You can then use curl -F "login=username" -F "password_hash=passwordhash" -F "post[tags]=%allo%" -F "post[file]=@%path%" -F "post[rating]=%rating%" localhost:8080/post/create as your image command to add the images through the API. This generates thumbnails properly and correctly adds tags to each image. Since you're running windows you'll likely also need to get curl for windows, but that shouldn't be too difficult.

Thanks for the suggestion. Could you explain to me in more detail where does this command get tags and file paths?

The command is run through Grabber as seen here

The variables in brackets are replaced by grabber before the command is run. Curl then makes an http post request to the API of moebooru where it uploads the image along with all tags. I have Grabber set to download all images to /tmp/ which in linux is just RAM (so I don't have duplicates of every photo) the downside to this is you can't check for existing images after a reboot.

Sorry for #577, I totally missed it.
The only possible cause for the Error while initializing commands is failing to open the connection to the database with the credentials provided in Grabber's settings. Either they are incorrect, or the MySQL server is not accessible (if it's a vanilla WampServer installation, it should be).

with the exception of this line in config.php: $mysql_user = "root"; It is not mentioned in the original manual, though without this change Gelbooru can't create new database or access an existing one

It used to be in the default config file, I'll update the wiki accordingly.
But from the fact you created issue #601, it seems you went with Flat's suggestion and started using moebooru. As it seems very easy to setup (more than Gelbooru), I'll add a wiki page for it too.

@Flat
Again thanks for the idea and clarification, I wasn't aware of some Grabber variables, before you pointed them out.  I think I will stick with the method that you provided above, though at the moment it doesn't work on Windows( #601 )
@Bionus

The only possible cause for the Error while initializing commands is failing to open the connection to the database with the credentials provided in Grabber's settings. Either they are incorrect, or the MySQL server is not accessible (if it's a vanilla WampServer installation, it should be).

I verified credentials, and it seems that they are correct just as MySQL is accessible.(screenshots below) Could you check the setup from wiki on your PC on Windows?

It used to be in the default config file, I'll update the wiki accordingly.

There are more lines that I corrected in order to make gelbooru work as it should, but I forgot to write all of them here. Sorry.
$site_url = "http://localhost/gelbooru/";
$thumbnail_url = "http://localhost/gelbooru/thumbnails/";
instead of
$site_url = "http://localhost/gelbooru";
$thumbnail_url = "http://gelbooru.com/thumbnails/";
Without this correction you'll get "The requested URL /gelbooruindex.php was not found on this server" error.

But from the fact you created issue #601, it seems you went with Flat's suggestion and started using moebooru. As it seems very easy to setup (more than Gelbooru), I'll add a wiki page for it too.

Actually, it's the opposite, it is much easier to deploy Gelbooru than Moebooru, at least for me. The main reason is Ruby and the way it works on Windows. I encountered numerous errors during Moebooru installation. "Bundle install" failed due to SSL error so I had to download appropriate SSL cert file and add it to environment variables, ExecJS returned weird errors so I had to install Node.js in order to change the runtime that ExecJS  uses, "bundle exec rake db:create" and several other commands failed so I had to edit "Gemfile" and cherry-pick suitable version of Ruby, repeating "uninstall->install->check if everything works" cycle several times. Eventually, I got fed up with Ruby and installed Moebooru port to PHP called Myimouto, and it works like a charm. Appropriate cURL command that is needed to upload images to Myimouto can be found in #601 .

I verified credentials, and it seems that they are correct just as MySQL is accessible.(screenshots below) Could you check the setup from wiki on your PC on Windows?

As I can see in your screenshots, it seems you added superflous quotes in your settings. Instead of "localhost", use only localhost, same goes for other fields. Double quotes are not supposed to be put in the settings (same goes for your empty "" start command that should be totally empty).
Remove these quotes and it should work.

There are more lines that I corrected in order to make gelbooru work as it should, but I forgot to write all of them here. Sorry.

No problem, I'll update the wiki and try to set a Gelbooru up on my computer from scratch soon.

Actually, it's the opposite, it is much easier to deploy Gelbooru than Moebooru, at least for me. The main reason is Ruby and the way it works on Windows.

Indeed, if it's Ruby it's much harder on Windows than Linux.

Eventually, I got fed up with Ruby and installed Moebooru port to PHP called Myimouto, and it works like a charm. Appropriate cURL command that is needed to upload images to Myimouto can be found in #601 .

In that case I'll add a MyImouto tutorial instead, if Gelbooru is being too old. As for #601, it'll be fixed in the next 4.7.0 update I'm working on now. It should be released soon (supposedly by the end of the week).

@Bionus

As I can see in your screenshots, it seems you added superflous quotes in your settings. Instead of "localhost", use only localhost, same goes for other fields. Double quotes are not supposed to be put in the settings (same goes for your empty "" start command that should be totally empty).

Sorry I screwed up so badly. :pensive: And I seriously thought that quotation marks are necessary. Again I'm really sorry for wasting your time.

In that case I'll add a MyImouto tutorial instead, if Gelbooru is being too old. As for #601, it'll be fixed in the next 4.7.0 update I'm working on now. It should be released soon (supposedly by the end of the week).

That is great! Thanks a lot.

Ah, I just realized this was for Windows. I'm sorry, if I had realized that, I could have confirmed that the SQL definitely works directly. Now on Mac, I haven't gotten it to work properly, but I also haven't tried recently. That's why when I answered above, I said I execute the SQL manually. Anyway, glad to see you got your problem solved.

I added the MyImouto wiki page and updated the Gelbooru page. Note that this new page uses some new features (4.7.0) so you can't use the command written there yet.


Swiper disappear on IE11

This is a (multiple allowed):

[x] bug

[ ] enhancement

[ ] feature-discussion (RFC)

Swiper Version: 3.4.2

Windows 10 and IE11.

What you did
Using simple Swiper for horizontal image gallery.
Expected Behavior
swiping horizontally on all browsers
Actual Behavior
swiping horizontally on all browsers but IE11
Is there any issue for SWIPER with Internet Explorer 11.
It does work on all browsers, even on Edge, but not in IE11, the swiper container just disappear.
Any ideas on that?
Thanks!

Do you have any errors?


Universal Analytics will no longer process new data in standard properties beginning 1 July 2023

I rely on this module for many Google Analytic events and data, Google have reecently announced that the existing universal analytics property will be removed from July 1st 2023:

Universal Analytics will no longer process new data in standard properties beginning 1 July 2023. Prepare now by setting up and switching over to a Google Analytics 4 property.

See here for more info!
Can this module easily be migrated and when will work start on this?

I think this module is the primary go-to package for people who want to use "google analytics" on nuxtjs, it`d be very beneficial to support GA4 before 1 july of 2023.

I've temporarily switched to the vue-gtag library but I'd love to keep most of my dependencies part of the official Nuxt community

Duplicate of #122

Thanks for raising this. GA no longer creates new UA properties so people are now forced to create GA4. Will be using vue-gtag for now but loved the simplicity of this module and will switch back if updated.


kubelet using outdated bearer tokens

There are different connection options:

one method through the local kubelet leverages NewBearerAuthRoundTripper, but there is also available NewBearerAuthWithRefreshRoundTripper. Is this the intended behaviour? how can we easily verify it?
for example the second method going through the apiProxy uses rest.TransportFor(dp.inClusterConfig), that uses transport.New(cfg) -> transport.HTTPWrappersForConfig(cfg, rt)  and then possibly NewBearerAuthWithRefreshRoundTripper

BoundServiceAccountTokenVolume: Migrate ServiceAccount volumes to use a projected volume consisting of a ServiceAccountTokenVolumeProjection.
Cluster admins can use metric serviceaccount_stale_tokens_total to monitor workloads that are depending on the extended tokens. If there are no such workloads, turn off extended tokens by starting kube-apiserver with flag --service-account-extend-token-expiration=false.
Check Bound Service Account Tokens for more details.

Trying to reproduce it using:
$ curl -X GET https://<IP_ADDRESS>:8443/metrics --header "Authorization: Bearer $TOKEN" --insecure | less

after starting minikube with:
minikube start --extra-config=apiserver.service-account-extend-token-expiration=false

More context https://github.com/kubernetes/enhancements/blob/master/keps/sig-auth/1205-bound-service-account-tokens/README.md
Similar issue https://github.com/kubernetes/kubernetes/pull/77897/files

nri-prometheus is reading it from the file when attaching it, therefore it should not be affected
ksm is not using the tokent
controlplane is affected as well
nri-metadata-injection the same
nri-kube-events is not using the token directly


Add pip_python_version param to problem config

Valid versions: ["2", "3", "3.6"] default "3"
Add pip_python_version as example to ecb1

Addresses #108

Looks like a good change.


Installation Error

Hello,
Looks like all your module can't be installed with the message "Did not provide a valid manifest file."

Same issue

Trying to install using the manifest url in the releases returns a Bad Gateway error.

Sorry everyone. I'm using a proxy for the download links so it is easier to have a "static" location where updates are delivered. I went to bed thinking all was well, but clearly it had a problem 🤦♂It's back up now 👍


Sticky component not sticky

Hey there.
Maybe I'm doing something wrong, I'm not entirely sure, but it seems that, after following your basic demo code, I ain't able to create a navigation bar that sticks to the left side of my page.
This is the page as it is now (without the sticky component):

If I start scrolling down, it won't follow the viewport, of course.
However, I tried installing and recreating your example, with little to no successful results.
Instead of having my MenuButtons, MenuTrees and MenuItems directly on the return part of the render() method, I created a const that has essentially the same content (sorry for the verbose response):
const navbar = (
                 <StickyContainer style={{ zIndex: 2 }}>                     <Sticky>                         {({ isSticky, wasSticky, style, distanceFromTop, distanceFromBottom, calculatedHeight }) => {                             return (
                                     <MenuButton path='/profile' label='Profile' icon='user-secret' />                                     <MenuTree path='/dashboards' label='Dashboards' icon='tachometer' level='second'>                                         <MenuTree path='/dashboards' label='Central Refrigeração' level='third' >                                             <MenuItem path='/dashboards/centralRefrig/synotic' label='Synotic' />                                             <MenuItem path='/dashboards/centralRefrig/charts' label='Charts' />                                             <MenuItem path='/dashboards/centralRefrig/parameters' label='Parameters' />                                         </MenuTree>                                     </MenuTree>                                     <MenuTree path='/alarms' label='Alarmistic' icon='exclamation-triangle' level='second' >                                         <MenuItem path='/alarms' label='Alarms' />                                         <MenuItem path='/alarmsHistory' label='Alarms History' />                                         <MenuItem path='/alarmManager' label='Alarm Manager' />                                     </MenuTree>                                     <MenuTree path='/checkLists' label='Check Lists' icon='check-circle' level='second' >                                         <MenuItem path='/checkLists' label='Check List' />                                         <MenuItem path='/checkListHistory' label='Check List History' />                                         <MenuItem path='/checkListManager' label='Check List Manager' />                                     </MenuTree>                                     <MenuTree path='/userManager' label='User Manager' icon='users' level='second'>                                         <MenuTree path='/preferences' label="User Preferences" icon='cogs' level='third'>                                             <MenuItem path='/severities' label='Severities' />                                         </MenuTree>                                     </MenuTree>                                     <MenuTree path='/task' label='Task Manager' icon='tasks' level='second'>                                         <MenuItem path='/createTask' label='Create Task' />                                         <MenuItem path='/myTasks' label='My Tasks' />                                         <MenuItem path='/tasksHistory' label='Tasks History' />                                     </MenuTree>                                     <MenuTree path='/plant' label='Plant Manager' icon='cog' level='second'>                                         <MenuItem path='/profile' label='Profile' />                                         <MenuItem path='/profileEditor' label='Editor' />                                         <MenuItem path='/team' label='Team' />                                     </MenuTree>
                             )                         }}                     </Sticky>                 </StickyContainer>
         )
Then, I simply reference this const on the return part, and wait for the results. They are as follows:

Even worse, the navbar isn't sticky...
Do you have any idea why this happens?
Thanks,
Gil

I took the liberty of reformatting your code so that it's a bit more parseable.
const navbar =

  <StickyContainer style={{ zIndex: 2 }}>
    <Sticky> {({ isSticky, wasSticky, style, distanceFromTop, distanceFromBottom, calculatedHeight }) => {
      return (

          <MenuButton path='/profile' label='Profile' icon='user-secret' />
          <MenuTree path='/dashboards' label='Dashboards' icon='tachometer' level='second'>
            <MenuTree path='/dashboards' label='Central Refrigeração' level='third' >
              <MenuItem path='/dashboards/centralRefrig/synotic' label='Synotic' />
              <MenuItem path='/dashboards/centralRefrig/charts' label='Charts' />
              <MenuItem path='/dashboards/centralRefrig/parameters' label='Parameters' />
            </MenuTree>
          </MenuTree>
          <MenuTree path='/alarms' label='Alarmistic' icon='exclamation-triangle' level='second' >
            <MenuItem path='/alarms' label='Alarms' /> <MenuItem path='/alarmsHistory' label='Alarms History' />
            <MenuItem path='/alarmManager' label='Alarm Manager' />
          </MenuTree>
          <MenuTree path='/checkLists' label='Check Lists' icon='check-circle' level='second' >
            <MenuItem path='/checkLists' label='Check List' />
            <MenuItem path='/checkListHistory' label='Check List History' />
            <MenuItem path='/checkListManager' label='Check List Manager' />
          </MenuTree>
          <MenuTree path='/userManager' label='User Manager' icon='users' level='second'>
            <MenuTree path='/preferences' label="User Preferences" icon='cogs' level='third'>
              <MenuItem path='/severities' label='Severities' />
            </MenuTree>
          </MenuTree>
          <MenuTree path='/task' label='Task Manager' icon='tasks' level='second'>
            <MenuItem path='/createTask' label='Create Task' />
            <MenuItem path='/myTasks' label='My Tasks' />
            <MenuItem path='/tasksHistory' label='Tasks History' />
          </MenuTree>
          <MenuTree path='/plant' label='Plant Manager' icon='cog' level='second'>
            <MenuItem path='/profile' label='Profile' />
            <MenuItem path='/profileEditor' label='Editor' />
            <MenuItem path='/team' label='Team' />
          </MenuTree>

)
    }}
    </Sticky>
  </StickyContainer>

@gilnetoglartek I'm having a bit of trouble understanding the expected behavior.
It would also be really helpful if you put this code in a codepen or a JSFiddle so I could tweak it.
I'll also share a basic example of how I think this should work. I hope it at least guides you in the right direction.
<StickyContainer>
  <Sticky>
    {({ style }) => {
      return (
        <Navigation />
      );
    }}
  </Sticky>
</StickyContainer>

Hey @gilnetoglartek I don't see the style value that's coming in as an argument being applied anywhere in the DOM being returned. Does it work if you add it to the div wrapping your menu items?

Hi everyone,
Thanks for your answers.
@maecapozzi I've edited my code as to have a  component being called from the Sticky context, as you shown. I've also corrected this to pass on the style parameter, as it wasn't, and as was referred by @vcarl . As such, This is the Sticky part of the code:
`class Navbar extends PureComponent {
render() {
    const user = this.props.userProfile || null
    return (
        <StickyContainer style={{ zIndex: 0 }}>
            <Sticky>
                {({ isSticky, wasSticky, style, distanceFromTop, distanceFromBottom, calculatedHeight }) => {
                    console.log({ isSticky, wasSticky, style, distanceFromTop, distanceFromBottom, calculatedHeight })
                    return <Navigation user={user} style={style} />
                }}
            </Sticky>
        </StickyContainer>
    )
}

}`
Unfortunately, this wasn't enough to get this working, but at least the navigation bar is being rendered correctly (so the second screenshot I sent earlier doesn't apply anymore).
Now, the only thing that happens is that the navigation bar isn't sticky. Simple as that.
What I'm seeing is that I have a content pretty similar to the one posted on the 'Basic' example (here) in regard to the Sticky part. The main difference is that, for some reason, the 'isSticky' flag is never changing to true after scrolling, which happens in the mentioned example.
I've even tried removing all the className references to inner elements, as to eliminate any change these might do to the Sticky component, but to no avail.
What am I doing wrong? How can I help you to further analyze this?
You can access the application through this endpoint: http://frontend.glarconnect.com
If you login with test/test, and scroll down, you'll see the navbar doesn't follow. For the time being, I've deployed a version where you can see all the flags being passed through the Sticky component on the console log.
Thanks,
Gil

The login doesn't work for me, it redirects me to login. The StickyContainer must be taller that the element that it contains, and divs between the Sticky and StickyContainer can cause issues with the styles applying correctly.
I don't think this is a bug in the library, and I don't have a lot of extra time to help you debug each step of implementation. I'm going to close this out, if you can get a reproduction that I can access, feel free to ping me (vcarl) in Reactiflux's #need-help channel! Chat is a better medium than issues for detailed help.


connected, no internet access

Hi,
In my testing, I tried to flash with the 2 bin files and also 3 bin files. and I did configuration on <IP_ADDRESS>, but saw the message  "connected (no internet access) on my mobile.
after connect to the MyAP, I can not access web site on internet. Do I have to do other configuration on STA router or mobile?  Thanks!
-Wei

For first config, this is fine. Now you have to configure the AP you want to connect to. See also: https://github.com/martin-ger/esp_wifi_repeater#first-boot

Thanks Martin! It works now, my mistake


updated soundflower (2.0b2)

Changes to a cask
Editing an existing cask

[x] Commit message includes cask’s name (and new version, if applicable).
[x] brew cask audit --download {{cask_file}} is error-free.
[x] brew cask style --fix {{cask_file}} left no offenses.

Merged as cf0d4f56b11f8b77b519e18c78e67d8a4609681c.


feat(platform)!: withdrawal automatic retries after core rejection

Issue being fixed or feature implemented
This PR addresses the handling of expired and broadcasted withdrawal transactions, focusing on rebroadcasting expired transactions and managing broadcasted transactions.
What was done?
Introduced rebroadcast_expired_withdrawal_documents
Added operations for efficiently managing transaction state changes and moving transactions between queues (e.g., rebroadcast, queue for resigning, or deleting completed transactions).
How Has This Been Tested?
Added to strategy tests.
Breaking Changes
This is a breaking change that will be marked as active in v1.4
Checklist:

[x] I have performed a self-review of my own code
[x] I have commented my code, particularly in hard-to-understand areas
[x] I have added or updated relevant unit/integration/functional/e2e tests
[x] I have added "!" to the title and described breaking changes in the corresponding section if my code contains any
[x] I have made corresponding changes to the documentation if needed

For repository code-owners and collaborators only

[X] I have assigned this pull request to a milestone

Summary by CodeRabbit

New Features

Introduced new fields for managing withdrawal transactions, enhancing transaction handling and configuration limits.
Updated core expiration blocks to improve transaction management efficiency.

Bug Fixes

Improved logic for handling withdrawal statuses, including filtering chainlocked transactions.

Tests

Enhanced withdrawal transaction tests to verify state transitions and broadcasting of expired transactions.

Chores

Updated test setup functions to include optional parameters for better initial state configuration.

Going to merge this in, @shumkov please review when you can.


Feature Idea: Class as Default Export

If we choose to support exporting a class as the default export, we enable two major benefits for API writers:

Endpoints can maintain process-dependent state on the class instance instead of in module-level variables.
Developers can use decorators to easily augment their endpoints with a terse syntax.

Example syntax may look like this:

function basicAuth() { /* Basic HTTP Auth Impl Here */ }

export default class MyEndpoint {
  private state: any = {};

  // Anyone may GET a process dependent key value pair.
  GET(req, res){
    return { status: 'success', data: this.state[req.params.key] };
  }

  // Only authenticated users may set values.
  @basicAuth POST(req, res){
    this.state[req.data.key] = req.data.value;
    return { status: 'success' };
  }

}

By reserving default exports for API endpoint class constructors, and since there is no great way to detect the difference between a function and a class definition, this would require all default exports to be interpreted as a class constructor, breaking the current behavior of treading default exports as a GET function. I'm personally okay with that and like this API better.

Implemented, tested, used in a product with real basic HTTP auth implemented, liked it a lot, and released in 0.0.7 🙂


Thai translation update

Please make sure these boxes are checked before submitting your PR, thank you!

[x] Make sure you follow Element's contributing guide (中文 | English | Español | Français).
[x] Make sure you are merging your commits to dev branch.
[x] Add some descriptions and refer relative issues for you PR.

Update Thai language the translation of the i18n

Could you please fix the conflict?


Adding batch actions on a Model Edit form?

I've gone through quite a bit of search in length for implementing batch actions (in my case adding many-to-many relationships) to be embedded in Model's Edit form.
I am aware of the Customizing Batch Actions on a Model List view but is there a quick way to do this in the model's Edit form view? If not, can someone provide some insights as to how to do it canonically? Thanks.

No, there's no simple way.
If I'm understanding correctly, then you're trying to do batch actions on the related models. One workaround may be to rather add a link to a filtered list-view showing only those records. And then handle the batch actions in that filtered list view.
Please let us know if you came up with an solution.


Specified version of python-py because of a bug in ansible docker module

Because of a bug: https://github.com/ansible/ansible/issues/17495

Hi, yes it's totally make sense. Updated.

Merged! Thanks @arkadius.


Clarify UPSERT vs INSERT ON CONFLICT performance

The first sentence appears to contradict info in the following section. They both accomplish the same thing in declarative terms, but they can have quite different performance.

This change is

Online preview: http://cockroach-docs-review.s3-website-us-east-1.amazonaws.com/e9a89c68c365e8508673582478d137ed17976297/
Edited pages:

v2.1/upsert.md


Not-a-numbers do not always follow IEEE semantics

$ ../bin/nit -e '
> print(0.0/0.0 != 0.0/0.0)
> var x = 0.0/0.0
> print(x.is_nan)
> print(x != x)
> print(x != x * 1.0)'
true
true
false
true

Yeah, there is a choice to make here. Either Object::== is the opposite of Object::!= and does not contradict Object::is_same_instance, that are some strong laws needed by a lot of data-structures and algorithms, either we follow the crappy IEEE semantic on NaN.
By the way, other OO language seems have such a hard time. Even Java https://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#equals(java.lang.Object)
Nevertheless, consistency need to be achieved in Nit. The underlying problem here seems that == and != are implemented by something like: compare the instance boxe addresses, if different do a == in C.


Any ability to move objects from one helm release to another

Output of helm version: na
Output of kubectl version: na
Cloud Provider/Platform (AKS, GKE, Minikube etc.): na
Hi, I have come across a number of occasions where I have some large parent helm charts, that contain many dependencies, but for various reasons, have had the need to move a child chart from one of those parent charts to another one, and without actually losing any data.
I had thought it might be possible to 'move' a child service from one helm release to another, without removing its pods/pvcs etc, so that data is not lost and traffic is not impacted. However I cannot find a straight forward way to do this. Would it be a feature request to support 'moving' services from one release to another?
One approach looked at was creating some sort of a script (or upgrade in changes) to annotate an existing releases objects with 'helm.sh/resource-policy: keep', upgrading that object out of the first release, and possibly try to use 'lookup' to bring the child back into the other/second release as part of an upgrade.
However this approach involves a lot of annotations and addition of 'lookup' in possibly many tens of files (to avoid the second helm releases upgrade from giving errors that some objects already exist). This is why I'm looking to see is there some other / more elegant approach to move a service from helm chart 1 / release 1, to helm chart 2 / release 2, without data loss or deletion of the running pods.
Many thanks for any ideas or inputs.

This appears to be a duplicate request for https://github.com/helm/helm/issues/2730. Can you confirm?

Thank you, you are correct, that's exactly it. I will follow that one. Thanks again.


action: release

What
Use GH actions for the releases when:

merge commits in the main branch
or tag creation starting with <major>.<minor>.<patch>

Tasks

[x] Publish to nuget
[x] Publish the releases

:green_heart: Build Succeeded

the below badges are clickable and redirect to their specific view in the CI or DOCS

Expand to view the summary

Build stats

Start Time: 2023-01-26T12:07:54.583+0000

Duration: 17 min 4 sec

Test stats :test_tube:

Test
Results

Failed
0

Passed
206

Skipped
2

Total
208

:robot: GitHub comments
Expand to view the GitHub comments

To re-run your PR in the CI, just comment with:

/test : Re-trigger the build.

run elasticsearch-ci/docs : Re-trigger the docs validation. (use unformatted text in the comment!)

| or tag creation starting with ..
Just double checking that this means we can publish 8.4.0-alpha1 just the same as always?

just the same as always?

'[0-9]+.[0-9]+.[0-9]+.*'  is the pattern I used so, it should support 8.4.0-alpha1 and 8.4.0 or 8.4.0-foo-bar
Previously it was a bit fine defined with tag pattern: '\\d+\\.\\d+\\.\\d+(-(alpha|beta|rc)\\d*)?', comparator: 'REGEXP'
If you prefer, I can use the previous defined pattern so, we ensure it provides the same experience

The only comment I have is it could be possible to combine these flows e.g:
https://github.com/elastic/elastic-ingest-dotnet/blob/main/.github/workflows/ci.yml
That way it's a tad easier to keep everything in sync and only one thing runs whether on a tag or not.

That way it's a tad easier to keep everything in sync and only one thing runs whether on a tag or not.

Let me propose a reusable action, so both workflows can benefit from that implementation and avoid the duplication

Wait a minutes, I misunderstood your question.
We are using a different approach, one workflow per event or so, such as releases, or PRs. This will help us to distinguish the access to secrets since they cannot be accessed by defaults on PRs.
By doing so, there might be duplications, but will also avoid the usage of if conditions.
If you prefer one workflow to rule everything, we can try, though, we internally discussed to sue the mentioned approach for the shake of simplicity even though it might produce duplicated code.
What do you prefer?

| If you prefer one workflow to rule everything, we can try, though, we internally discussed to sue the mentioned approach for the shake of simplicity even though it might produce duplicated code.
| What do you prefer?
Whatever has us fall in line with the rest of the repositories @elastic/ci-robots  help us automate! :cat:
I personally prefer one workflow so that I have more confidence whatever runs on tags/main integration branches is what was ran on PR's.

I personally prefer one workflow so that I have more confidence whatever runs on tags/main integration branches is what was ran on PR's.

https://github.com/elastic/ecs-dotnet/pull/238/commits/a484ada1d9456a3671a1f705fb12209e1424bcb6 was the change I made to have one workflow per release type, while it was originally one workflow for both releases main or tags releases.
@pazone and I discussed about the benefits and came up with havin several workflows with branches filter (on: push: branches: - ... ), but with simple actions. Rather than havin a single workflow and a powerful action handling all branches cases (like in the PR).
I'd somehow keep it as is if no strong opinion to merge both workflows as we are using the approach in other places.

| I'd somehow keep it as is if no strong opinion to merge both workflows as we are using the approach in other places.
:+1:  Consistency trumps this style discussion


Simulation for Momba

Added the Momba Simulator crate, that provides with simulation capabilities for some Markov Automata.

I just merged this PR manually due to the conflicts. Authorship seems to be correctly attributed by GitHub. Thanks again for working on this! 👍 Hope to see you again soon.


Chain.Continuation typo

Hi,
I just noticed, Chain.Continuation is misspelled as Chain.Continutation in the bot framework.
Regards,
Rohan

Thanks for reporting this! Added to our bug backlog, and assigned to the right person. Thank you!


Mobile browser do not support audio

PC browser is normal, but on mobile browser(Safari, Chrome) no sound

Audio on Safari (and Chrome iOS) needs to be "unlocked" by a user action. The VideoElement (created with the html

 tag) takes care of this. The bare JSMpeg.Player does not.
If you want to use the bare JSMpeg.Player, you have to call player.audioOut.unlock(callback) function yourself in an event handler for a user action. E.g.:
document.body.addEventListener('touchstart', function(){
	player.audioOut.unlock(function(){
		alert('unlocked!');
	});
});

I run testing but the browser on iOS can not unlock sound, can only unlock sound on PC and Android browser


QOL Feedback for v0.1.3

Hi, this is a general issue I'm compiling with a list of quality-of-life user feedback for Scorecard's initial release, v0.1.3. Feel free to add on issues to this list that are QOL-related, meant to make users more comfortable with using Scorecard and using it over Frontline. Scorecard is already much better compared to Frontline, but more QOL changes can reduce friction further.
Settings

[ ] Ability to change order of classes
[ ] Ability to show/hide classes (i.e. to hide semester-long classes that have not yet started and thus are "NG")
[ ] Spoiler mode enabled by default, confusing to users not aware of the setting (suggested by me and Max)

Grade viewer popup

[ ] Show course grades on left sidebar for each course
[ ] Add visual styling to make assignment list more readable (so students are able to easier see which grade is for which assignment)
[ ] Add ability to toggle between, or view a new column, with x/y grades (point values, e.g. 5.5/10) instead of % grades (I understand you can hover over to see point values, but this is less convenient for some courses that are structured differently)

Keyboard shortcuts (convenience and accessibility)

[ ] Up/down arrow (or tab?) to go between courses in grades popup
[ ] Ability to press enter when tabbing between courses on main page

You can already do ALT+up/down to go between courses, but we can add some text to show that


[IMPROVEMENT] Create a new setting so that Longhorn removes PDB for instance-manager-r that doesn't have any running instance inside it

Is your improvement request related to a feature? Please describe (👍 if you like this request)
Currently, the user can never finish draining a node if it contains a stopped replica of a volume and that replica is the only replica of the volume.
In some cases, that behavior is desired. For example, the user is trying to drain the node before replacing it. In this case, we block the drain to signal the user that it is not OK to remove that node since there will be data loss.
However, in some other cases, it is not desired. For example, the user is trying to drain a node and do an in-place node upgrade. In this case, we should not block the user's draining process because:

There is no harm to data integrity
There would be no data loss because the node is not going to be removed

Describe the solution you'd like
Create a new setting so that Longhorn removes PDB for instance-manager-r that doesn't have any running instance inside it
Describe alternatives you've considered
Manually evict the replica from the node before draining. This one is costly and not possible in a single-node cluster

@shuo-wu @derekbit @c3y1huang  any thoughts on this?
cc @longhorn/dev-control-plane

Does https://github.com/longhorn/longhorn/issues/2238 solve this issue?

Good point @c3y1huang , but I feel the case is a different purpose.
@PhanLe1010 provided is in-tact change but https://github.com/longhorn/longhorn/issues/2238 is for evicting replicas. These options probably are all helpful for users.

Good point @c3y1huang , but I feel the case is a different purpose.
@PhanLe1010 provided is in-tact no change (nothing to do) but #2238 is for evicting replicas. These options probably are all helpful for users.

I see. Doesn't set allow-node-drain-with-last-healthy-replica work for this case?

I see. How about set allow-node-drain-with-last-healthy-replica, does it work for the case of a single node cluster?

Good idea! However, I think this one is problematic in the following draining scenario:

Replica instance manager is evicted while the volume is running
The volume crash -> potential filesystem corruption
Workload pods are evicted

This new setting is actually for detached volume only, but allow-node-drain-with-last-healthy-replica does not matter if the volume is attached or detached, so it would cause the case @PhanLe1010 mentioned.

I am curious if it is necessary to have a new setting since there is already allow-node-drain-with-last-healthy-replica to unblock the node drain.
Without the new setting, user can do this:

Single node cluster.
Drain blocked by PDB.
User checks if all replicas are stopped.
Enable allow-node-drain-with-last-healthy-replica setting.
Drain node.
In-place upgrade.
Disable allow-node-drain-with-last-healthy-replica setting.

I am curious if it is necessary to have a new setting since there is already allow-node-drain-with-last-healthy-replica to unblock the node drain.
Without the new setting, user can do this:

Single node cluster.
Drain blocked by PDB.
User checks if all replicas are stopped.
Enable allow-node-drain-with-last-healthy-replica setting.
Drain node.
In-place upgrade.
Disable allow-node-drain-with-last-healthy-replica setting.

I see. Yeah, the approach works. However, it requires manual intervention in steps 3 and 4. This is inconvenient in a fully automated upgrade process like System Upgrade Controller

Removing from 1.3.3 first, because it seems to require some time.

memo from @PhanLe1010

Yes, it is correct. No protection is needed for stopped replica. User is allowed to drain the instance manager. (We are assuming that user doesn't remove the node after draining)

Besides in-place node drain, need to emphasize this setting is risky for node replacement because it will cause data loss like the Azure AKS upgrade.
cc @c3y1huang

Test Plan:
Perform the test plan again. And verify that:

With allow-node-drain-with-last-healthy-replica is false and node-drain-policy is block-if-contains-last-replica the test result is identical to the test plan
With allow-node-drain-with-last-healthy-replica is false and node-drain-policy is allow-if-replica-is-stopped the test 1.1 Single node cluster is drained successfully. Other test cases in that test plan should be successful too.
Additionally, try out with different combinations of allow-node-drain-with-last-healthy-replica and node-drain-policy setting and verify that the behavior make sense

After updating the doc, let's move this to ready-for-testing for QA testing.

@khushboo-rancher Please help verify this after @PhanLe1010 moves this to ready-for-testing. cc @yangchiu will be back on Wed.

As discussed with @innobead, @PhanLe1010 Can we make the default value for node-drain-policy adaptive based on the existing customer's allow-node-drain-with-last-healthy-replica setting?
Default value for node-drain-policy  can be as below

Fresh installation :
a.  node-drain-policy : block-if-contains-last-replica
Upgrade :
a.  allow-node-drain-with-last-healthy-replica: False -> node-drain-policy: block-if-contains-last-replica
b.  allow-node-drain-with-last-healthy-replica: True -> node-drain-policy: always-allow

There would be a problem in the 2nd case:

User install Longhorn v1.3.2 with allow-node-drain-with-last-healthy-replica set to true
User upgrade Longhorn to 1.3.3 with node-drain-policy withset to block-if-contains-last-replica. If we follow the 2nd point above we would overwrite the user setting.

IMO, no matter what we set, keeping 2 overlapping settings will introduce some confusion.

After discussing with @PhanLe1010 and @khushboo-rancher . Let's make a conclusion for this and this will apply for any deprecation case.

Keep node-drain-policy and allow-node-drain-with-last-healthy-replica together for 1.3.3 and 1.4.2, because we will not prefer removing an existing function from any patch release. However, need to emphasize the below items:

There is an overlapping between both. allow-node-drain-with-last-healthy-replica has been deprecated in 1.3.3 and 1.4.2, so encourage users to use node-drain-policy.
allow-node-drain-with-last-healthy-replica will be respected first for compatibility.

Any deprecated feature will be removed from the next feature release, so allow-node-drain-with-last-healthy-replica will be removed from 1.5.0.

@khushboo-rancher The state is pending in testing for a while. I believe we already finished the testing, right?

Oh, I missed it. We finished the testing on 1.4 and 1.3. I'll work on the validation.

I would like to test this once https://github.com/longhorn/longhorn/issues/5620 is delivered too because both impacts same area. Testing them separately is redundant effort. @innobead WDYT?

@khushboo-rancher sounds good to me.

Verified on master-head 20230523

longhorn master-head (d6b1739)
longhorn-manager master-head (565d335)

The test steps
https://github.com/longhorn/longhorn/issues/5549#issuecomment-1474476921
Result Passed

Scenario
allow-node-drain-with-last-healthy-replica
node-drain-policy
Outcome

1.1 Single node cluster
false
block-if-contains-last-replica
instance-manager-r is not evicted

false
allow-if-replica-is-stopped
node can be drained successfully

false
always-allow
node can be drained successfully

true
block-if-contains-last-replica
node can be drained successfully

1.2 Multi-node cluster
false
block-if-contains-last-replica
node can be drained successfully

false
allow-if-replica-is-stopped
node can be drained successfully

false
always-allow
node can be drained successfully

true
block-if-contains-last-replica
node can be drained successfully

2.1 Upgrade Kubernetes for k3s cluster with System Upgrade Controller
false
block-if-contains-last-replica
node can be drained and k8s upgraded successfully

false
allow-if-replica-is-stopped
node can be drained and k8s upgraded successfully

false
always-allow
node can be drained and k8s upgraded successfully

true
block-if-contains-last-replica
node can be drained and k8s upgraded successfully

3.1 Upgrade Kubernetes for imported k3s cluster in Rancher
false
block-if-contains-last-replica
node can be drained and k8s upgraded successfully

false
allow-if-replica-is-stopped
node can be drained and k8s upgraded successfully

false
always-allow
node can be drained and k8s upgraded successfully

true
block-if-contains-last-replica
node can be drained and k8s upgraded successfully

4.1 Upgrade Kubernetes for provisioned k3s cluster in Rancher
false
block-if-contains-last-replica
node can be drained and k8s upgraded successfully

false
allow-if-replica-is-stopped
node can be drained and k8s upgraded successfully

false
always-allow
node can be drained and k8s upgraded successfully

true
block-if-contains-last-replica
node can be drained and k8s upgraded successfully

Hi @PhanLe1010 :
I have reopened the ticket because @innobead  added the label require/manual-test-plan after you submitted https://github.com/longhorn/website/pull/677. Could you please add the manual test plan as requested?
cc @longhorn/qa

@longhorn/qa QA also can judge if this needs manual test plan or e2e cases instead. Just update the issue with the right labels. Thanks.

Manual test plan PR is created https://github.com/longhorn/longhorn-tests/pull/1395. Moving the ticket to ready for testing

Close the issue because the manual test plan PR, longhorn/longhorn-tests#1395, is ready.


SMPS: Add documentation describing Run* mode, and in examples folder

And a bugfix: In the case of the default mode, we should not modify CR3 at
all. Therefore the default mode should now work for dualcore parts with no
SMPS (if these even exist, I haven't checked).

bors r+

bors retry


Delay() in a lib code

@mrfaptastic, while working on esp32-hub75-testbed project I've hit this peace of code in the lib, just wanted to discuss it.
https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/blob/e12eaf15b5598703ff76ded68d5b575e64a7476a/ESP32-HUB75-MatrixPanel-I2S-DMA.h#L506-L507
So the issue is it conflicts with Async Webserver - any call that has a delay() crashes when processing async web requests.
A delay() in the user code is not so good but could be dialed with, a delay() in a lib is a real pain that you have no so many options to take.
I'm not quite sure why that loop is required there - have not tested double-buffered setups too much, so any hints would be much appreciated.
For sure I can work around it my code somehow, but wanted to discuss the ideas on how to get rid of it at all?

Hi @vortigont - Get rid of the delay. I can't remember why it's there. The while(!i2s_parallel_is_previous_buffer_free()); itself should do the job anyway.

yea, maybe you right - just kill it in place and deal with what comes next later :) OK, I will give it a try then

hi @vortigont maybe can try to reduce the esp wdt timings to minimum value so can make sure the free buffer without delay() will not trigger any wdt on large display. but the option is to increase the settings in esp rather than adding a delay. else is to disabled the task wdt temporarily

the issue is not with WD, buffer depletes pretty fast here. It's due to switch between SYS and CONT, async lib (as some others ISRs) does not like this. The best approach would be event driven programming, quite complex though.


Vendor Name
Vilros
Vendor Country
US
Vendor URL
https://vilros.com/
Product Links
https://rpilocator.com/?vendor=vilros
Additional information
https://github.com/nerves-metal-detector/nerves_metal_detector/blob/master/CONTRIBUTING.md#adding-new-vendors-and-products-from-rpilocator

Not on rpilocator anymore. Needs manual list of products. Doesn't seem to have any raspberry pis in their product list.


GH Actions: Remove continue-on-error cases

continue-on-error didn't yield the desired behavior of marking the job failed, but performing other runs - removing it.
The issue described here: #365

@danielSanchezQ seems that we have problems building nomos waku node on windows: https://github.com/logos-co/nomos-node/actions/runs/6047698116/job/16411636481?pr=367#step:5:1013
I can look into it, or we could skip waku for windows for now.

@danielSanchezQ seems that we have problems building nomos waku node on windows: https://github.com/logos-co/nomos-node/actions/runs/6047698116/job/16411636481?pr=367#step:5:1013
I can look into it, or we could skip waku for windows for now.

Probably is because we need to use the gnu toolchains in windows for waku. It do not work with msvc.

@bacv Ah, sorry. I missed the https://github.com/logos-co/nomos-node/pull/367/commits/25567017ef10e07db918b4da2bb8f5d2320fd809 which disables integration tests. Do we need to disable integration test to speed up CI jobs?


Unanticipated behavior for the element code when displayed inline

I have noticed an unanticipated behavior / display for the element code when displayed inline (print). I have tested it on a Mac OS High Sierra.
Firefox: 76.0.1 (64-bit)
Chrome: Version 80.0.3987.163 (Official Build) (64-bit)

@nalmeida I pushed an update that may resolve the issue - let me know if you still see this problem, thanks! I believe it was having the overflow defined and I'm guessing you're on a Windows machine which was trying to insert scrollbars.

The homepage looks fine:

But the documentation page still with the same issue:

Finally got another minute, so the styling one is now updated, too. Thanks!

Hey @5t3ph, everything looking fine now!
By the way, thanks for sharing this repo!
Closing the issue!

Excellent, I appreciate the notice and your follow-up! 🙌


Macro as a method of an object.

Versions:

ide-helper Version: 2.9.0
Laravel Version: 8.25.0
PHP Version: 7.4

Question:
I use macros as methods of an object, but in the file "_ide_helper.php" they are declared as static methods.
https://github.com/barryvdh/laravel-ide-helper/blob/b21324b20e24a3c36bedc184b4cf273bfa0a2d32/resources/views/helper.php#L33
In connection with the above, PhpStorm considers this to be an error and does not display these methods in the drop-down list (does not suggest for use).
How to deal with this?

Interesting, static methods are perfectly valid in object context too, so it shouldn't behave this way.

@mj4444ru Thank you!
Perfectly summed up very concisely!
Having the exact same issue. I've a number of macros for Builder and Response and they only appear in phpStorm autocomplete if I call them statically.
So for example. If I register this Macro in a service provider:
        Builder::macro('qwerty', function (string $header): string {
                return 'qwerty';
            });

Then in _ide_helper.php it only appears as a static method:
            /**
             * @see \App\Providers\AppServiceProvider::boot()
             * @param string $header
             * @return string
             * @static
             */
            public static function qwerty($header)
            {
                return \Illuminate\Database\Eloquent\Builder::qwerty($header);
            }

When I attempt to use it, the following works great if called statically:

But not so good if called from the object

Okay, I looked a bit into this:

PhpStorm will only static methods when called statically and dynamic methods when called dynamically
To my best knowledge there is no way to disambiguate between a static and a dynamic macro
It is still possible to display it in the autocomplete list by invoking completion (ctrl + space by default)
The only way to automatically have them both is to have two different file with both declaration as phpstorm wont handle two declarations in the same file.

This package adds this type of support https://github.com/KristofMorva/laravel-ide-macros#use-of-non-static-macros