Add kafka waiting resource

Hello,
I would like to introduce the capability of waiting on kafka resources.
Use case: when setting up kafka clusters, it's good to know when they are ready to serve requests.
Additionally, I've seen cases where systems expect certain topics to exist on connection time, so I've added the capacity to wait for certain topics to be configured.
I've selected https://github.com/segmentio/kafka-go as the library for kafka, but could've really been something else. This one just seemed ok for the job. It does however, require go 1.13+, so please let me know if that is unacceptable.
I've added the respective testing for Kafka, but I've marked the tests as skipped if they don't find a kafka instance available to run the tests. I have used a docker compose setup locally to do the testing, but wasn't sure if you'd like me to commit that in the repo as well. Please let me know and I can add it as well.

@AshrafAnsari Hey again!
I don't know if you get notified for new PRs, so pinging you directly 🙈

@fcristovao Hi! Sorry if things are taking too long. Unfortunately, I'm a bit swamped at the moment. I'll have a look at this asap. I'll see if someone else can help with the review in the meantime. But thanks a lot for your submissions. I think this might come in handy for us as well pretty soon, as we've also been talking about Kafka lately.

No worries at all!
I just didn't know if this was showing up anywhere (I'm used to having automatic assignees/reviewers showing in the PRs).
And thank you once again!

We are running 1.12.x on some our services still, and I know that there was a problem updating at least one of them recently (ABC).
So until that is resolved, I'm not sure we can drop Go 1.12 support, unfortunately.

@HaraldNordgren I'll check what I can do regarding Go 1.12. Theoretically, kafka-go was supposed to be 1.12+ according to their own docs, but maybe they're outdated.
I'm working on the other elements that have been raised.
The thing that I wasn't expecting is actually that kafka-go seems to hang whenever it connects to, for example, a http server, instead of throwing an error. Once I've fixed that problem, I'll update the PR.

@HaraldNordgren I've managed to make it compatible with go 1.12.x again, by downgrading the kafka-go version.
Since we use so little of it, it should be more than ok.
I had to force push because I realised that my commits were being done with the wrong e-mail. I've now fixed that.
Please let me know if anything else is necessary :)

Could I get a review again? :)

@AshrafAnsari Hello again :)
I wondered if I could get reviews again?

Hey again,
This PR has been opened for over 2 months now, and I no longer know what to do.
Am I to consider that await is abandoned by Betalo?

Hello.
Any updates on this?

Hello.
Any updates on this?

@fcristovao Hi! Very sorry that we've been taking forever to reply. But sadly however, you are right. This is no longer maintained due to changed priorities. I'm sorry to have to tell you this. So unfortunately, the only option right now is to fork this.

@fcristovao Hi! Very sorry that we've been taking forever to reply. But sadly however, you are right. This is no longer maintained due to changed priorities. I'm sorry to have to tell you this. So unfortunately, the only option right now is to fork this.

@AshrafAnsari Thank you! It's completely ok that you no longer support it :)
I'll fork it then :)
And happy new year!

@AshrafAnsari Thank you! It's completely ok that you no longer support it :)
I'll fork it then :)
And happy new year!


Feature/unified config

I think the SmptEncryption can be determined by the SmtpPort.

I like doing those kind of implied configurations. But the options class itself should be explicit properties. It's just the logic that populates those properties that would do smart things like infer an option based on something like the port number.


Add new ‘Git’ deck with questions / answers

Add a new deck titled “Git”, image and questions and answers related to good git workflow, including common best practices, commands, etc here
Potential resources list here: https://help.github.com/articles/git-and-github-learning-resources/
Please add an open source and optimized image under styles/images, also. Finally update the deck list at top of file and also readme.

@papistan I'd like to help!


help request: adding http_proxy env var for fluentbit

Describe the issue
Need to put in env var for http_proxy and no_proxy in fluentbit containers. how can this be done since operator kept overriding daemonset for fluentbit. thanks.
How did you install fluent operator?
helm chart
Additional context
No response

Does this variable help you? fluent-bit EnvVars


RNG-90: Improve the performance of nextInt(int) and nextLong(long).

This adds unsigned integer arithmetic requiring only a single int/long
primitive per sample.

Coverage decreased (-0.01%) to 98.476% when pulling 2263e362d33020060d9f7364dab5ad8a1064d5fb on aherbert:improvement-RNG-90 into 6b420fe431c9b9c799fb66f2e91ade8686df4024 on apache:master.

Coverage decreased (-0.01%) to 98.476% when pulling 2263e362d33020060d9f7364dab5ad8a1064d5fb on aherbert:improvement-RNG-90 into 6b420fe431c9b9c799fb66f2e91ade8686df4024 on apache:master.

This method is biased when the sample range is not a power of 2.


Optimize Loading Time of Video Embed on Homepage

Description
The video embedded on the homepage currently takes 10,230 ms to load, impacting the Largest Contentful Paint (LCP). To improve performance, it should be lazy-loaded to optimize initial page load times. Additionally, the background GIF image used in the <lite-youtube> element is 1,093.2 KiB, which is quite large and should be optimized.
https://github.com/FlowFuse/website/blob/b5279cadc11f67548ff153058efc9a909feac732/src/index.njk#L40
Epic/Story
No response
Have you provided an initial effort estimate for this issue?
I have provided an initial effort estimate

Hey @sumitshinde-84 I was just looking into this today. How about using https://github.com/paulirish/lite-youtube-embed instead? apparently it loads faster than lite-youtube
And this is also used in other pages:

Features
Cloud
Device management


Startobs

Initial stab at replacing page w/startobs.

When you drag the slider to a number and then release the mouse, the slider sometimes jumps a few "lines". This seems to happen when you slide somewhere, then use the scrollbar to move a fraction of a thumbnail, then slide again. It seems likely that the math used to go to a particular obs in the top left and the math used to figure out where the slider should be based on the top left don't quite agree.
Similarly, if you do a fractional thumbnail scroll, and then switch to the table view, the slider might move one line.
When you use the slider to go to the last observation line, that line is sometimes mostly off the top of the browser and you can only see the bottom tool row.
When you use the slider to go to the last observation, then use the slider to go back earlier somewhere, you only get a partial load of the data, even though there is more available to fill out the browser. This only seems to happen when you go to the last obs first.
As you scroll the table with the mouse wheel or up/down arrows, the slider doesn't move until a new page is prefetched. (It does move if you drag the scrollbar)
If you scroll in the table view and then return to the gallery, the gallery hasn't scrolled to the same location so now the slider and the top left thumbnail differ hugely.
Scrolling up in the gallery no longer prefetches the previous page.
Using the right or left arrows in the browse dialog no longer prefetches either forward or backward
Unrelated to these changes, but as you keep infinite scrolling, the browser memory footprint can get REALLY big. We need to delete obs that are far from where we're currently looking.
If you display the browse dialog and then use the slider, the browse dialog gets very confused because the data is no longer there.
When you click on the add/trashcan icon for a thumbnail in the cart, the screen can scroll slightly and place part of the bottom icons row off the bottom of the browser. You can't scroll down any further so it's now impossible to see the toolbar on those icons.
I think we need the slider on the cart page.
Clicking a sort pill on the cart page doesn't do anything at all.

In general the problem with the slider jumping seems to be related to whether the main gallery scrollbar is at the top of its travel or somewhere further down. As long as it's at the top, everything is fine. The further it moves down, the bigger the problem with the slider. I assume this means that the position of the scrollbar is being ignored in one of the computation directions to figure out the top left thumbnail.

Problem:
I don't understand this line:
            (startObs > lastObs + 1) || (startObs < firstObs - 1)) {

Why are you comparing to lastObs+1 and firstObs-1 using > and <? As written, if startObs == lastObs+1 (which I assume is past the end of the current data), then it won't trigger the reload. However, you luck out in this case because $(elem).length === 0 since the obs isn't in the DOM. After fixing the comparison, given that you're checking whether or not the element is in the DOM, what's the point of checking firstObs and lastObs anyway? That's just redundant. I'm not sure which one is more efficient, but it seems like you should check either $(elem).length or firstObs and lastObs, but not both. firstObs and lastObs are used later in this function, so you have to compute them anyway, so elem seems like the thing to get rid of to avoid an additional DOM lookup.

Problem:
There is one big bug here, though. We pass the reqno as:
let reqno = (opus.prefs.view === "browse" ? ++o_browse.lastLoadDataRequestNo : ++o_cart.lastLoadDataRequestNo);
but then we only compare:
if (data.reqno < o_browse.lastLoadDataRequestNo) {
so whenever you're looking at the cart, the reqno is going to be wrong, and depending on how much time you spent on the browse page vs. the cart page it will either work or not.

So here's the first problem with the jumping slider. When you slide to an obs that isn't cached, it clears the cache and starts completely over. But it leaves the vertical scrollbar where it was before. So first it loads the new data. Then it asks what is the obs at the top left corner? But this isn't the beginning of the data that was just loaded, because it is scrolled off the top of the screen. So it jumps the slider to whatever that obs happens to be, which is the obs we want plus the amount of vertical scroll. I think the easiest solution is to reset the vertical scrollbar to the top when you start over with a cleared cache. There's no reason to leave the scrollbar partially down the screen anyway. It's just confusing, and there actually isn't any data before what's displayed anyway. So here's the fix, in browse.js at line 1137:
```
if (!o_browse.galleryBegun) {
o_browse.initTable(data.columns);
$(${selector}).scrollTop(0); // THIS
$(${selector} .dataTable).scrollTop(0); // AND THIS
            if (!$(selector).data("infiniteScroll")) {

With this change the slider no longer jumps for me.

Aren't there two .gallery-contents DOM elements? This code (in setScrollbarOnSlide) doesn't distinguish them:
let galleryContainerTopPosition = $(".gallery-contents").offset().top;
let galleryScrollbarPosition = $(".gallery-contents").scrollTop();

OK there's still a second problem with the jumping slider. This one appears to be related to setScrollbarOnSlide. If you only move the slider a small amount at a time (like one or two rows), it works great. If you move the slider a lot, such that it runs out of cached data, you hit the code above, which now works great. But something happens in between - move the slider so it's near the end of the cached data (like if you have 72 obs prefetched in a 12x6 grid, slide to 72+1-12=61). Now it jumps again.
I feel like this second slider jump problem is related to infinite scroll. As you move the slider by more and more rows from firstObs, the vertical scrollbar moves further down the screen. But at some point, I think infinite scroll says "that's enough" and changes the size or position or something of the scrollbar so it's back higher on the screen. In other words infinite scroll doesn't let the scrollbar get too close to the bottom. I think what's probably happening is that setScrollbarOnSlide is moving the scrollbar far enough down that infinite scroll is deciding it doesn't like the new position and moves it again, changing the actual scroll position on the screen. (edited)
I'm really not sure how to fix this one.

When there are no items in the cart, the cart page displays two "Your Cart is Empty" messages.

Fixed: Checkbox in cart not working when hamburger add/remove is used.
Fixed: Shift+click on table row.
Fixed: Metadata Selector not saving changes.
Question: Why do we want to set the startobs to 1 when the user changes the columns? Can't we keep showing them the part of the gallery/table they were already looking at?
Bug: Right now it appears that when you go "up" it doesn't move smoothly, but instead moves you to the top of the new page, so there's a huge page-sized jump in what data you're looking at. The same thing happens even if you move the binoculars.


make jobFunc public

Since JobFunc is part of the function signature of public functions, it should also be public

bumping this, thanks


Tab redesign

Light mode

Dark mode

WDYT about hiding icons on smallest screens?

Good idea 👍  done.


error map .obj missing from scene resource map??

i dont get it do i need to load something eles other than requirements.txt?

Hello there, thanks for reporting this problem. In order to better diagnose what has happened here, could you tell us what version of Pycraft you are using, and also which platform (operating system) you are running Pycraft on.
Pycraft v9.5.6 changes the way files are handled in Pycraft and may fix the problem here, however we have not yet released that version of Pycraft here, and if the problem is still present in newer versions of Pycraft we will do our best to fix it!


Info windows on markers

As a developer I would like to be able to add a template for info windows for the markers on the map (https://developers.google.com/maps/documentation/javascript/examples/infowindow-simple).

Hi Jonas, thanks for taking the time to give us feedback.
Would you like to contribute to this project? This is only wrapping https://github.com/tomchentw/react-google-maps

duplicate of #3


Add munkm to group webpage

Summary of changes
This PR adds Madicken Munk to the current members in arfc.
Types of changes

[ ] Bug fix (non-breaking change which fixes an issue)
[x] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to change)
[x] I have read the CONTRIBUTING document.
[x] My code follows the code style of this project.
[ ] My change requires a change to the documentation.
[ ] I have updated the documentation accordingly.
[ ] I have added tests to cover my changes.
[ ] All new and existing tests passed.

Associated Issues and PRs

Issue: #226

Associated Developers

Dev: Any person should be able to review this!

Checklist for Reviewers
Reviewers should use this link to get to the
Review Checklist before they begin their review.

Ok, the strangest thing is now I'm seeing the error you and @yardasol brought up. Not in the branch where I made the PR, but in the branch from this PR. The quotes did fix it, but we'll wait for Olek to check the version on his end too. Other than that, LGTM!

The bug should show up on this PR! I branched off of source, not your PR that has the fix, so it isn't fixed here yet. If you try to build this including your fix it should work though.

Oh, ok! I'll merge this PR then. The rest of it looks good.


Issue with PHP 7.4.25 and media path, open_basedir

Winter CMS Build
1.1
PHP Version
7.4
Database engine
MySQL/MariaDB
Plugins installed
No response
Issue description
Error server side when opening a page that contains uploaded images.
open_basedir restriction in effect, file is not within the allowed path(s)
Steps to replicate

Upgrade or switch to PHP 7.4.25 from any other older PHP version
Open a page of a website tat contains images uploaded from backend

Workaround
Not yet... I must rollover and back to previous php version
Any further details?
No response

Unfortunately, that's a problem that you need to solve in your PHP config - that's not a Winter issue.

Check the open_basedir config in your new PHP version. Perhaps it has changed between versions.

Hi again,
the open_basedir didn't change beetween version, but to fix the issue I must change it, adding the path "/storage/app" at the open_basedir param in the php.ini on all the sites.
I noticed this happens where has been used the twig "| media" to get the src of an image for a img tag, source coming from the old wintercms version of these sites.
Does this means something to you?
thanks

@ivang76 are you using symlinks at all between the old October version of the site and the new Winter one you're working on?

@bennothommo probably yes, because the most of that sites are migrated from October... would it be a problem?
And how is that related to the php update too?

@ivang76 I'm not quite sure why the PHP update would present different behaviour, but I know that if you have open_basedir restrictions, then symlinks would never work if those symlinks go outside of the restricted directories.


Error: Bad request, message: Document is empty

deepl --auth-key <zip> document --to=DE John,Doe.pdf

deepl command above fails to translate a document, instead outputs the error:
Error: Bad request, message: Document is empty
My system is fedora linux and deepl version is deepl-python v1.17.0.

Hi, I assume bash is picking up John,Doe.pdf as 2 separate inputs, as the document subcommand requires 2 positional arguments, one for the input file and one for the output file. See the help output:
$ deepl document --help
usage: deepl document [-h] --to TARGET_LANG [--from SOURCE_LANG]
                      [--formality {less,default,more,prefer_more,prefer_less}]
                      [--glossary-id GLOSSARY] [--output-format OUTPUT_FORMAT]
                      file [file ...] dest

translate document(s)

positional arguments:
  file                  file(s) to be translated.
  dest                  destination directory to store translated files.

optional arguments:
  -h, --help            show this help message and exit
  --to TARGET_LANG, --target-lang TARGET_LANG
                        language into which the text should be translated
  --from SOURCE_LANG, --source-lang SOURCE_LANG
                        language of the text to be translated; unless using a
                        glossary, this argument is optional and if it is
                        omitted DeepL will auto-detect the source language.
  --formality {less,default,more,prefer_more,prefer_less}
                        desired formality for translation
  --glossary-id GLOSSARY
                        ID of glossary to use for translation
  --output-format OUTPUT_FORMAT
                        output file extension

The correct command would probably be deepl --auth-key <zip> document --to=DE "John,Doe.pdf" "John,Doe_TRANSLATED.pdf"

I misunderstood dest as the location of deepl's output. For some reason I thought deepl would name the translated file something like John,Doe_de.pdf. That's why I wrongly entered the current directory ..

Upon rereading, that is kind of what the help states (incorrectly). I will fix the wording here, thanks!

I just checked the code - the command I suggested works as well, but the intention is to provide a directory (as you can provide multiple documents as input), and it will create one file per input file with the same name in this directory (so, if the file is in the current directory, . as the output directory might lead to errors, as the paths will collide.


Non-serverSide filtering/searching re-renders whole MUIDatatable

Expected Behavior

When we upgraded our version from 2.0.0-beta.58 to 2.5.1 we found that changing state in the component re-rendered the whole table, but in the previous version it only seemed to re-render the TableBody. When we filter with serverSide: false we would like for only the TableBody to re-render and include filtered changes.
Note: We also have are using onTableChange and a customFooter in our options.
Current Behavior

Currently when we filter, whole table re-renders, check box column shows up on the left side of table, chips don't show on the top header, our customFooter doesn't not render correctly with totals, records don't filter.
Steps to Reproduce (for bugs)

You'll see that a lot of complexity below is us trying to calculate the Quantity Submitted based on the filtered results we get onTableChange. We were so excited to have this work in a previous version, so sad that it's no longer supported. It seems like 2.5.1 assumes you're using onTableChange for serverSide filtering. We tried using useRef hooks to stop rendering without success. My attempt at reproducing in sandbox but copy pasting below as well..
export const splitDateTime = results => {
  return results.map(currentValue => {
    return currentValue['Timestamp'] !== null && typeof currentValue['Timestamp'] !== 'undefined'
      ? Object.assign({}, currentValue, {
          Time: `${currentValue['Timestamp'].split(' ')[1]} ${
            currentValue['Timestamp'].split(' ')[2]
          }`,
          Timestamp: currentValue['Timestamp'].split(' ')[0],
        })
      : currentValue;
  });
};

export const unfilteredQuantitySubmitted = results => {
  if (results && results.length > 0) {
    let quantitySubmitted = results.map(record => stringToNumber(record['Quantity Submitted']));

    return quantitySubmitted.reduce((a, b) => a + b, 0);
  }
};

export const filteredQuantitySubmitted = state => {
  let columnNames = state.columns.map(column => column.name);
  let index = columnNames.indexOf('Quantity Submitted');
  let quantitySubmitted = state.displayData.map(record =>
    stringToNumber(record.data[index].props.value)
  );
  return quantitySubmitted.reduce((a, b) => a + b, 0);
};

const ProductionSubmissionsTable = props => {
  const { fetching, results } = props;

  const [quantitySubmitted, setQuantitySubmitted] = useState(0);

  useEffect(
    () => {
      setQuantitySubmitted(unfilteredQuantitySubmitted(results));
    },
    [results, setQuantitySubmitted]
  );

  if (fetching) {
    return <Loading type="linear" />;
  }

  if (results && results.length > 0) {
    const columns = columnOptions;
    const options = {
      filterType: 'dropdown',
      responsive: 'scroll',
      selectableRows: false,
      print: false,
      download: false,
      rowsPerPage: 100,
      serverSide: false,
      onTableChange: (action, state) => setQuantitySubmitted(filteredQuantitySubmitted(state)),
      customFooter: function footer(count, page, rowsPerPage, changeRowsPerPage, changePage) {
        return (
          <CustomFooter
            page={page}
            rowsPerPage={rowsPerPage}
            count={count}
            quantitySubmitted={quantitySubmitted}
            onChangePage={(_, newPage) => changePage(newPage)}
            onChangeRowsPerPage={event => changeRowsPerPage(event.target.value)}
            rowsPerPageOptions={[10, 15, 100]}
          />
        );
      },
    };

    return (
      <MuiThemeProvider theme={theme}>
        <MUIDataTable
          title="Production Submissions"
          data={splitDateTime(results)}
          columns={columns}
          options={options}
        />
      </MuiThemeProvider>
    );
  } else {
    return
Unable to render Ingredient Submissions Table
;
  }
};

and customfooter
const CustomFooter = ({
  page,
  rowsPerPage,
  count,
  quantitySubmitted,
  onChangePage,
  onChangeRowsPerPage,
  rowsPerPageOptions,
}) => {
  return (
    <MuiTableFooter>
      <MuiTableRow>
        <MuiTableCell>Quantity Submitted: {formatNumber(quantitySubmitted)}</MuiTableCell>
        <MuiTablePagination
          page={page}
          rowsPerPage={rowsPerPage}
          count={count}
          onChangePage={onChangePage}
          onChangeRowsPerPage={onChangeRowsPerPage}
          rowsPerPageOptions={rowsPerPageOptions}
        />
      </MuiTableRow>
    </MuiTableFooter>
  );
};

Your Environment

Tech
Version

Material-UI
^3.9.2

MUI-datatables
^2.5.1

React
^16.8.6

browser
chrome

etc
using onTableChange, serverSide:false, customFooter in table options

There's a lot going on here. Can you pare this down to a single specific issue? Also, I could not load the codesandbox example, as it appears to error-out immediately.
There's a lot that has changed between the beta and the most recent version. It's likely that you will need to modify your code if you want to take advantage of the latest versions.
I'm fairly certain onTableChange will still work for you, but you would likely have to modify it to maintain more of your state, as this is the direction the table is moving. We can't rely on internal derived state, unfortunately, as this means that no one can alter the data going in as props and benefit from react bindings. Additionally, you may want to reread the documentation, as there are a lot of features you might not be taking advantage of. For example, if you just need to make updates on filter change, then you've got a callback just for that: onFilterChange. No need to use the generic onTableChange in that case.


Minor - missing spelling dir in template, config file updates...

I used this as the template for v1 upgrade and removed all the duplicates from ybot. So far so good.
A few minor issues:

Missing spelling directory placeholder?
Perhaps move the bot section in config.yaml to the top so its easier to compare back to the others in y-bot.
I used $BOT_ROOT instead of ./ to refer to the "template" bot.
The ../program-y/... is relative to the starting directory when running python, not $BOT_ROOT. Perhaps reference in readme.txt if not using a "standard" structure.
Perhaps mention (if not already) that in the case of duplicate AIML statements, its the first statement that sticks. You may want to move the "template" AIML dir above the y-bot one if you want to "override" y-bot. I haven't got to test the same behavior for sets, maps etc...

I’ll review over next few days and see what I can add or enhance

I've intentionally left spelling out for now, and let users stick with the inbuilt one. Still have concerns about it, so until I have dealt with them, keeps its off the radar for all but power users
bot has now moved, I started doing that in a couple of other projects, just needed a reminder to push it through to template-y
All references to ./ have been replaced with $BOT_ROOT
Updated the root level README.txt to remind people of the relative path requirements
In terms of AIML, I am going to add something to the wiki about overrides, but a word of caution not to use it. You should try and stick with clear delineation of grammars from those provided by program-y and your own. Changes in either could have major impacts on the other


Issuing alias commands in shell doesn't work

For example I have several git command aliases that I can't use:
alias g="git status"
g% == no bueno. :'-(

yep, bash aliases don't work. You'll need to define functions
def g = %git 'status

=)


Profile Python Worker cold start

We need to breakdown the cold start numbers that the Python Worker is experiencing. Will need to include the following areas, among others potentially:

Host starting on Service Fabric Mesh
Worker process start up - including function loading
Latency from downloading and unzipping files

@maiqbal11 this issue may need to be broken down so we can better track the individual tasks.

Tracking latency related to zip files: https://github.com/Azure/azure-functions-python-worker/issues/360
Host startup and specialization: https://github.com/Azure/azure-functions-python-worker/issues/361

Closed #360 and #361 as we have high level profiles from our metrics tables. Keeping this issue open as low level profiling might be useful as well.

Closing as this is now done. Thanks @maiqbal11 !


What does Ruby/Fiber instrumentation helps with?

Description
We recently upgraded from 8.15.0 to 9.5.0 and we started to see Ruby/Fiber as the most consuming portion of transactions:

The purple instrumentation is the Ruby/Fiber.
Another user reported the same a while back and the recommendation was to disable the Fiber instrumentation: https://github.com/newrelic/newrelic-ruby-agent/issues/1913.
What we want to understand is how 84s was spent on Ruby/Fiber for a transaction that itself took only 3s.
Expected Behavior
A clear documentation of how to interpret that instrumentation.
It's not clear what it is trying to say to us and here I'm being optimistic that there's a real purpose/value for that instrumentation to be enabled by default.
Troubleshooting or NR Diag results
N/A
Steps to Reproduce
N/A
Your Environment
N/A
Additional context
N/A
For Maintainers Only or Hero Triaging this bug
Suggested Priority (P1,P2,P3,P4,P5):
Suggested T-Shirt size (S, M, L, XL, Unknown):

Hi @sobrinho,
Thanks very much for reaching out with this issue. I appreciate the questions you raise about the instrumentation's usefulness and your optimism about there being a reason for why this functionality was created!
The agent's Thread/Fiber instrumentation doesn't discriminate with any criteria for a newly spawned thread or fiber whose new call came from the same fiber as the existing transaction. As a result, for applications that only see new threads and fibers spawned during a transaction that are directly related to that transaction, the increased visibility into what is going on in the threads/fibers can be extremely helpful. Conversely, if the application spawns threads or fibers that are not particularly related to the transaction, the extra information can seem either confusing or downright useless.
For an application that uses threads for a synchronous / blocking request, it can be invaluable to a user to see what database and network calls were performed inside of threads for the duration of the synchronous call. For an application that uses threads to fire off asynchronous / non-blocking calls that do not need to complete before a response is issued, it can be confusing or frustrating to see thread activity associated with the same request.

What we want to understand is how 84s was spent on Ruby/Fiber for a transaction that itself took only 3s.

Without drilling into the exact transaction with the New Relic web UI, I can offer a hypothesis for what happened here.
A significant event such as a Ruby on Rails controller action being called took place and the agent took notice and started a new transaction. While the action was taking 3 seconds to complete, a Thread.new call was performed. The thread that resulted from the Thread.new call ended up living for 84 seconds. Clearly, because the action itself completed in 3 seconds, the result of the new thread's operation was not required for the completion of the action. From the perspective of looking at the New Relic web UI and seeing what looks like an indication that a transaction took 84 seconds while it really only took 3 seconds from the primary thread's perspective, I can absolutely see how that is confusing.
Another thing that happens with thread instrumentation that may not be happening here in your case is that multiple new threads will result in having their individual elapsed times summed. So if 5 threads are spawned that each take only 2 seconds to complete, New Relic will report that 10 seconds were spent on Ruby/Thread. This is true. 10 seconds were indeed spent in CPU time despite the fact that only 2 seconds elapsed from the wall clock's perpective. The existing New Relic web UI for Ruby transactions does not always do a great job in helping distinguish between cpu time and wall clock time, which can also be confusing.
Instrumentation for Thread and Fiber was enabled by default in version 9.0.0 of the agent and with the freshly released 9.6.0 version keeping it on by default still seems to make sense for the majority of customers. We are always evaluating what makes sense with defaults, and always welcome community feedback and suggestions.
In addition to considering whether the instrumentation should be enabled by default, we are also always looking for ways to improve the functionality itself. With #2300 we hope to produce some documentation that better conveys the value of the Thread/Fiber instrumentation. With #2301 we will be looking for ways to improve what gets captured and reported within threads and fibers. And with #2302 we'll explore an idea of continuing to report on everything happening in a new thread, but placing the new thread's activity in a separate transaction whose start time merely intersects with the start and finish time of the original thread.
If you can think of anything else that we could do to improve your experience with the agent, do please comment on those existing issues or create new ones. I am going to go ahead and close this issue and remove its "bug" label and allow the other issues to track our progress with the instrumentation. But do feel free to post additional comments or questions here.
Again, thanks for reaching out. Our team of Ruby devs is quite passionate about providing fellow Rubyists with the best possible experience.


usb drive not recognizable after etcher

formatted with another pc will use another program.

https://github.com/resin-io/etcher/blob/master/docs/USER-DOCUMENTATION.md#recovering-broken-drives


machine producing invalid csv files

heya, I noticed that some csv files contain rows of mixed column lengths.
eg. in this kz extract, the top 2 rows contain 11 columns, the rows below only have 7 columns.
in this case it looks like this is caused by newline character in the source data, this also confuses CSV parsers because the closing " is also missing.
grep '2 кв' /tmp/oa/kz/countrywide.csv
79.2156635,43.0174073,42 кв 2,Дархан көшесі,,,РАЙЫМБЕКСКИЙ РАЙОН,АЛМАТИНСКАЯ,,,c8d603a8717f2b5e
79.2157284,43.0174285,42 кв 1,Дархан көшесі,,,РАЙЫМБЕКСКИЙ РАЙОН,АЛМАТИНСКАЯ,,,d08c389d1349ca6d
82.0105535,46.7754409,д. 12 кв. 1,Джамбула,,,"МАКАНЧИНСКИЙ
82.0109022,46.7753645,д. 12 кв. 2,Джамбула,,,"МАКАНЧИНСКИЙ
82.0099453,46.7738161,д. 2 кв. 2,Джамбула,,,"МАКАНЧИНСКИЙ
82.011556,46.7936102,д. 22 кв. 2,Амангельды,,,"МАКАНЧИНСКИЙ

the issue doesn't only affect this file, it's a bit more widespread than this, unfortunately. I can probably enumerate a list for you if you'd like?
sounds like this might require a tooling update to ensure that the CSV files produced are valid (fixed column lengths, machine parsable, etc.)
let me know if you need more info :)

here's another example:
$ grep edbf41e3224c7286 /tmp/oa/us/ca/riverside.csv
 WAY",,CATHEDRAL CITY,,,92234,,edbf41e3224c7286

hmm... so looking at this again, it's probably the issue with my CSV parsing lib, I guess I can probably configure it to remove newlines inside quoted text.
this issue was more difficult to detect because I was using tools like sort and uniq which scrambled the lines.

FWIW, I think the kz/countrywide.csv file is correctly quoted with  newlines. When I look I see  output like
82.0105535,46.7754409,д. 12 кв. 1,Джамбула,,,"МАКАНЧИНСКИЙ
 (НАСЕЛЕННЫЙ ПУНКТ)",ВОСТОЧНО-КАЗАХСТАНСКАЯ,,,c77739bfa71a458a
82.0109022,46.7753645,д. 12 кв. 2,Джамбула,,,"МАКАНЧИНСКИЙ
 (НАСЕЛЕННЫЙ ПУНКТ)",ВОСТОЧНО-КАЗАХСТАНСКАЯ,,,2d5ad45aa8988b64
82.0099483,46.7741494,д. 4 кв. 1,Джамбула,,,"МАКАНЧИНСКИЙ
 (НАСЕЛЕННЫЙ ПУНКТ)",ВОСТОЧНО-КАЗАХСТАНСКАЯ,,,dbf7edf59192c797

This doesn't address your point about the CSV being awkward to use, but I think what we are publishing is well formed.


MetaDataLoader shuffle default to true

Hi --
I'm curious what you think about changing the default shuffle parameter in MetaDataLoader to true.
I ran
dataset     = omniglot("./data", meta_split='train', ways=20, shots=1, shuffle=True)
dataloader = BatchMetaDataLoader(dataset, batch_size=16, num_workers=4)

and was getting too-good results.  It took a bit of time to track down that BatchMetaDataLoader outputs classes in combinations(range(num_classes), num_shots) order, so the batches are super correlated w/ one another.  I can't really imagine a use-case where you'd want this ordering of your batches.  Thoughts?
Thanks!
~ Ben

I think that's very reasonable, I'm all for it, to avoid any confusion. The reason behind this default value was that PyTorch's DataLoader has a default value of shuffle=False. However while this might not be too much of a issue in standard learning, this definitely is in meta-learning (and especially the way the tasks are created). I will update the default value, thanks!


Salesforce Domain : Show Error :->

When i call this method from debug console its show Error which is :
Line: 146, Column: 1
System.DmlException: Insert failed. First exception on row 1; first error: OP_WITH_INVALID_USER_TYPE_EXCEPTION, Operation not valid for this user type: []
where i pass
GoogleDriveConfigure.configure('1111111-11111111.apps.googleusercontent.com', 'AAAXXXAAA1212-AAAAAA_1111', 'salesforce domain');
where salesforce domain which i try as follows:
https://ap2.salesforce.com/apex/connector
https://ap2.salesforce.com/
https://ap2.salesforce.com
https://www.salesforce.com/
https://login.salesforce.com/
And i also check user permission for all object but until get the same error
So plz help me where i wrong.
Thanks you.

Here i find the solution of Salesforce Domain but until get the same error

Hi s114sharma,
GoogleDriveConfigure attempts to create a connector for every user in the organisation which can then be activated from the Connectors tab.
It looks like one of the users in your organisation is of an unexpected type. I'd suggest amending the code on the following line:
https://github.com/financialforcedev/ffhttp-googledrive-samples/blob/master/src/classes/GoogleDriveConfigure.cls#L119
from:
List internalUsers = [SELECT id, Name FROM User WHERE IsActive=true];
to:
List internalUsers = [SELECT id, Name FROM User WHERE IsActive=true AND UserType='Standard'];
then try running the configure command again.
GoogleDriveConfigure.configure('1111111-11111111.apps.googleusercontent.com', 'AAAXXXAAA1212-AAAAAA_1111', );
If this works then let me know and I'll update the source code.
Many thanks

Hii mattwoodffdc,
Your solution is working. One more thing is about Google token.Is there is any function in your packages for AutoRefresh() of token.
Again many many thank to you and your team.

Glad the solution is working.
The ffhttp-core-samples has a method for auto refreshing the token. When
you call validateConnector() for a ConnectorService, the method checks
whether the access token has expired. If the connector has a refresh token
(which should always be the case for Google connectors) then the token is
automatically refreshed via the exchangeCode() call.
See:
https://github.com/financialforcedev/ffhttp-core-samples/blob/master/src/classes/ConnectorService.cls#L87
Cheers,
Matt
Matthew Wood
Software Developer
FinancialForce.com, Inc. http://www.financialforce.com/
M: +44 (0)7894566467 (UK)
E<EMAIL_ADDRESS>On 29 September 2015 at 02:56, s114sharma<EMAIL_ADDRESS>wrote:

Hii mattwoodffdc,
Your solution is working. One more thing is about Google token.Is there is
any function in your packages for AutoRefresh() of token.
Again many many thank to you and your team.
—
Reply to this email directly or view it on GitHub
https://github.com/financialforcedev/ffhttp-googledrive-samples/issues/1#issuecomment-143922833
.

Thanks Matthew Wood
your solution is working.

Hi @mattwoodffdc
I really admit that, this is a life saver:) thank your this. I have used this and looks very good to me. Only one thing is is there a way I can avoid the re authorization? Because I am getting this error after some time "The connector Google Drive API for Ajay Lankipalle needs to be reauthorized." may be like access token is getting expired.
Can you please advice me what to do?
@s114sharma , Hi Sharma, did you get solved the AuthoRefresh issue?
Regards,
Ajay


StyledInputField: combine hint + error

Current: the hint only appears if there is no error.

Expected: we should display both.

HI @Betree would like to take this isssue, i am not able to find the exact flow to find this file.  Is this to be done when submitting an expense?


Dockerfile: vernemq.sh not found

Hi, I am quite new to Docker. When I try to build the docker image with the dockerfile from the repository I get an error, because the two COPY lines fail. There is no file vernemq.sh. There is no one in the tar.gz package and if there was, the copy command is used before the file is extracted?
Maybe I just don't understand how the dockerfile works/ should work.
COPY --chown=10000:10000 bin/vernemq.sh /usr/sbin/start_vernemq
COPY --chown=10000:10000 files/vm.args /vernemq/etc/vm.args

RUN curl -L https://github.com/vernemq/vernemq/releases/download/$VERNEMQ_VERSION/vernemq-$VERNEMQ_VERSION.buster.tar.gz -o /tmp/vernemq-$VERNEMQ_VERSION.buster.tar.gz && \
...

Sorry, my fault. ./bin and ./files are from this repository - I just had to copy them into my docker build directory.


[FEATURE]: ColoDDPV2 supports _set_params_and_buffers_to_ignore_for_model

Describe the feature
Supports static method _set_params_and_buffers_to_ignore_for_model in ColoDDPV2.
ColoDDPV2 refers
https://github.com/pytorch/pytorch/blob/master/torch/nn/parallel/distributed.py#L1665
_set_params_and_buffers_to_ignore_for_model refers
https://github.com/hpcaitech/ColossalAI/blob/main/colossalai/nn/parallel/data_parallel.py#L93
When using hybrid Parallel, we would like to exclude some params in DP and apply our own parallel approach on them. I believe providing such a method is reasonable for that purpose.

What does this mean? I'm sure we don't need all-reduce/reduce grad in this case. But are these params/buffers replica? This determines whether ZeRO can be applied.


 Resources: 2 added, 0 changed, 0 destroyed.

Outputs:

account_id =<PHONE_NUMBER>36
aws_partition = aws
aws_region = us-east-1
resource_aka = arn:aws:sagemaker:us-east-1:986325076436:notebook-instance/turbottest83303
resource_id = turbottest83303
resource_name = turbottest83303

Running SQL query: test-get-query.sql
[
  {
    "account_id": "986325076436",
    "arn": "arn:aws:sagemaker:us-east-1:986325076436:notebook-instance/turbottest83303",
    "name": "turbottest83303",
    "partition": "aws",
    "region": "us-east-1",
    "tags": {
      "name": "turbottest83303"
    }
  }
]
✔ PASSED

Running SQL query: test-hydrate-query.sql
[
  {
    "akas": [
      "arn:aws:sagemaker:us-east-1:986325076436:notebook-instance/turbottest83303"
    ],
    "name": "turbottest83303",
    "tags": {
      "name": "turbottest83303"
    }
  }
]
✔ PASSED

Running SQL query: test-list-query.sql
[
  {
    "arn": "arn:aws:sagemaker:us-east-1:986325076436:notebook-instance/turbottest83303",
    "name": "turbottest83303",
    "partition": "aws",
    "region": "us-east-1"
  }
]
✔ PASSED

Running SQL query: test-turbot-query.sql
[
  {
    "account_id": "986325076436",
    "akas": [
      "arn:aws:sagemaker:us-east-1:986325076436:notebook-instance/turbottest83303"
    ],
    "region": "us-east-1",
    "tags": {
      "name": "turbottest83303"
    },
    "title": "turbottest83303"
  }
]
✔ PASSED

POSTTEST: tests/aws_sagemaker_notebook_instance

TEARDOWN: tests/aws_sagemaker_notebook_instance

SUMMARY:

1/1 passed.

Example query results

Results
### Basic info

```sql
select
  name,
  arn,
  creation_time,
  instance_type,
  notebook_instance_status
from
  aws_sagemaker_notebook_instance;

+------------------------------------+-----------------------------------------------------------------------------------------------+---------------------+--
| name                               | arn                                                                                | creation_time       | i
+------------------------------------+-----------------------------------------------------------------------------------------------+---------------------+--
| steampipe12                        | arn:aws:sagemaker:us-east-1:986325076436:notebook-instance/steampipe12                        | 2021-04-16 08:17:51 | m
| test-rupzz                         | arn:aws:sagemaker:us-east-1:986325076436:notebook-instance/test-rupzz                         | 2021-04-08 09:22:53 | m
| turbot-test-20200125-create-update | arn:aws:sagemaker:us-east-1:986325076436:notebook-instance/turbot-test-20200125-create-update | 2021-04-16 09:32:26 | m
+------------------------------------+-----------------------------------------------------------------------------------------------+---------------------+--

List notebook instances with unecrypted data on the ML storage volume
select
  name,
  kms_key_id
from
  aws_sagemaker_notebook_instance
where
  kms_key_id is null;

+------------------------------------+------------+
| name                               | kms_key_id |
+------------------------------------+------------+
| turbot-test-20200125-create-update | <null>     |
| test-rupzz                         | <null>     |
+------------------------------------+------------+

List notebook instances that are not publicly available
select
  name,
  direct_internet_access
from
  aws_sagemaker_notebook_instance
where
  direct_internet_access = 'Disabled';

+------+------------------------+
| name | direct_internet_access |
+------+------------------------+
+------+------------------------+

List notebook instances whose root access for users disabled
select
  name,
  root_access
from
  aws_sagemaker_notebook_instance
where
  root_access = 'Disabled';

+------+-------------+
| name | root_access |
+------+-------------+
+------+-------------+

LGTM


Add theme support

Yesterday I put Brightness.dark in my app to enable dark mode, but the TextField keeps displaying in white like this

It will also be cool if the padding around the TextField can be adjusted.

Thanks for using this package, I'll add theme support and padding support.


Saving zoomed image?

HI,
Thanks for providing the library, it looks great! I intend to use the Inline PhotoView, but I would like to save the zoomed/rotated image when the user is finished. Is that possible?
/Martijn

I hope its not rude to show you another repository, but to me it sounds like you are rather looking for this: https://github.com/hnvn/flutter_image_cropper, otherwise, please elaborate on what your usecase is.

Hi Stefan, thanks for replying. Indeed, I was planning to use that, but I discovered that the library contains only one function ('_cropImage()') and it shows the entire window , so including the two bars at the bottom (for zoom/rotate/crop) and the X, 'edit photo', and the tick. I want to include the functionality in my own widget directly. Probably, I can modify the plugin and extract the functionality, but it seems that this is quite basic functionality that most likely already exists. Do you have any ideas?

The only other library I know that might fit is this one: https://pub.dartlang.org/packages/image_crop, but I guess feel free to fork this one and add the save functionality, you can use the other libararies as a reference for that.

Thanks! Image_crop was indeed my alternative. In the end, I used ZoomableWidget from https://github.com/mchome/flutter_advanced_networkimage, combined with https://github.com/parth181195/flutter_widget_to_image. That suffices for me for now.


WIP: Wring out multi expansion

Coverage decreased (-0.02%) to 97.687% when pulling 82421266ad1b616407795f45a417eb29919fbd02 on CyberiaResurrection:WringOutMultiExpansion into feed4e65bfe2e577624ba15d7bf2bcd3bebad358 on Algo-Web:master.

Coverage decreased (-0.02%) to 97.687% when pulling 82421266ad1b616407795f45a417eb29919fbd02 on CyberiaResurrection:WringOutMultiExpansion into feed4e65bfe2e577624ba15d7bf2bcd3bebad358 on Algo-Web:master.


Specify plugin version in config

If you specify <plugin>@next in config, it works great for .hyper_plugins/package.json: next is use and not last. But Hyper try to access .hyper_plugins/node_modules/<plugin>@next/ and not
.hyper_plugins/node_modules/<plugin>/

@chabou I'm confused, did you fix this with #2312? Or is help wanted?

Yes! It has been fixed by #2312.
Thank you for your help proposal


Pekko #287: Migrate docker compose scala

https://github.com/apache/incubator-pekko/issues/287

It seems to me that this might be showing the same issue as the java repo. However lacking logs here:
pekko-sample-cluster-docker-compose-scala$ ./scripts/test.sh
...
15:03:09,176 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [pekko] to false
15:03:09,176 |-ERROR in ch.qos.logback.core.joran.action.AppenderRefAction - Could not find an appender named [console]. Did you define it below instead of above in the configuration file?
15:03:09,176 |-ERROR in ch.qos.logback.core.joran.action.AppenderRefAction - See http://logback.qos.ch/codes.html#appender_order for more details.
15:03:09,177 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to WARN
15:03:09,177 |-ERROR in ch.qos.logback.core.joran.action.AppenderRefAction - Could not find an appender named [console]. Did you define it below instead of above in the configuration file?
15:03:09,177 |-ERROR in ch.qos.logback.core.joran.action.AppenderRefAction - See http://logback.qos.ch/codes.html#appender_order for more details.
15:03:09,177 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
15:03:09,177 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@6f274f8 - Registering current configuration as safe fallback point

SLF4J: A number (4) of logging calls during the initialization phase have been intercepted and are
SLF4J: now being replayed. These are subject to the filtering rules of the underlying logging system.
SLF4J: See also http://www.slf4j.org/codes.html#replay

Issue fixed by setting the appender namespace to 'console'

the tests are very flaky but a few runs seem to have reached this new sample's tests and failed both times - are these tests working ok?

Looks like a legit failure. Perhaps another test is using port 1600?
ERROR: for pekko-sample-cluster-docker-compose-scala_c1_1  Cannot start service c1: driver failed programming external connectivity on endpoint pekko-sample-cluster-docker-compose-scala_c1_1 (daf98c63bff2de243be74dcccb939c7f0472f3b4db6b5df9720c3e7cc8c46899): Bind for <IP_ADDRESS>:1601 failed: port is already allocated
Host is already in use by another container
Creating pekko-sample-cluster-docker-compose-scala_seed_1 ... error

ERROR: for pekko-sample-cluster-docker-compose-scala_seed_1  Cannot start service seed: driver failed programming external connectivity on endpoint pekko-sample-cluster-docker-compose-scala_seed_1 (46334b60e00c0193b5804d268febf5c313e61beaa3f4e034a26d9ccb8a0a3eb3): Bind for <IP_ADDRESS>:1600 failed: port is already allocated

I guess changing the ports is one way - but really shouldn't the tests be tidying up after themselves? we're not really trying to run the tests in parallel - so the java tests should complete and tear down their docker containers before we start the scala tests (or vice versa)

Ok - I've reverted that and added cleanup to the docker-compose and kubernetes-scala test.sh scripts.


How to Automatically activating a virtualenv when using projectile?

Thanks for your good job!

Hi! Sorry for taking forever to respond. I'I would need a bit more detail to help you debug. How is it not working? What are you expecting to happen, and what actually happens instead?

I'm going to close this due to a lack of further details.


Unread message marker

Can be based on https://github.com/erming/shout/pull/382

:+1: as long as UX implications are discussed beforehand.

+1
It's hard to find what we read and what we didn't.

+1

Would be super nice to have something like gitter.im does:

Right now I'm just missing the line Textual leaves in each buffer at the last read position, so the original proposal would do me just fine. Maybe bring in the horizontal line now as a minimum viable feature and then work on emulating gitter.im if there's interest?

Can be closed now #332


Can Stylet incorporate with WinUI 3 ?

Hi,
Is it possible to harness the Model-First approach and all other benefits of Stylet while building a WinUI 3 desktop application ?

I'm afraid I have looked into WinUI, so I can't say odd the top of my head.

Okay, maybe I am happy with WinUI 2.4 too. Is it possible to harness Stylet inside a Universal desktop application targeting Windows 10 version 1903 ? I am not sure...

Stylet currently only supports WPF. Not UWP or WinUI. It may make sense to port Stylet to WinUI, but this is not something I've looked into.

Okay, I received your former message. .NET 5 will be supported therefore we can shun the entire UWP track by opting for WinUI 3. It sounds so splendid, it is gonna be an evolution of UX by watching the latest Windows 10 controls empowered by the ones Syncfusion & Telerik bestow for the community. 👍

No, Stylet does not support WinUI, and porting it will take effort. Stylet will definitely support WPF on .NET 5, but WPF is not WinUI.

Okay, no stress I believe it isn't 5-mouse-click job, I remain then a visitor of your work and see whenever you may publish such aspiration to follow that porting through.
Best of luck & Thank you for supporting on this matter.

Perhaps, porting Stylet to WinUI isn't essential since WinUI 3 will support xaml islands hence a WPF desktop modernization is gonna be feasible piece by piece on the user interface. As MS moniker it is the hybrid use. The current WinUI 3 preview 3 does not however support the islands. I think next year's WinUI 3 release and an elevation of Stylet target framework to .NET 5 will together unlock many possibilities to enrich an older Win32 desktop application. The OS though must be as up to date as Windows 10 (1803+), which was an April 2018 Update.

However, WinUI 3.0 will not support xaml islands, only a later version 3.x, which may come in either 2021 or 2022.  Here is WinUI roadmap

If you're writing a new WinUI app I don't think you'd want to write everything as WPF in a XAML island though: if you're doing that, why not just write a WPF app to start with?

Yeah, no way. Just thinking whether I should rewrite an application with WinUI 3 and departure from Stylet, or wait for Stylet 1.4 or maybe 2.0 that supports a WinUI project. By today I learnt that the solution with the islands is uncertain in time.


[FLINK-12918][table][hive] unify GenericCatalogTable, HiveCatalogTable and AbstractCatalogTable into CatalogTableImpl

What is the purpose of the change
This PR unifies implementations of CatalogTable by combining GenericCatalogTable, HiveCatalogTable and AbstractCatalogTable into CatalogTableImpl.
Brief change log

combined GenericCatalogTable, HiveCatalogTable and AbstractCatalogTable into CatalogTableImpl
moved IS_GENERIC flag from GenericInMemoryCatalog to CatalogConfig
updated unit tests

Verifying this change
This change added tests and can be verified as follows: GenericInMemoryCatalogTest, HiveCatalogHiveMetadataTest, HiveCatalogGenericMetadataTest
Does this pull request potentially affect one of the following parts:

Dependencies (does it add or upgrade a dependency): (no)
The public API, i.e., is any changed class annotated with @Public(Evolving): (no)
The serializers: (no)
The runtime per-record code paths (performance sensitive): (no)
Anything that affects deployment or recovery: JobManager (and its components), Checkpointing, Yarn/Mesos, ZooKeeper: (no)
The S3 file system connector:(no)

Documentation

Does this pull request introduce a new feature? (yes)
If yes, how is the feature documented? (not applicable)

cc @xuefuz @lirui-apache @zjuwangg
@sunjincheng121 @dianfu can you verify the python part?

@bowenli86 Thanks a lot for the PR. The changes related to the Python part LGTM.

@xuefuz thanks for your review! I updated the PR

I rebased to master to resolve conflicts. @xuefuz can you take another look?

The newly added class, HiveTableFactory, still has reference to GenericCatalogTable. However, I don't see any changes included for that.

@xuefuz I just rebased this PR to master

The assigned travis build probably won't finish 10 hours later. My private build succeeded .
Merging.


How to find all documents from collection

In ruby mongo driver to find all documents in collection is
collection.find

However, in this driver expect to have some arguments pass to it. Which argument should I pass to find method in order to get the ideal result ?

@dylandy here is how I did it: https://github.com/sam0x17/crystal-mongo-orm/blob/3262bc6880d7c6ec8e2f756bfc9a1a8050b71bc2/src/mongo_orm/querying.cr#L88
Note that my ORM is able to do this out of the box using the Model.all method, as you mention.
https://github.com/sam0x17/crystal-mongo-orm

You can get all documents of a collection (as BSON objects) like this:
docs = [] of BSON
collection.find(BSON.new).each do |doc|
  docs << doc
end

I don't know if it's the best way, but it works fine.


Bugfix in parse_into_milliseconds

Codecov Report

Merging #1867 (628bbe5) into main (539ff08) will increase coverage by 0.00%.
The diff coverage is 96.82%.

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
@@           Coverage Diff           @@
##             main    #1867   +/-   ##
=======================================
  Coverage   94.42%   94.42%
=======================================
  Files         298      298
  Lines       53248    53319   +71
=======================================
+ Hits        50277    50347   +70
- Misses       2971     2972    +1

Impacted Files
Coverage Δ

columnar/src/lib.rs
52.17% <ø> (ø)

columnar/src/column/mod.rs
87.50% <90.47%> (+4.16%)
:arrow_up:

columnar/src/column_index/mod.rs
96.49% <96.00%> (+1.25%)
:arrow_up:

src/indexer/index_writer.rs
96.67% <96.42%> (+0.04%)
:arrow_up:

columnar/src/column/dictionary_encoded.rs
85.71% <100.00%> (ø)

columnar/src/column_index/multivalued_index.rs
100.00% <100.00%> (ø)

columnar/src/column_index/optional_index/mod.rs
89.07% <100.00%> (ø)

columnar/src/column_index/optional_index/tests.rs
100.00% <100.00%> (ø)

columnar/src/column_values/column.rs
85.57% <100.00%> (ø)

columnar/src/column_values/compact_space/mod.rs
98.69% <100.00%> (-0.17%)
:arrow_down:

... and 9 more

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.


Ispn 1623

This was merged as well by cherry-picking the second commit and adding a copyright header.


Make the promt-toolkit version range explicit

Resolve #224

Codecov Report

Merging #225 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master     #225   +/-   ##
=======================================
  Coverage   37.78%   37.78%
=======================================
  Files          26       26
  Lines        1559     1559
=======================================
  Hits          589      589
  Misses        970      970

Continue to review full report at Codecov.

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


Add option to count holidays per fiscal year

Some companies count holidays and sick leaves in fiscal year (April 1 - March 31 in my case) rather than calendar years (Jan 1 - Dec 31).

Fair point @nnmalex.
It is indeed worth making it configurable to set the company's start of the year date.

@vpp db schema for the table Companies has a column start_of_new_year, is that month index which can be changed?

@hansg01, this is just a place where the start date is going to be stored. Unfortunately this is not respected in all calculations yet. So changes to the value will not have any effect.

Hello @vpp,
Is this a difficult fix? I didn’t look into code for this yet but from the top of your head can this be hard coded on a certain app instance easier than implementing as a feature?

It is doable but not trivial unfortunately.
Simple grep and replace would not work as one needs manually update code like this
https://github.com/timeoff-management/application/blob/master/lib/model/mixin/user/absence_aware.js#L194

It is not big set of places though:
lib//model/calendar_month.js:9:    this.date           = moment(day).startOf('month');
lib//model/db/user.js:489:          { end_date : {$gte : moment().startOf('day').format('YYYY-MM-DD') }},
lib//model/mixin/user/absence_aware.js:29:      return moment().add(delta, 'months').startOf('month');
lib//model/mixin/user/absence_aware.js:72:                  moment(year).startOf('year').format('YYYY-MM-DD'),
lib//model/mixin/user/absence_aware.js:80:                  moment( year ).startOf('year').format('YYYY-MM-DD'),
lib//model/mixin/user/absence_aware.js:194:            moment(year).startOf('year').format('YYYY-MM-DD'),
lib//model/mixin/user/absence_aware.js:200:            moment(year).startOf('year').format('YYYY-MM-DD'),
lib//model/mixin/user/absence_aware.js:438:      : now.startOf('year'),
lib//model/mixin/user/absence_aware.js:480:              moment(year).startOf('year').format('YYYY-MM-DD'),
lib//model/mixin/user/absence_aware.js:486:              moment(year).startOf('year').format('YYYY-MM-DD'),
lib//model/mixin/user/company_aware.js:47:                      moment().startOf('year').format('YYYY-MM-DD'),
lib//model/mixin/user/company_aware.js:53:                      moment().startOf('year').format('YYYY-MM-DD'),
lib//route/users.js:240:        moment( new_user_attributes.end_date ).startOf('day').toDate() >= moment().startOf('day').toDate()
lib//route/users.js:519:                      moment().startOf('year').format('YYYY-MM-DD'),
lib//route/users.js:525:                      moment().startOf('year').format('YYYY-MM-DD'),

Will check it out, thanks!

Was this change attempted?


feature added for #495

Adding two features to pickset
resolved issue:
#495
Description:
A Third Optional parameter options added to pickset function:
options{distinct:true/false, exclude:[]}
If distinct is true, the output itmes will be different, otherwise output items can be the same.
Excluded items won't appear in output results.
Example:
chance.pickset([1, 2, 3, 4, 5], 3, {distinct:true, exclude: [2, 4]});
//output: [1,3,5] or any possible permutations

Coverage decreased (-0.3%) to 95.26% when pulling 7fce53349ceb3b98e8fa07ed33a54e1551c31540 on IRIL-Webelopers:#495 into 93b384673074fe959c9691d02d2a0fec8cd394fa on chancejs:master.


Cauldron tags, mecs, and event

https://hub.spigotmc.org/javadocs/spigot/org/bukkit/material/Cauldron.html
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/block/CauldronLevelChangeEvent.html
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/block/CauldronLevelChangeEvent.ChangeReason.html

Well, the only cauldron tags that can be added from the Spigot API are isFull() and isEmpty(). Completely pointless. The only other option for cauldron tags is a tag that returns the cauldron's water level, which can be achieved through equally pointless metadata (for 1.12 and below) or NMS.
I'll just add the event.

So the Cauldron material class is completely useless with regards to setting the water level of the cauldron, but there is a Levelled blockdata interface.
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/block/data/Levelled.html

Level property added in https://github.com/DenizenScript/Denizen-For-Bukkit/commit/613930898d0cb3539c3ae99be2f596adc00385e7

Event added.


Make run static

Params
Add per script:

tech
step

Notes

Generate should always generate from scratch with the same seed.
Move every bash stuff to a script

Done


On Android : BinanceTradeService always throws error: -1022: Signature for this request is not valid.

I am able to use all methods in BinanceTradeService on my ubuntu, but on android it always throws Signature for this request is not valid.
BinanceAccountService and MarketDataService both working on ubuntu and android.
`ExchangeSpecification exSpec = new BinanceExchange().getDefaultExchangeSpecification();
exSpec.setUserName("mybinance");
exSpec.setApiKey("API-KEY");
exSpec.setSecretKey("API-SECRET");
Exchange exchange =  ExchangeFactory.INSTANCE.createExchange(exSpec);
TradeService tradeService = exchange.getTradeService();
BinanceTradeHistoryParams tradeHistoryParams = (BinanceTradeHistoryParams) tradeService.createTradeHistoryParams();
    tradeHistoryParams.setCurrencyPair(new CurrencyPair("ICX", "BTC"));

    try {

        UserTrades trades = tradeService.getTradeHistory(tradeHistoryParams);

        System.out.println(trades.toString());

    } catch (Exception e) {

        e.printStackTrace();

    }

`
Same piece of code works on ubuntu and fails on android. Please help.

did you check if syncing the devices clock helps?

Did you find a solution to your issue ? I am facing the same error with Binance whatever API key I use.


Unable to add '(...)' in apply from: "...flutter.gradle"

Well, this is a bug of the weird sort and honestly I have no idea, why it happens, but it should be easy to reproduce:
I was going to migrate my Gradle scripts to Kotlin an just did the following thing: I changed
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
to
apply(from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle")
When I change this, I get:
Exception: [!] Your app is using an unsupported Gradle project. To fix this problem, create a new project by running flutter create -t app <app-directory> and then move the dart code, assets and pubspec.yaml to the new project.
As this is not a big problem when you know why you are gettin the exception, it is very hard to find if you don't know the cause of the problem and the bug is really weird, because the statement should be syntactically the same, so I think you are doing something weird like parsing gradle.build for a specific String somewhere???

Hi @pueffl
I can only see this
apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"

and changing this to, app works
apply(from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle")

adding this breaking this, app doesn't work
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

Did i miss something? I'm too familiar gradle scripts?
Thank you

Sorry, I think this is my fault!
The build itself works fine. The exception occurs when you try to start the project. When you select main.dart and try to run/debug, the exception is shown before an assembly is created and the application never starts.

Hi @pueffl
Running with this, app works fine
apply(from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle")

but your  line it seems to have different root name so i changed to flutterSdkPath to match correct root without parentesis and still fails
Notice new project loads pp_plugin_loader.gradle and not `flutter.gradle
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

to
apply from: "$flutterSdkPath/packages/flutter_tools/gradle/flutter.gradle"

but it fails to run to run even without parentesis
Running "flutter pub get" in dev_flutter...                         0.4s
Launching lib/main.dart on SM M305F in debug mode...

FAILURE: Build failed with an exception.

* Where:
Script '/Users/tahatesser/Code/flutter_dev/packages/flutter_tools/gradle/flutter.gradle' line: 34

* What went wrong:
A problem occurred evaluating script.
> Could not find method android() for arguments [flutter_ejeojezq9jiez72lpwxrp9rie$_run_closure1@5be7c7b4] on settings 'android' of type org.gradle.initialization.DefaultSettings.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 797ms
Exception: Gradle task assembleDebug failed with exit code 1
Exited (sigterm)

flutter doctor -v
[✓] Flutter (Channel dev, 1.19.0-4.0.pre, on Mac OS X 10.15.5 19F101, locale
    en-GB)
    • Flutter version 1.19.0-4.0.pre at /Users/tahatesser/Code/flutter_dev
    • Framework revision 2f7a59a8da (3 days ago), 2020-06-05 03:44:02 -0700
    • Engine revision d17c84e7af
    • Dart version 2.9.0 (build 2.9.0-13.0.dev 02915ec5ce)

[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
    • Android SDK at /Users/tahatesser/Code/sdk
    • Platform android-29, build-tools 29.0.3
    • ANDROID_HOME = /Users/tahatesser/Code/sdk
    • Java binary at: /Applications/Android
      Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build
      1.8.0_242-release-1644-b3-6222593)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 11.5)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 11.5, Build version 11E608c
    • CocoaPods version 1.9.3

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 4.0)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 46.0.2
    • Dart plugin version 193.7361
    • Java version OpenJDK Runtime Environment (build
      1.8.0_242-release-1644-b3-6222593)

[✓] VS Code (version 1.45.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.11.0

[✓] Connected device (4 available)
    • SM M305F   • 32003c30dc19668f • android-arm64  • Android 10 (API 29)
    • macOS      • macOS            • darwin-x64     • Mac OS X 10.15.5 19F101
    • Web Server • web-server       • web-javascript • Flutter Tools
    • Chrome     • chrome           • web-javascript • Google Chrome
      83.0.4103.97

• No issues found!

Hi!
This doesn't work for me. I get:
Could not get unknown property 'flutterSdkPath' for project ':app' of type org.gradle.api.Project.
when I build the project.
And why should I change it from
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
Isn' that the 'official' line of code that is generated on every new flutter project?
C:\Development\Projects\eight\android>flutter doctor -v
[√] Flutter (Channel stable, v1.17.2, on Microsoft Windows [Version 10.0.18363.836], locale de-AT)
• Flutter version 1.17.2 at C:\Development\Tools\flutter
• Framework revision 5f21edf8b6 (11 days ago), 2020-05-28 12:44:12 -0700
• Engine revision b851c71829
• Dart version 2.8.3
[√] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
• Android SDK at C:\Development\Tools\android\sdk
• Platform android-29, build-tools 29.0.3
• ANDROID_SDK_ROOT = C:\Development\Tools\android\sdk
• Java binary at: C:\Development\Tools\studio\jre\bin\java
• Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
• All Android licenses accepted.
[√] Android Studio (version 4.0)
• Android Studio at C:\Development\Tools\studio
• Flutter plugin version 46.0.2
• Dart plugin version 193.7361
• Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
[√] IntelliJ IDEA Community Edition (version 2019.3)
• IntelliJ at C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.3.4
• Flutter plugin version 44.0.3
• Dart plugin version 193.6911.31
[√] VS Code (version 1.45.1)
• VS Code at C:\Users\Wolfgang Grossinger\AppData\Local\Programs\Microsoft VS Code
• Flutter extension version 3.11.0
[√] Connected device (1 available)
• Android SDK built for x86 • emulator-5554 • android-x86 • Android 10 (API 29) (emulator)
• No issues found!

Hi @pueffl
Here is my settings.gradle on latest Channel stable, v1.17.3, on a new project
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

include ':app'

def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
def properties = new Properties()

assert localPropertiesFile.exists()
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }

def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"

Can you please create a new project on latest stable and post your settings.gradle here?
Thank you

// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
include ':app'
def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
def properties = new Properties()
assert localPropertiesFile.exists()
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
Seems to be the same as yours

Hi @pueffl
Please try Adding (.....) from previous comment and let me know if this still causes
apply(from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle")

Without additional information we are unfortunately not sure how to resolve this issue.
We are therefore reluctantly going to close this bug for now.
Please don't hesitate to comment on the bug if you have any more information for us; we will reopen it right away!
Thanks for your contribution.


[v0.22.1 regression] rootless mode fails on Fedora and Arch Linux:  runc create failed: unable to start container process: can't get final child's PID from pipe: EOF: unknown

Description
Rootless mode seems broken in v0.22.1.
Works on Ubuntu 22.04, but fails on Fedora 36 and Arch Linux.
https://github.com/lima-vm/lima/pull/1006
Steps to reproduce the issue
$ nerdctl run hello-world
FATA[0000] failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: can't get final child's PID from pipe: EOF: unknown

v0.22.0 works as expected.
Rootful mode works too.
Describe the results you received and expected
Received: failing as shown above
Expected: should work
What version of nerdctl are you using?
$ nerdctl version
Client:
 Version:       v0.22.1
 OS/Arch:       linux/amd64
 Git commit:    3c83196ab006154fd1c3bc14bbcc0d3660fb7d5f
 buildctl:
  Version:      v0.10.3
  GitCommit:    c8d25d9a103b70dc300a4fd55e7e576472284e31

Server:
 containerd:
  Version:      v1.6.6
  GitCommit:    10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1
 runc:
  Version:      1.1.3
  GitCommit:    v1.1.3-0-g6724737f

Are you using a variant of nerdctl? (e.g., Rancher Desktop)
Lima
Host information
$ nerdctl info
Client:
 Namespace:     default
 Debug Mode:    false

Server:
 Server Version: v1.6.6
 Storage Driver: overlayfs
 Logging Driver: json-file
 Cgroup Driver: systemd
 Cgroup Version: 2
 Plugins:
  Log: fluentd journald json-file
  Storage: btrfs native overlayfs fuse-overlayfs stargz
 Security Options:
  seccomp
   Profile: default
  cgroupns
  rootless
 Kernel Version: 5.17.5-300.fc36.x86_64
 Operating System: Fedora Linux 36 (Cloud Edition)
 OSType: linux
 Architecture: x86_64
 CPUs: 4
 Total Memory: 3.821GiB
 Name: lima-fedora
 ID: bd3dbbe0-0fdf-4b6d-b5eb-bd5c2019f639

WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

Seems a regression in:

https://github.com/containerd/nerdctl/pull/1255

Workaround: nerdctl run --oom-score-adj 1000


Implementing possibility to attach files to the json reports inside the afterEach hook

Current behavior
attach fn will fail with error message if invoked inside afterEach.
> Unexpected state in createStringAttachmentHandler: test-finished (this might be a bug, please report at https://github.com/badeball/cypress-cucumber-preprocessor)
Desired behavior
Attaching successfully the file to the json reports inside the afterEach hook. I suppose the attached file could go under the last executed step of the scenario in the json report
Test code to reproduce
dummy-hook.js
import { attach } from '@badeball/cypress-cucumber-preprocessor';

const catchFailedTestcase = (done) => {
  try {
    done();
  } catch (err) {}
};

afterEach((done) => {
  const test = Cypress.mocha.getRunner().test.ctx.currentTest;
  // const caseStartTimeUnixMs = test.wallClockStartedAt.getTime();
  // hardcoded the unix timestamp to be earlier added to the "cypress/downloads" directory than your scenario will be executed
  const caseStartTimeUnixMs =<PHONE_NUMBER>962;
  const { platform } = window.Cypress;
  const downloadFolderGlobPath = `${Cypress.config('downloadsFolder')}/**/*.*`;

  cy.task('getFileSinceTime', {
    globFolderPath: downloadFolderGlobPath,
    platform,
    startingFromTimeUnixMs: caseStartTimeUnixMs,
  }).then((downloadPathes) => {
    const availableMimeTypes = {
      csv: {
        mimeType: 'text/csv',
        encoding: 'utf-8',
      },
      jpeg: {
        mimeType: 'base64:image/jpeg',
        encoding: 'base64',
      },
      jpg: {
        mimeType: 'base64:image/jpeg',
        encoding: 'base64',
      },
      json: {
        mimeType: 'application/json',
        encoding: 'utf-8',
      },
      png: {
        mimeType: 'base64:image/png',
        encoding: 'base64',
      },
      pdf: {
        mimeType: 'base64:application/pdf',
        encoding: 'base64',
      },
      txt: {
        mimeType: 'text/plain',
        encoding: 'utf-8',
      },
      xls: {
        mimeType: 'application/vnd.ms-excel',
        encoding: 'utf-8',
      },
      xlsx: {
        mimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
        encoding: 'utf-8',
      },
      xml: {
        mimeType: 'application/xml',
        encoding: 'utf-8',
      },
      zip: {
        mimeType: 'application/zip',
        encoding: 'utf-8',
      },
    };
    downloadPathes.forEach((downloadedItem) => {
      const fileExtension = downloadedItem.match(/\.(.+)$/)[1];

      const { mimeType, encoding } = availableMimeTypes[fileExtension];
      cy.readFile(downloadedItem, encoding).then((content) => {
        attach(content, mimeType);
      });
    });
  });
  cy.then(() => catchFailedTestcase(done));
});

cypress.config.js (remember to disable the "trashAssetsBeforeRuns" option inside the config object)
import path from 'path';
import { globSync } from 'glob';

const getRelativePathFromAbsolute = (absolutePath) => path.relative(process.cwd(), absolutePath);
const getUnixPathFromWin = (winPath) => winPath.split(path.sep).join(path.posix.sep);

  on('task', {
    getFileSinceTime({ globFolderPath, platform, startingFromTimeUnixMs }) {
      const relativeGlobPath = getRelativePathFromAbsolute(globFolderPath);
      const parsedGlobFolderPath = platform.includes('win') ? getUnixPathFromWin(relativeGlobPath) : globFolderPath;
      return globSync(parsedGlobFolderPath).filter(
        (name) => Date.parse(fs.statSync(name).ctime) - startingFromTimeUnixMs >= 0,
      );
    },
  });

Next steps:

Enable json reports in your preprocessor config
Put dummy pdf file into the "cypress/downloads" directory
Create a scenario with one simple step (no matter what logic, can be cy.wrap(1).should('eq', 1)
Execute the scenario in run mode
Pay attention to the error message described in the actual behaviour above

Logs
DevTools listening on ws://<IP_ADDRESS>:63318/devtools/browser/53533b1d-ab11-4706-8209-6ae1725ba69b
  cypress-cucumber-preprocessor resolved environment overrides {} +0ms
  cypress-cucumber-preprocessor resolved explicit user configuration {
  cypress-cucumber-preprocessor   json: { enabled: true, output: 'jsonlogs/log.json' },
  cypress-cucumber-preprocessor   messages: { enabled: true, output: 'jsonlogs/messages.ndjson' },
  cypress-cucumber-preprocessor   html: { enabled: false, output: undefined },
  cypress-cucumber-preprocessor   stepDefinitions: [ 'cypress/e2e/**/stepDefinitions/**/*.js' ],
  cypress-cucumber-preprocessor   filterSpecs: true,
  cypress-cucumber-preprocessor   omitFiltered: false
  cypress-cucumber-preprocessor } +1ms
  cypress-cucumber-preprocessor resolved configuration {
  cypress-cucumber-preprocessor   stepDefinitions: [ 'cypress/e2e/**/stepDefinitions/**/*.js' ],
  cypress-cucumber-preprocessor   messages: { enabled: true, output: 'jsonlogs/messages.ndjson' },
  cypress-cucumber-preprocessor   json: { enabled: true, output: 'jsonlogs/log.json' },
  cypress-cucumber-preprocessor   html: { enabled: false, output: 'cucumber-report.html' },
  cypress-cucumber-preprocessor   pretty: { enabled: false },
  cypress-cucumber-preprocessor   filterSpecs: true,
  cypress-cucumber-preprocessor   omitFiltered: false,
  cypress-cucumber-preprocessor   implicitIntegrationFolder: '/'
  cypress-cucumber-preprocessor } +0ms

====================================================================================================

  (Run Starting)

  ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
  │ Cypress:        12.17.3                                                                        │
  │ Browser:        Chrome 116 (headless)                                                          │
  │ Node Version:   v18.17.1 (/usr/local/bin/node)                                                 │
  │ Specs:          1 found (Login.feature)                                                        │
  │ Searched:       cypress/e2e/features/User Identification/Login.feature                         │
  │ Experiments:    experimentalInteractiveRunEvents=true,experimentalOriginDependencies=true      │
  └────────────────────────────────────────────────────────────────────────────────────────────────┘

  cypress-cucumber-preprocessor beforeRunHandler() +328ms
  cypress-cucumber-preprocessor resolved environment overrides {} +2ms
  cypress-cucumber-preprocessor resolved explicit user configuration {
  cypress-cucumber-preprocessor   json: { enabled: true, output: 'jsonlogs/log.json' },
  cypress-cucumber-preprocessor   messages: { enabled: true, output: 'jsonlogs/messages.ndjson' },
  cypress-cucumber-preprocessor   html: { enabled: false, output: undefined },
  cypress-cucumber-preprocessor   stepDefinitions: [ 'cypress/e2e/**/stepDefinitions/**/*.js' ],
  cypress-cucumber-preprocessor   filterSpecs: true,
  cypress-cucumber-preprocessor   omitFiltered: false
  cypress-cucumber-preprocessor } +0ms
  cypress-cucumber-preprocessor resolved configuration {
  cypress-cucumber-preprocessor   stepDefinitions: [ 'cypress/e2e/**/stepDefinitions/**/*.js' ],
  cypress-cucumber-preprocessor   messages: { enabled: true, output: 'jsonlogs/messages.ndjson' },
  cypress-cucumber-preprocessor   json: { enabled: true, output: 'jsonlogs/log.json' },
  cypress-cucumber-preprocessor   html: { enabled: false, output: 'cucumber-report.html' },
  cypress-cucumber-preprocessor   pretty: { enabled: false },
  cypress-cucumber-preprocessor   filterSpecs: true,
  cypress-cucumber-preprocessor   omitFiltered: false,
  cypress-cucumber-preprocessor   implicitIntegrationFolder: '/'
  cypress-cucumber-preprocessor } +0ms

────────────────────────────────────────────────────────────────────────────────────────────────────

  Running:  Login.feature                                                                   (1 of 1)
  cypress-cucumber-preprocessor beforeSpecHandler() +1s
  cypress-cucumber-preprocessor resolved environment overrides {} +48ms
  cypress-cucumber-preprocessor resolved explicit user configuration {
  cypress-cucumber-preprocessor   json: { enabled: true, output: 'jsonlogs/log.json' },
  cypress-cucumber-preprocessor   messages: { enabled: true, output: 'jsonlogs/messages.ndjson' },
  cypress-cucumber-preprocessor   html: { enabled: false, output: undefined },
  cypress-cucumber-preprocessor   stepDefinitions: [ 'cypress/e2e/**/stepDefinitions/**/*.js' ],
  cypress-cucumber-preprocessor   filterSpecs: true,
  cypress-cucumber-preprocessor   omitFiltered: false
  cypress-cucumber-preprocessor } +0ms
  cypress-cucumber-preprocessor resolved configuration {
  cypress-cucumber-preprocessor   stepDefinitions: [ 'cypress/e2e/**/stepDefinitions/**/*.js' ],
  cypress-cucumber-preprocessor   messages: { enabled: true, output: 'jsonlogs/messages.ndjson' },
  cypress-cucumber-preprocessor   json: { enabled: true, output: 'jsonlogs/log.json' },
  cypress-cucumber-preprocessor   html: { enabled: false, output: 'cucumber-report.html' },
  cypress-cucumber-preprocessor   pretty: { enabled: false },
  cypress-cucumber-preprocessor   filterSpecs: true,
  cypress-cucumber-preprocessor   omitFiltered: false,
  cypress-cucumber-preprocessor   implicitIntegrationFolder: '/Users/artemSokorskyi/Desktop/Workspace/work projects/olympics-hrp-qa/cypress/e2e/features'
  cypress-cucumber-preprocessor } +1ms
  cypress-cucumber-preprocessor resolving step definitions using template(s) [ 'cypress/e2e/**/stepDefinitions/**/*.js' ] +0ms
  cypress-cucumber-preprocessor replacing [filepath] with 'User Identification/Login' +0ms
  cypress-cucumber-preprocessor replacing [filepart] with [ 'User Identification/Login', 'User Identification' ] +0ms
  cypress-cucumber-preprocessor for 'cypress/e2e/features/User Identification/Login.feature' yielded patterns [ 'cypress/e2e/**/stepDefinitions/**/*.js' ] +0ms
  cypress-cucumber-preprocessor found step definitions [
  cypress-cucumber-preprocessor   'cypress/e2e/project/stepDefinitions/NavigateSteps.js',
  cypress-cucumber-preprocessor   'cypress/e2e/project/stepDefinitions/GenericSteps.js',
  cypress-cucumber-preprocessor   'cypress/e2e/project/stepDefinitions/DropdownSteps.js',
  cypress-cucumber-preprocessor   'cypress/e2e/project/stepDefinitions/AssertFilteringSteps.js',
  cypress-cucumber-preprocessor   'cypress/e2e/project/stepDefinitions/ApiSteps.js',
  cypress-cucumber-preprocessor   'cypress/e2e/core/stepDefinitions/PageSteps.js',
  cypress-cucumber-preprocessor   'cypress/e2e/core/stepDefinitions/MemorySteps.js',
  cypress-cucumber-preprocessor   'cypress/e2e/core/stepDefinitions/InputSteps.js',
  cypress-cucumber-preprocessor   'cypress/e2e/core/stepDefinitions/ClickerSteps.js',
  cypress-cucumber-preprocessor   'cypress/e2e/core/stepDefinitions/CheckSteps.js',
  cypress-cucumber-preprocessor   'cypress/e2e/project/stepDefinitions/Hooks/clearTestStateHook.js',
  cypress-cucumber-preprocessor   'cypress/e2e/project/stepDefinitions/Hooks/IntegrationHooks.js'
  cypress-cucumber-preprocessor ] +7ms

  Login
  cypress-cucumber-preprocessor specEnvelopesHandler() +2s
    - Successful login with valid uppercase/lowercase email (example #1)
    - Successful login with valid uppercase/lowercase email (example #2)
    - Login with invalid email format
    - Login with empty fields
    - Login with invalid credentials
  cypress-cucumber-preprocessor testCaseStartedHandler() +31ms
  cypress-cucumber-preprocessor testStepStartedHandler() +5ms
  cypress-cucumber-preprocessor testStepFinishedHandler() +2s
  cypress-cucumber-preprocessor testStepStartedHandler() +4ms
  cypress-cucumber-preprocessor testStepFinishedHandler() +3s
  cypress-cucumber-preprocessor testStepStartedHandler() +5ms
  cypress-cucumber-preprocessor testStepFinishedHandler() +242ms
  cypress-cucumber-preprocessor testStepStartedHandler() +10ms
  cypress-cucumber-preprocessor testStepFinishedHandler() +5s
  cypress-cucumber-preprocessor testStepStartedHandler() +31ms
  cypress-cucumber-preprocessor testStepFinishedHandler() +112ms
  cypress-cucumber-preprocessor testStepStartedHandler() +5ms
  cypress-cucumber-preprocessor testStepFinishedHandler() +575ms
  cypress-cucumber-preprocessor testStepStartedHandler() +25ms
  cypress-cucumber-preprocessor testStepFinishedHandler() +52ms
  cypress-cucumber-preprocessor testCaseFinishedHandler() +22ms
  cypress-cucumber-preprocessor createStringAttachmentHandler() +35ms
  cypress-cucumber-preprocessor afterScreenshotHandler() +120ms
    1) "after each" hook for "Dummy Scenario"

  0 passing (12s)
  5 pending
  1 failing

  1) Login
       "after each" hook for "Dummy Scenario":
     CypressError: `cy.task('cypress-cucumber-preprocessor:create-string-attachment')` failed with the following error:

> Unexpected state in createStringAttachmentHandler: test-finished (this might be a bug, please report at https://github.com/badeball/cypress-cucumber-preprocessor)

https://on.cypress.io/api/task

Because this error occurred during a `after each` hook we are skipping all of the remaining tests.
      at <unknown> (https://dev-hrp.vpc.qcue.com/__cypress/runner/cypress_runner.js:151171:78)
      at tryCatcher (https://dev-hrp.vpc.qcue.com/__cypress/runner/cypress_runner.js:18744:23)
      at Promise._settlePromiseFromHandler (https://dev-hrp.vpc.qcue.com/__cypress/runner/cypress_runner.js:16679:31)
      at Promise._settlePromise (https://dev-hrp.vpc.qcue.com/__cypress/runner/cypress_runner.js:16736:18)
      at Promise._settlePromise0 (https://dev-hrp.vpc.qcue.com/__cypress/runner/cypress_runner.js:16781:10)
      at Promise._settlePromises (https://dev-hrp.vpc.qcue.com/__cypress/runner/cypress_runner.js:16857:18)
      at _drainQueueStep (https://dev-hrp.vpc.qcue.com/__cypress/runner/cypress_runner.js:13451:12)
      at _drainQueue (https://dev-hrp.vpc.qcue.com/__cypress/runner/cypress_runner.js:13444:9)
      at ../../node_modules/bluebird/js/release/async.js.Async._drainQueues (https://dev-hrp.vpc.qcue.com/__cypress/runner/cypress_runner.js:13460:5)
      at Async.drainQueues (https://dev-hrp.vpc.qcue.com/__cypress/runner/cypress_runner.js:13330:14)
  From Your Spec Code:
      at createStringAttachment (webpack:///./node_modules/@badeball/cypress-cucumber-preprocessor/dist/entrypoint-browser.js:94:0)
      at attach (webpack:///./node_modules/@badeball/cypress-cucumber-preprocessor/dist/entrypoint-browser.js:100:0)
      at Context.eval (webpack:///./cypress/e2e/project/stepDefinitions/Hooks/IntegrationHooks.js:280:14)

  From Node.js Internals:
    Error: Unexpected state in createStringAttachmentHandler: test-finished (this might be a bug, please report at https://github.com/badeball/cypress-cucumber-preprocessor)
        at createError (/Users/artemSokorskyi/Desktop/Workspace/work projects/olympics-hrp-qa/node_modules/@badeball/cypress-cucumber-preprocessor/dist/helpers/error.js:9:12)
        at createStringAttachmentHandler (/Users/artemSokorskyi/Desktop/Workspace/work projects/olympics-hrp-qa/node_modules/@badeball/cypress-cucumber-preprocessor/dist/plugin-event-handlers.js:434:43)
        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

  cypress-cucumber-preprocessor afterSpecHandler() +1s
  Hook failures can't be represented in any reports (messages / json / html), thus none is created for cypress/e2e/features/User Identification/Login.feature.

Versions

Cypress version: 12.17.3
Preprocessor version: 18.0.4
Node version: 18.17.1

Checklist

[X] I've read the FAQ.
[X] I've read instructions for logging issues.
[X] I'm not using<EMAIL_ADDRESS>(package name has changed and it is no longer the most recent version, see #689).

See issue #1051

Sorry for taking so long to get back to you, @artem-sokorskyi and @hammzj. As mentioned, this has come up before. I was not entirely convinced of the use-cases, but adding downloads to the report seems akin to screenshots. Ideally I would have liked to have a download API in Cypress and have native support for adding downloads to reports, but based on previous experience I'd say there's little chance of ever seeing this added.
I've been trying to come up with the best way of supporting all of the use-cases so far, and I think having a after step handler in the node environment, providing an attach function, will suffice, Something along the lines of that shown below.
Adding logs from cypress-terminal-report (@hammzj :
await addCucumberPreprocessorPlugin(on, config, {
  onAfterStep({ wasLastStep, attach }) {
    if (wasLastStep) {
      const logs = ""; // Retrieve logs from  cypress-terminal-report.

      attach(logs);
    }
  }
});

Adding downloads (@artem-sokorskyi):
await addCucumberPreprocessorPlugin(on, config, {
  onAfterStep({ wasLastStep, attach }) {
    const downloads = []; // Retrieve recent downloads.

    for (const download of downloads) {
      attach(download);
    }
  }
});

Adding resized screenshots (@MDG-JHowley):
await addCucumberPreprocessorPlugin(on, config, {
  async onAfterStep({ wasLastStep, attach }) {
    const screenshots = []; // Retrieve recent screenshots.

    for (const screenshot of screenshots) {
      attach(resize(screenshot));
    }
  }
});

cool stuff!!!

@badeball  yes this would be great - as you say, we really just need the attach method available in the node environment.  onAfterStep seems like a good place to add that hook but what happens if the test fails?  Would this hook still be run?

but what happens if the test fails? Would this hook still be run?

This, contrary to others, can intact be run despite test failures.

So, onAfterStep is a node hook, but runs like this:

after:step event (Node env)
onAfterStep function (Cypress env)

If this is the case, this is really cool. I wonder, could this will also get around After hooks not running on test failures since it's able to call back into the browserified Cypress environment?

No, this would run purely in the node environment and it cannot call back into the browser environment.

I've released the above-mentioned API with v19.0.0. You can read more about it here. I hope this gives you the ability to attach files "post test" (albeit as part of the last step, as there are no "test scoped" attachments in Cucumber).

This is awesome! I'll need to test it out in the next week or so. Thanks for adding this

@badeball is there anyway to pass the current test details into this hook?

What do you have in mind specifically?

Well ideally the feature/spec and scenario/test names and whether the test has failed at that point.
I'm trying to attach logs (from cypress-terminal-report) along with screenshots/videos (I can't use the built in screenshot handler because I want to embed an html <img> tag referencing an s3 bucket where the images will ultimately reside) to the report.
For the logs and the videos I need to know the current Feature/spec.  For the screenshots the local file path is based on feature/spec, scenario/test and test failure state.
My current hack is a custom cy.task in a before hook which writes a file I can later read from in the onAfterStep hook.

Yes, that would be perfect

I've change the onAfterStep somewhat inv 20.0.0. It is now invoked with the above-mentioned parameters. It is no longer invoked with wasLastStep. It is also no longer invoked after scenario hooks.

I've changed the onAfterStep somewhat in v20.0.0. It is now invoked with the above-mentioned parameters. It is no longer invoked with wasLastStep. It is also no longer invoked after scenario hooks.

@badeball I've tested this and it is all working nicely, thank you.  A minor typo in your docs though: https://github.com/badeball/cypress-cucumber-preprocessor/blob/master/docs/merging-reports.md?plain=1#L24 should be:
... *.ndjson ... not ... *.ndsjon ...

A minor typo in your docs though:

Thanks for the heads up! I've fixed this with 29533f7.


Styling different from components page

Version<EMAIL_ADDRESS>Installing nativebase and not doing anything weird besides copying code from the components page gives me something that doesn't at all look like what the examples page shows.

class App extends Component {
  render() {
    return (
      <Container>
        <Content>
          <Card>
            <CardItem header>
              <Text>NativeBase</Text>
            </CardItem>

            <CardItem>
              <Body>
              <Text>
                Something totally not offensive.
              </Text>
              </Body>
            </CardItem>
            <CardItem footer>
              <Text>GeekyAnts</Text>
            </CardItem>
          </Card>
        </Content>
      </Container>

    )
  }
}

I think you should add a Header. The demo was for card and the card looks fine. You're missing the header.

@sankhadeeproy007 I had the header before, that's not the issue.
In any case, to me, the card does not look fine. Compare it to the gif and you'll notice the differences in margins.

@RWOverdijk You need to give padder prop to <Content>

Thank you. That helps.
Where are the docs by the way? I found some mistakes (missing commas etc)


Cannot read property 'length' of undefined in activity-object-collection.jade

My logs show 500 Internal Server Error for https://pump.strugee.net/alex/activity/pzFU2fl7QNGU7WRhgZJyxw:
/usr/lib/node_modules/pump.io/public/template/activity-object-collection.jade:1
  > 1| each object, index in coll.items
    2|   if index !== 0
    3|     | ,
    4|   //- TODO this is hacky

Cannot read property 'length' of undefined

This line solved that problem: https://github.com/pump-io/pump.io/pull/1463/files#diff-79688d3384d9dca1cb5ed823fabd6319R86


Implement multiprocessing

Acceptance criteria:

2 processes for altimeter reading, 1 process for reed switch reading, running constantly
Stop altimeter processes after reed process terminates or shutdown command is received
Join processes to wait for completion
perform end of flight actions

Investigate Process manager or pool to manage the processes and their return values