project crashed when execute vsgqtmdi and vsgqtwindows on Windows Platform

Platform：Windows11
Vulkan SDK：<IP_ADDRESS>
Qt SDK：5.14.2

Compile by using cmake gui. Crashed when execute vsgqtmdi and vsgqtwindows. The vsgqtviewer got a good performance. Is there any difference between single window and multiple window?
Here is the error screenshoot. It seems that crashed in vulkan present queue.

I only have Linux on my dev system right now so have run each of the 3 vsgQt examples and they all run fine and when I add -d to enable the Vulkan debug layer I don't get any errors.
The set up in vsgqtviewer uses the old initialize functions but otherwise use the same vsgQt::Window to do the rendering.
Could you try running vsgqtmdi and vsgqtwindows with the Vulkan debug layer enabled to see if that gives any more clues?
vsgqtviewer models/lz.vsgt -d
vsgqtwindows models/lz.vsgt -d
vsgqtmdi models/lz.vsgt -d

I only have Linux on my dev system right now so have run each of the 3 vsgQt examples and they all run fine and when I add -d to enable the Vulkan debug layer I don't get any errors.
The set up in vsgqtviewer uses the old initialize functions but otherwise use the same vsgQt::Window to do the rendering.
Could you try running vsgqtmdi and vsgqtwindows with the Vulkan debug layer enabled to see if that gives any more clues?
vsgqtviewer models/lz.vsgt -d
vsgqtwindows models/lz.vsgt -d
vsgqtmdi models/lz.vsgt -d

I run the program with vulkan debug layer, but there is no debug info on the command.
The "vsgqtwindows" goes fine at the beginning, but crashes in a few seconds.
Here are some screenshoot and the running video.

https://github.com/vsg-dev/vsgQt/assets/18171596/13a20174-7ef5-48ef-a894-5b2ab0fb94b1

The debug output is sent to the console so if you don't have that open perhaps you might miss it.  Another possibility is you must have Vulkan layers available for the driver to pick up.  The VulkanSDK will debug and API layers but you';ll need to set the VK_LAYER_PATH to their location.
On my Linux systems I have set it to the VulaknSDK location with thus:
$ export | grep VK
declare -x VK_LAYER_PATH="/home/robert/3rdParty/VulkanSDK/<IP_ADDRESS>/x86_64/etc/vulkan/explicit_layer.d"

Do you have any other hardware to test against? There is a chance the driver is an issue.
Could you also try the vsgwindows examples from the vsgExamples set?

The vulkan sdk is configured correctly on Windows. And the ogre-next engine can run normally with vulkan render system.

So the vsgqt may have some bugs when combine with Qt on Windows platform.
And I test the vsgwindows in vsgExamples. It runs fine.

The simple single window test in ogre-next is equivalent to vsgqtviewer test which doesn't produce any errors doesn't provide any additional insights.
Without a Windows system to test with right now I'm limited to make suggestions as what to try to see if we can reveal what the problem might be.
The Vulkan debug error being reported by vsgwindows may be helpful, though it's a bit odd, looking like an odd rule w.r.t minImageCount.  No one else has reported this so it may be you are the first to run vsgwindows with debug layer enabled, or your system has differences.  What hardware and drivers are you using?
Does vsgviewer models/lz.vsgt -d reported any errors?
FYI, I have just tested vsgwindows models/lz.vsgt -d on Kubuntu 22.04 system with AMD57000G and it works without any debug errors.
--
FYI, I recently rewrote vsgQt to use the VSG's Vulkan Instance/Device/Surface creation as Qt's Vulkan support turned out to be limited by forcing a vkDevice per Window, which would force us to duplicate all Vulkan state and data for each Window rather than share it between.  This is really dumb design decision from Trolltech, essentially they are throwing away the power and flexibility of Vulkan just to make it fit neatly within their own arbitrarily chosen boxes.
To implement proper multi-window support like the core VSG had already I had to ditch Qt's Vulkan support and just use Qt to create the Windows then pass the native Window handles to the VSG to wire up Vulkan.  This approach should allow the VSG to work with Qt without it's design/implementation limitations.  In the VSG Vulkan is the central to everything rather than an after-thought like it is with Qt so using VSG native functionality will likely always be several steps ahead of Qt's Vulkan support.
At this point I don't know what may be happening on the Qt/VSG integration on Windows on your system with multi-window, but it's early days for vsgQt and the multi-window support so while teething problem while unwelcome hopefully will just be temporary roadblock - we know the vsgwindow is mostly working cleanly save for the timeout oddity, so as long as Qt itself doesn't get in the way we should be able to get it to work.

I have got a stack trace from @timoore which gives a good starting place for me to investigate further.  I have a few ideas about the cause now so this afternoon will do a full code review and see if I can figure out a refactor of how the new frame is fired off that can prevent this contention.

@justZZY I have reordered the Window::render() so the requestUpdate() is done after the viewer frame is dispatched.  Could you try this change out - it's checked into vsgQt master. c2082dc1e765772eeee48994d61c403baf0271e0

@justZZY I have reordered the Window::render() so the requestUpdate() is done after the viewer frame is dispatched. Could you try this change out - it's checked into vsgQt master. c2082dc

That's great! It works perfectly. Thanks for your help :)

Curious.  @timoore also initially reported a crash on exit on Windows when testing the changes to Window:render() but I added debug info to see what might be happening and then he couldn't reproduce the problem.  The debug branch I created is:

There is a if (!viewer) check on the viewer pointer that should in theory prevent use of it when it's nullptr, so for that to fail then it suggests another thread is resetting the viewer pointer to null.
Could you post the whole stack trace in ascii rather than as a screenshot, Tim provided this to me last week and this what really helped me figure what cause the original issue.  Thanks.

There are all stack trace without Qt code.
vsgqtmdi.exe!vsg::Viewer::pollEvents(bool discardPreviousEvents) 行 135	C++
vsgqtmdi.exe!vsg::Viewer::advanceToNextFrame() 行 148	C++
vsgqtmdi.exe!vsgQt::Window::render() 行 177	C++
vsgqtmdi.exe!vsgQt::Window::event(QEvent * e) 行 201	C++

[外部代码]

vsgqtmdi.exe!vsgWin32::Win32_Window::pollEvents(std::list<vsg::ref_ptr<vsg::UIEvent>,std::allocator<vsg::ref_ptr<vsg::UIEvent>>> & events) 行 515	C++
vsgqtmdi.exe!vsg::Viewer::pollEvents(bool discardPreviousEvents) 行 135	C++
vsgqtmdi.exe!vsg::Viewer::advanceToNextFrame() 行 148	C++
vsgqtmdi.exe!vsgQt::Window::render() 行 177	C++
-vsgqtmdi.exe!vsgQt::Window::event(QEvent * e) 行 201	C++

[外部代码]

vsgqtmdi.exe!vsgWin32::Win32_Window::pollEvents(std::list<vsg::ref_ptr<vsg::UIEvent>,std::allocator<vsg::ref_ptr<vsg::UIEvent>>> & events) 行 515	C++
vsgqtmdi.exe!vsg::Viewer::pollEvents(bool discardPreviousEvents) 行 135	C++
vsgqtmdi.exe!vsg::Viewer::advanceToNextFrame() 行 148	C++
vsgqtmdi.exe!vsgQt::Window::render() 行 177	C++
vsgqtmdi.exe!vsgQt::Window::event(QEvent * e) 行 201	C++

[外部代码]

vsgqtmdi.exe!main(int argc, char * * argv) 行 177	C++

[外部代码]

On Mon, 31 Jul 2023 at 09:34, ZZY @.***> wrote:

There are all stack trace without Qt code.
vsgqtmdi.exe!vsg::Viewer::pollEvents(bool discardPreviousEvents) 行 135	C++
vsgqtmdi.exe!vsg::Viewer::advanceToNextFrame() 行 148	C++
vsgqtmdi.exe!vsgQt::Window::render() 行 177	C++
vsgqtmdi.exe!vsgQt::Window::event(QEvent * e) 行 201	C++
[外部代码]
vsgqtmdi.exe!vsgWin32::Win32_Window::pollEvents(std::list<vsg::ref_ptrvsg::UIEvent,std::allocator<vsg::ref_ptrvsg::UIEvent>> & events) 行 515	C++
vsgqtmdi.exe!vsg::Viewer::pollEvents(bool discardPreviousEvents) 行 135	C++
vsgqtmdi.exe!vsg::Viewer::advanceToNextFrame() 行 148	C++
vsgqtmdi.exe!vsgQt::Window::render() 行 177	C++
-vsgqtmdi.exe!vsgQt::Window::event(QEvent * e) 行 201	C++
[外部代码]
vsgqtmdi.exe!vsgWin32::Win32_Window::pollEvents(std::list<vsg::ref_ptrvsg::UIEvent,std::allocator<vsg::ref_ptrvsg::UIEvent>> & events) 行 515	C++
vsgqtmdi.exe!vsg::Viewer::pollEvents(bool discardPreviousEvents) 行 135	C++
vsgqtmdi.exe!vsg::Viewer::advanceToNextFrame() 行 148	C++
vsgqtmdi.exe!vsgQt::Window::render() 行 177	C++
vsgqtmdi.exe!vsgQt::Window::event(QEvent * e) 行 201	C++
[外部代码]
vsgqtmdi.exe!main(int argc, char * * argv) 行 177	C++
[外部代码]

Using google translate the [外部代码] looks to be [External code] which is a
bit odd to have in the middle of a stack trace, what is the reason for it
to be in there, are we looking at stack traces for different threads? Or is
the a single stack trace for a single thread and the [外部代码] can be ignored?

Message ID: @.***>

These external code are some qt functions ignored by visual studio automatically. And this is a single thread that external code can be ignored.

I wonder if the multiple windows are each in term being soured to redraw and invoke the viewer render.
Unfortunately I don't see this behavior under Linux so I can't put debug info in to see what might happen as the lower level event handling in Qt looks to be different w.r.t how it responds to poll events.
I will have a think and if I can I think of way to control the way that the events are triggering actions in vsgQt in a way that can handle the differences under Windows with multiple windows.  This may come to late for you to test today.

Ok, that's fine. I just a osg fan to learn the newest vsg.😃I hope that vsg can be better.

Are you pressing escape key or pressing the window close button to exit the application?

Are you pressing escape key or pressing the window close button to exit the application?

I click the window close button directly.

What happens if you press escape in one of the VSG windows?

@justZZY today I have been looking at ways to improve how vsgQt manages the rendering of new frames and to avoid all the windows competing to render new frames by introducing a new vsgQt::Renderer class that one creates and instance of to share between the vsgQt::Window.  Only the vsgqtmdi example has been updated to use this so far, but tomorrow if things look promosing I'll rewrite vsgQt to use this new approach and update all the examples.
As I don't have Windows I can't test out the new approach to see if it resolves the close issue you've been seeing, so could you check out the new ExperimentalRenderer branch to see if it behaves better?

I checked out the ExperimentalRenderer branch.  It can close normally most of the time by clicking the close button or pushing ESC keyboard with the log info below:
info: tick
info: render() doing rendering requests = 0
info: tick
info: render() doing rendering requests = 0
info: tick
info: render() doing rendering requests = 0
info: tick
info: render() doing rendering requests = 0
info: tick
info: render() doing rendering requests = 0
info: Window::exposeEvent(hideEvent* 000000AA7AFE9AE8)
info: Window::exposeEvent(hideEvent* 000000AA7AFE9AE8)
info: Window::exposeEvent(hideEvent* 000000AA7AFE9AE8)
info: Window::event(QEvent* e) QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed 000001FA36AC4340
info: Window::cleanup() 000001FA36AC4340, caller = Window::event() SurfaceAboutToBeDestroyed
info: Window::exposeEvent(hideEvent* 000000AA7AFE98B8)
info: Window::event(QEvent* e) QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed 000001FA3B39ECA0
info: Window::cleanup() 000001FA3B39ECA0, caller = Window::event() SurfaceAboutToBeDestroyed
info: Window::exposeEvent(hideEvent* 000000AA7AFE98B8)
info: Window::event(QEvent* e) QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed 000001FA3B39F240
info: Window::cleanup() 000001FA3B39F240, caller = Window::event() SurfaceAboutToBeDestroyed
info: Window::exposeEvent(hideEvent* 000000AA7AFE98B8)
info: Window::resizeEvent(QResizeEvent* 000000AA7AFEBE98)
info: Window::exposeEvent(QExposeEvent* 000000AA7AFEBE78)
info: Window::exposeEvent(QExposeEvent* 000000AA7AFEBE78)
info: Window::resizeEvent(QResizeEvent* 000000AA7AFEBE98)
info: Window::exposeEvent(QExposeEvent* 000000AA7AFEBE78)
info: Window::exposeEvent(QExposeEvent* 000000AA7AFEBE78)
info: Window::resizeEvent(QResizeEvent* 000000AA7AFEBE98)
info: Window::exposeEvent(QExposeEvent* 000000AA7AFEBE78)
info: Window::exposeEvent(QExposeEvent* 000000AA7AFEBE78)
info: tick
info: render() doing rendering requests = 6
info: Window::cleanup() 000001FA36AC4340, caller = Destructor
info: Window::cleanup() 000001FA3B39ECA0, caller = Destructor
info: Window::cleanup() 000001FA3B39F240, caller = Destructor

But it still can produce the close crash when click main window closing button sometimes.
There is the log info:
info: tick
info: render() doing rendering requests = 0
info: tick
info: render() doing rendering requests = 0
info: tick
info: Window::exposeEvent(hideEvent*<PHONE_NUMBER>6F69F8)
info: Window::exposeEvent(hideEvent*<PHONE_NUMBER>6F69F8)
info: Window::exposeEvent(hideEvent*<PHONE_NUMBER>6F69F8)
info: Window::event(QEvent* e) QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed 00000175EE988E60
info: Window::cleanup() 00000175EE988E60, caller = Window::event() SurfaceAboutToBeDestroyed
info: Window::exposeEvent(hideEvent*<PHONE_NUMBER>6F67C8)
info: Window::event(QEvent* e) QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed 00000175F00CE850
info: Window::cleanup() 00000175F00CE850, caller = Window::event() SurfaceAboutToBeDestroyed
info: Window::exposeEvent(hideEvent*<PHONE_NUMBER>6F67C8)
info: Window::event(QEvent* e) QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed 00000175F00CE3D0
info: Window::cleanup() 00000175F00CE3D0, caller = Window::event() SurfaceAboutToBeDestroyed
info: Window::exposeEvent(hideEvent*<PHONE_NUMBER>6F67C8)
info: Window::resizeEvent(QResizeEvent*<PHONE_NUMBER>6F8DA8)
info: Window::exposeEvent(QExposeEvent*<PHONE_NUMBER>6F8D88)
info: Window::exposeEvent(QExposeEvent*<PHONE_NUMBER>6F8D88)
info: Window::resizeEvent(QResizeEvent*<PHONE_NUMBER>6F8DA8)
info: Window::exposeEvent(QExposeEvent*<PHONE_NUMBER>6F8D88)
info: Window::exposeEvent(QExposeEvent*<PHONE_NUMBER>6F8D88)
info: Window::resizeEvent(QResizeEvent*<PHONE_NUMBER>6F8DA8)
info: Window::exposeEvent(QExposeEvent*<PHONE_NUMBER>6F8D88)
info: Window::exposeEvent(QExposeEvent*<PHONE_NUMBER>6F8D88)

It seems no trick info for the Window::cleanup() event. And it's strange at the crashing area. The _windows size is 0 but capacity is 3. May it's the reason that wrong window capacity caused error nullptr for window.

And when I add the window nullptr check: if (window && window->pollEvents(_events)) result = true;, there is no any error at the time.

Thanks for the testing.  I will review what you have posted and see if I can spot why it's still occasionally crashing.
The Viewer::_windows vector will have a size of 0 and capacity of 3 when all the windows have been removed, but at this point a for loop should exit immediately, it shouldn't attempt to step through the vector so it's odd that it looks like this is happening in your case and adding an if (_window would make a difference, as it should never get to this point.
This type of oddity usually happens when objects are being accessed in a multi-threaded way but as far as I'm aware code invoked from Qt's event loop should be single threaded.

I have figured out why the Viewer::pollEvents(..) is failing, the Win32_Window::pollEvents(..) is triggering Qt's event system somehow which then calls the vsgQt::event(QEvent*) SurfaceAboutToBeDestroyed which then removes the Win32_Window from the vsg::Viewer.
This does mean it's not a multi-threading issue which is at least a positive.
However, pollEvents is meant to be a passive collection of events, not something that triggers actions, so this breaks assumptions made in the vsg::Viewer::pollEvents() - that you collect the events than submit the events to even handlers that then separately take action.  One possible solution might be to disable the pollEvents for Windows that don't have ownership like in the case of vsgQt here Qt is provided the native windowing and the vsg::Xcb/Win32_Window.cpp is the interfacing with this.
To change this behavior will require modifications to vsg::Window to provide a hint as to whether the window should be polled for events. I'll reflect on this today as I refactor vsgQt to use the new vsgQt::Renderer.

I am part way through refactoring vsgQt to change how the events are handled, to hopefully resolve the issues on exit.  The code is still in development but should be good enough to see how things are working under Windows, the new functionality is checked into the Renderer branch: Renderer

I am part way through refactoring vsgQt to change how the events are handled, to hopefully resolve the issues on exit. The code is still in development but should be good enough to see how things are working under Windows, the new functionality is checked into the Renderer branch: Renderer

I checked into the Render branch, there is no any crashing now. Thanks for your workd.😊

Thanks for the testing, good to hear it's finally working.
I have done further refinements to this work and have merge all the changes with vsgQt master with this PR #30.
I will now close this Issue as I believe vsgQt master should now be working fine.


Show hidden fields on index

Hi,
Would it be possible to show hidden fields on index and give them a null value when they are missing?
/Tim

Yes this would be fantastic.


Pre-recorded-Media-Streaming issues

In the pre-recorded-media-streaming demo, when chrome opens a room and play a video, it crash when someone joins the room.
And if Firefox opens the room and play a video, there's no audio feedback, but it's sent to the others clients.

I also put the code into an electron environment, got this error line when trying to do a chrome to electron :
[6516:0707/140058.806:ERROR:rtpreceiver.cc(61)] AudioRtpReceiver::OnSetVolume: No audio channel exists.

I also put the code into an electron environment, got this error line when trying to do a chrome to electron :
[6516:0707/140058.806:ERROR:rtpreceiver.cc(61)] AudioRtpReceiver::OnSetVolume: No audio channel exists.

Hello!
Are you solved this problem?


Table named 'schema' not working in Dexie 3.

Hello,
Trying to update my application to Dexie 3 and noticed that it doesn't seem to support a table named 'schema'. Easy workaround was to rename the table, but might want investigate or list it in the breaking changes.
The error was along the lines of
"cannot set property schema of [object object] which has only a getter"

Ok. Does it help if you access it through ’db.table('schema')’ instead of just ’db.schema’?

A little more investigation this morning...
The full stack trace is:
ERROR Error: Uncaught (in promise): TypeError: Cannot set property schema of [object Object] which has only a getter
TypeError: Cannot set property schema of [object Object] which has only a getter
at new Transaction$$1 (dexie.mjs:2723)
at LocalDbService.Dexie._createTransaction (dexie.mjs:4053)
at tempTransaction (dexie.mjs:1278)
at Table$$1.push../node_modules/dexie/dist/dexie.mjs.Table._trans (dexie.mjs:1343)
at Table$$1.push../node_modules/dexie/dist/dexie.mjs.Table.put (dexie.mjs:1504)
This is after a table.put() operation in my code.
I get a reference to the table via the db.table('schema') method.
So my code looks something like this:
let table = db.table('schema')
...time passes...
table.put({ data })
error

Ok, thanks! Looks like a bug. I'll see if it can be easily fixed.


Variable Length file processing error

Describe the bug
Getting Exception while processing the Variable length source file , while using Cobrix
BDW headers contain non-zero values where zeros are expected (check 'rdw_big_endian' flag. Header: 196,197,0,12, offset: 0.
Code snippet that caused the issue
df= spark.read.format("cobol").option("copybook", "/cobrix/copybook/copybook.txt")\
        .option("record_format", "VB").option("is_rdw_big_endian", "false")\
        .load("/cobrix/data/datapath")
df.show()

Expected behavior
A clear and concise description of what you expected to happen.
Parse the copybook and variable length source files and display the results.
Context

Cobrix version:cobol-parser_2.12-2.6.2.jar
Spark version:3.1.1
Scala version:3.1.1
Operating system:Linux

Copybook (if possible)
            01  REPORT-TAPE-DETAIL-RECORD.
           02  VXT-REC-CODE-BYTES.                                      00000130
               03  VXT-REC-CODE-KEY              PIC X.                 00000140
               03  VXT-REC-TYPE-CONTROL          PIC X.                 00000150
01.021         03  VXT-XFER-KEY.                                        00000160
01.021             04  VXT-NO-POST-REASON        PIC S9(3)V      COMP-3.00000170
           02  VXT-SPECIAL-ACCT-BYTES.                                  00000180
               03  VXT-SC-1                      PIC X.                 00000190
               03  VXT-SC-2                      PIC X.                 00000200
               03  VXT-SC-3                      PIC X.                 00000210
               03  VXT-SC-4                      PIC X.                 00000220
               03  VXT-SC-5                      PIC X.                 00000230
               03  VXT-SC-6                      PIC X.                 00000240
               03  VXT-SC-7                      PIC X.                 00000250
               03  VXT-SC-8                      PIC X.                 00000260
           02  VXT-RPT-FULL-ACCT-NO.                                    00000270
               03  VXT-RPT-SYSTEM-BANK.                                 00000280
                   04  VXT-RPT-SYSTEM-NO         PIC XXXX.              00000290
                   04  VXT-RPT-BANK-NO.                                 00000300
                       05  VXT-RPT-PRIN-BANK     PIC XXXX.              00000310
                       05  VXT-RPT-AGENT-BANK    PIC XXXX.              00000320
               03  VXT-RPT-RECEIPT-NUMBER        PIC X(16).             00000330
           02  VXT-RECEIPT-CODE              PIC S9(3)V      COMP-3.00000340
           02  VXT-MRCH-FULL-ACCT-NO.                                   00000350

Source file  :
![image](https://user-images.githubusercontent.com/59495372/211696338-20165219-816c-433c-8db6-8088987d66ea.png)

Hi @sree018
I tried as you suggested but getting same below error.Kindly review and help me on this please .
Error Message :
java.lang.IllegalStateException: The length of BDW block is too big. Got<PHONE_NUMBER>. Header: 196,197,0,12, offset: 0.
at za.co.absa.cobrix.cobol.reader.recordheader.RecordHeaderDecoderCommon.reportTooLargeBlockLength(RecordHeaderDecoderCommon.scala:53)
at za.co.absa.cobrix.cobol.reader.recordheader.RecordHeaderDecoderBdw.validateBlockLength(RecordHeaderDecoderBdw.scala:86)
Current Code :
df  = spark.read.format("cobol").option("copybook", "/cobrix/copybook/copybook.txt")
.option("record_format", "VB").option("is_rdw_big_endian", "true")
.option("rdw_adjustment", "-4").option("bdw_adjustment", "-4")
.option("is_bdw_big_endian", "true").option("variable_size_occurs", "true")
.load("/cobrix/data/datapat").show()
Error Message :

The error message says that BDW and RDW headers should contain 2 zero bytes either at the beginning or at the end. This is not happening in your case. Are you sure your file has the record format of VB?
Can you post HEX of the first 10 bytes of your file?

Hi @yruslan ,
Based on TechDocument  which mentions as record length as "2868" , So tried with below fixed width option . But gives me
error .
.option("record_format", "F").option("record_length", "2868")
Error :
file:/cobrix/data/c1b_dmon/sourcedatafile_2022_09_27.TXT size (1932928) IS NOT divisible by 2868.
So then i decided with Variable records length option . But even that didnt help and gives error.
df = spark.read.format("cobol").option("copybook", "/cobrix/copybook/copybook.txt")
.option("record_format", "VB").option("is_rdw_big_endian", "true")
.option("rdw_adjustment", "-4").option("bdw_adjustment", "-4")
.option("is_bdw_big_endian", "true").option("variable_size_occurs", "true")
.load("/cobrix/data/datapat").show()
As you requested , i have provided image of the source file below , Kindly take a look and let me if i am missing something.
Thanks in Advance.
Screenshot :

I can't recognize neither RDW nor BDW blocks from the screenshot. So either is your file is in the fixed record length format (F), or it uses some other encoding to encode record sizes.
Also there is a possibility that the file has some header and footer that needs to be removed before treating it as a fixed record length. You can use 'file_start_offset' and 'file_end_offset' options to do that.
Also you can debug if you data is decoded correctly using '.option("debug_ignore_file_size", "true")'. But it will allow parsing only limited records from the beginning of the file (using .show(false), for instance). But will fail if you try to process the full file.
Unfortunately, I can't give you more specific advice. Before Cobrix can decode the data it needs a way of splitting the input file by records. And if it is in a non-standard format, you need to really understand how to do it. You can use custom record extractors if standard record formats do not work for you.

Hi Yruslan ,
thanks for your response .  i will try your suggestion and revert on this .
Could you help me with some examples related to custom record extractor ?  However i have below links that i am planned to review .
cobrix/examples/examples-collection/src/main/scala/com/example/spark/cobol/examples/parser/generators/
Thanks in advance .

Here is an example of a record extractor:
https://github.com/AbsaOSS/cobrix/blob/a62c136266d1e46b7ebb17e1de1b1f10d9a2d878/spark-cobol/src/test/scala/za/co/absa/cobrix/spark/cobol/mocks/CustomRecordExtractorMock.scala#L40-L40
Basically, it just implements the 'next()' method. You have input raw data as a simple stream of bytes, and your 'next()' method returns the next record as an array of bytes.
Input(byte stream):
abcdabcdabcdabcdabcdabcd

Output (records)
(abcd)(abcd)(abcd)(abcd)(abcd)

Hi @yruslan ,
I tried using option("debug_ignore_file_size", "true") , it able to parse the files , but the format in dataframe doesnt have proper structure . ( Records are not loaded correctly in to dataframe) . I have used below syntax
df = spark.read.format("cobol").option("copybook", "/cobrix/copybook/copybook.txt")
.option("debug_ignore_file_size", "true")
.load("/cobrix/data/datapath").show(3)
Also I came to know that, file record length is not fixed and it varies based on one of the column's value.
I have a scenario , where file record size  is of variable length.
File recrod has Base Segment ( which is constant of 583 bytes ) + Variable Segment ( Based on RDT-NO-POST-REASON value in Base Segment )
In More detail :
Base Record :
583 Bytes ( From 0 Bytes to 583 Bytes )
Additional Segment :
From 584 bytes - 5636 bytes.
(REPEATS 0-99 Times , Each 50 Bytes Length , Based on value of RDT-NO-POST-REASON)
RDT-NO-POST-REASON is column of Integer in Base Segment.
For Example :
Record #1 example:
BaseSegment : 583 Bytes
Value of RDT-NO-POST-REASON = 0 , so AdditionalSegment is 0.
Additonal Segment : None
Total Record Byte length : 583 Bytes + 0 => 583 bytes
Record #2 example:
BaseSegment : 583 Bytes
Value of RDT-NO-POST-REASON = 1 , so AdditionalSegment is 1.
Additonal Segment : 50 Bytes ( Additional segment is 50 Bytes each )
Total Record Byte : 583 Bytes + 50 Bytes => 633 Bytes
Record #3 example:
BaseSegment : 583 Bytes
Value of RDT-NO-POST-REASON = 10 , so AdditionalSegment is 10.
Additonal Segment : 500 Bytes ( 50 Bytes * 10  )
Total Record Byte : 583 Bytes + 500 Bytes => 1083 Bytes
So Based on AdditionalSegment , Record ByteLength can ranges from 583 to 5636 Bytes.
Kindly help me,if such file process can been handled by Cobrix ? if so , Kindly share how this can be handled and suggestions on this.
Kindly review and let me know . Thanks in Advance.

You can try adding the variable segment field to the end of the copybook as with something like
      02 SEGMENT GROUP OCCURS 0 TO 100 TIMES DEPENDING ON RDT-NO-POST-REASON.
         03 PAYLOAD PIC X(50).

and add this option:
.option("variable_size_occurs", "true")

@baskarangit
I received similar file from Fiserv system and able parse it in our systems.
file characteristics
record_format=VB
is_rdw_big_endian=true
rdw_adjustment=-4
bdw_adjustment=-4
is_bdw_big_endian=true
variable_size_occurs=true
I found a  copybook which similar to your copybook description. Please see copybook in issue :259
If you have any questions regarding your file,
please reach me<EMAIL_ADDRESS>

Hi @yruslan , thanks for adding my scenario as part of new idea in your board. I
Hi @yruslan / @sree018 ,
I have updated my copybook with DEPENDING keyword as below , but it gave me different error.
Existing Copybook :
1.034A     02  VXT-ADDL-DATA-GROUP.                                            00002510
1.047B         03  VXT-ADDL-DATA      OCCURS 99 TIMES.                  00002520
1.034A             05  VXT-ADDL-SEG-KEY.                                            00002530
1.038A                 10 VXT-ADDL-SEG-KEY-PROD  PIC X(02).             00002540
1.038A                 10 VXT-ADDL-SEG-KEY-TYPE  PIC X(01).               00002550
1.038A             05  FILLER                    PIC X(47).                                00002560
Update Copybook :
1.034A     02  VXT-ADDL-DATA-GROUP.                                     00002510
1.047B         03  VXT-ADDL-DATA  OCCURS 0 TO 99 TIMES
DEPENDING ON VXT-ADDL-SEGS-NO.            00002520
1.034A             05  VXT-ADDL-SEG-KEY.                                00002530
1.038A                 10 VXT-ADDL-SEG-KEY-PROD  PIC X(02).             00002540
1.038A                 10 VXT-ADDL-SEG-KEY-TYPE  PIC X(01).             00002550
1.038A             05  FILLER                    PIC X(47).             00002560
Error message :

Regarding the error. What is your code snippet (spark.read...)?
Regarding multiple record types. Please, elaborate.


Appending a caption is not visible on shorter browser windows

I'm using #17 to add a custom caption to a Lity instance. However, the dynamic max-height on the img element is not accounting for appended content. This causes issues where shorter browser windows (like a mobile device in landscape) cuts the caption off. Attached a gif for an example.
Any thoughts on how to correct this?

Do max-height: calc(100% - 20px); -- 20 px is an example for the caption height.
By the way, this question is probably more suitable to StackOverflow than here :wink:

@liltinkerer Thanks for the reply! I thought about using calc(), but the caption could be any length. Especially as the browser shrinks in width the caption will wrap any number of lines. So I think that's too unpredictable for the use-case.
I also thought the question was more relevant here in case it led to a change in the codebase and someone wanted to note this issue in a PR or something.

If I understand correctly, it didn't lead a change in the codebase in a sense the caption is possible to add thanks to callbacks.
But anyway, you can get the height of the caption and subtract it from another element.
var caption_height = $lightbox.find('p.caption'').height();
Then find the element you want to change and subtract caption_height :+1:

the caption is possible to add thanks to callbacks.

Fair point! I remember the author saying caption support would not be a native feature. I'll see if there's a way to calculate this dynamically!


adding support for pkcs8 encrypted key

Adding support to PKCS8 encrypted keys
Keys can be exported using the following: openssl pkcs12 -info -in keystore.p12 -nocerts -nodes -out key.pem

@gui1207 - many thanks for your pull request, I have incorporated this (with a couple of other changes) into release 1.0.1.


SafeAccountConfig not exported in v2.0.0

SafeAccountConfig is not available in v2 release.
Kindly update Readme accordingly

SafeAccountConfig is exported and can be imported like this:
import { SafeAccountConfig } from<EMAIL_ADDRESS>


New version on rubygems. Please.

Please, can you release new version on rubygems?
I need Faker::String.

We're working on it. The last thing we need to do is mark deprecations.

I'm going to work on the deprecations today, and I'll post a status later on.

I just reviewed all the merged PRs and found this one. I'm going to revert these changes and deprecate the methods. After that I believe we should be fine.

Is it fine now to release? :smiley:

Maybe... do you want to double-check that all the deprecations are covered? :)

Sorry, I must have misunderstood the previous messages and related PR. I thought that had already been done.

As far as I know, it has been done, but I'd like to have a second set of eyes to go over all the changes to ensure we haven't missed any deprecations. I'm hoping to do that this week.

For what it's worth, I did a quick pass over the change log and couldn't spot any changes that clearly need deprecations.

Any updates on this?

Faker 1.9.0 has been released.


GRANT on MATERIALIZED VIEW not setting ACL properly

Version: Massive v.2.5.0, Postgresql v9.4.x, v9.5.x
Problem: Executing the following SQL via Massive (v.2.5.0) results in a properly constructed view, BUT a blank ACL.
Symptom:  When I execute a query on this view with the "MyReadOnly" role, I get a access violation: "permission denied for relation catalogview"
Additional: Executing the SQL via PSQL or a PGIII window works as expected. Queries run under "MyReadOnly" role succeed. ACL is populated as expected: "MyReadOnly=r/",
Also note that "MyReadOnly" role has been granted USAGE on the schema.
CREATE MATERIALIZED VIEW myschema.catalogview AS
     SELECT cid, body, search, search_category, search_keyword
     FROM myschema.mytable;

CREATE INDEX index_search ON myschema.catalogview USING gin(search);

ALTER TABLE myschema.catalogview OWNER TO "MySuperUser";
GRANT SELECT ON catalogview TO "MyReadOnly";

The JS code would be helpful here as well :) - thanks for a nice issue too!

Oh - also I should add that your view needs to be readable from the INFORMATION_SCHEMA query we do here: https://github.com/robconery/massive-js/blob/master/lib/scripts/views.sql
This means that whatever account you use to instance Massive needs to be able to read from this query.

You are familiar with the Javascript - you wrote it LOL. It's taken from your pg-auth repo. So maybe I should have filed over there come to think of it.
In builder.js -
exports.install = function(){
  var db = Massive.connectSync(dbConfig);
  var sqlFile = decideSqlFile();
  var sql = fs.readFileSync(sqlFile,{encoding : "utf-8"});
  return db.runSync(sql);

Confirmed that I'm a bozo. LOL. Can I blame it on the new puppy and lack of sleep?  Calling a function later in my SQL load that blew away the view and rebuilt it without granting access to the read.
Thank you for your patience! IOU - 1 largish beer.

LOL no problem! Glad its solved :).


Refactor CLI Enums to use clap::ValueEnum

This change automatically prints the possible values to the user in the help message

@tareknaser thanks, it's better. But actually would be great to implement slightly different logic for --id and --path options. I think we could remove --both and just allow typing -ip instead of -b, it seems to be more intuitive this way.

I think we could remove --both and just allow typing -ip instead of -b, it seems to be more intuitive this way.

Updated
Also, make this change for other CLI enums
Let me know if you want any change to the naming of parameters

Alright, I just noticed that ark-lib list has different options to set view mode:

--entry <ENTRY>      [possible values: id, path, ip]
-i, --entry-id
-p, --entry-path
We manually check if the user provided more than one of them and return an error in main.rs

Here are the changes I made to implement the structure you mentioned:

Completely remove --entry <ENTRY> option
-i or --id to only show ids
-p or --path to only show paths
-i -p or --id --path or -ip to show both

We will also refactor the CLI parameter processing to be handled within a method of the Command enum. This way, the code in main.rs can directly access the processed values.
Let me know what you think

@tareknaser

Here are the changes I made to implement the structure you mentioned:

Completely remove --entry <ENTRY> option

That's ok. I think --entry-id and --entry-path provide same convenience.

-i or --id to only show ids
-p or --path to only show paths
-i -p or --id --path or -ip to show both

Exactly what is needed, thanks.

We will also refactor the CLI parameter processing to be handled within a method of the Command enum. This way, the code in main.rs can directly access the processed values.

Do you want to do it in this PR or just create an issue for this moment?

I've discovered this minor issue:
$ ark-cli list -ip

57-2877975594@/tmp/test/57-2877975594
<EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS>
$ ark-cli list -ip

<EMAIL_ADDRESS>57-2877975594@/tmp/test/57-2877975594
<EMAIL_ADDRESS><EMAIL_ADDRESS>
The output is not deterministic... It can be important when the output is used in pipe, the user could run one command, then craft very specific commands which should work with the particular output. If it changes, then the user's commands would not function correctly since they rely on the order.
We have deterministic output when using list command without parameters:
$ ark-cli list

180179-1694990742
57-2877975594
106-699027850
57-2158444521

$ ark-cli list

180179-1694990742
57-2158444521
106-699027850
57-2877975594

Do you want to do it in this PR or just create an issue for this moment?

I have it implemented for this particular parameter (Command.entry()). We can implement it for other parameters if needed as well.
For example, I think we can implement it for Command::Render quality

The output is not deterministic

It appears to be not deterministic regardless of the flags provided. ark-cli list gave 2 different outputs in the example you mentioned.
Tracing this back, I don't think this is related to ark-cli. seems to have originated from ark-lib.
I suspect the reason for this is coming from ResourceIndex::provide() but I would have to spend some more time digging into it.

@tareknaser indeed, I didn't notice the ids starting with 57 swap places in the ark-cli list output.

@tareknaser Could you create the follow-up issues? Feel free to merge after conflicts resolution.

I rebased this PR on top of main but I think it needs another review because some of the changes here conflicted with changes from #27
In #27, a new formatting option ("link") was added for the output of ark-cli list. I kept the same logic here in this PR but moved command line parameters handling to cli.rs instead of main.rs

rebased on top of main but let's wait for https://github.com/ARK-Builders/ark-rust/pull/13 first to be merged and move this PR to ark-rust

Done in https://github.com/ARK-Builders/ark-rust/pull/25


Added the sub package medium

closes #228
I have added 3 modules to this subpackage. I have updated the required files. If there are any suggestions please do let me know like if there are any functions that can be added.

Hey @nikhil25803 is there anything else that I can add to make this more useful?


Can't find the (older ?) umsdk libraries corresponding to current sensapex-py package

ump = UMP.get_ump()
AssertionError                            Traceback (most recent call last)
 in
----> 1 ump = UMP.get_ump()
After going through the different v1 umsdk libraries, I am still getting the following error
AssertionError: SDK version v0.920 or lower required (your version is b'v1.001')
Although, I could not find the lower versions of umsdk (which seem to be split in the different ump-sdk and smx-sdk libraries ?)
Is this not yet supported or am I missing something ?
Thanks

Oh dear, it seems they stopped distributing the old ones. Yeah, that's a problem. You can grab the source code for umsdk and roll back to 9fd5cb6dda277de76355a40168cdc9b62160c946 and then build the file that way. Updating this wrapper to 1.010 would also be pretty easy; I'll try to get that done this week.

Ok so at least I caught this. Great if you manage to update the wrapper, I'm totally fine waiting for a few weeks, and I'm not comfortable enough with C libraries to easily build the file from earlier version of umsdk (especially on Windows, though it would be a good training).
Thanks !

Okay, I have versions on pypi that are compatible with 1.001 through 1.011 (use v1.011.0) and 1.021 (v1.021.0 on pypi).


Fix the link to the submodule 'sensor-types'

There is an error about a missing commit

Make it a folder instead of a submodule

Submodule has been deleted. There is folder now with the same name and location, better.


Address Sonar bugs

Address bugs listed here:
https://sonarcloud.io/project/issues?resolved=false&types=BUG&id=open-cluster-management_console

/cc @jeswanke

/cc @mark-nc


create gh-pages branch which tracks master branch

this will allow general-public to preview and test latest master-branch
at live web-demo: https://douglascrockford.github.io/JSLint/

jslint.com


renderRightButton example?

Hey, couldn't find any documentation or example on how to use renderRightButton and renderRightButtonStyle.
Could you please add some?

@vugman I believe you're passing in a RN component instead of a function that creates a RN component, i.e. sbould be something like this:
var createRightButton = function() {
return (

<Button style={{color: 'green'}}>
+

);

Ohhh thanks @ippy04 thanks for the help!

@aksonov Does this still work in 2.0.2? After updating, the button which used to be in the navBar is no longer there.

@andreasbhansen Thanks, should be fixed in 2.0.3

Thanks, @aksonov. Works fine now!


added Coursera Responsive  Code

🛠 Fixes Issue
Closes #593

👨💻 Changes proposed

Added responsive Code of Coursera Clone

✔ Check List (Check all the applicable boxes)

[x] My code follows the code style of this project.
[x] This PR does not contain plagiarized content.
[x] The title of my pull request is a short description of the requested changes.

📷 Screenshots
https://user-images.githubusercontent.com/77873383/170541814-3a5afb9f-216d-413a-83de-67f3a2cb5cf4.mp4

@gurjeetsinghvirdee please check


Display subnet info for project namespaces in Registry UI

Apps hosted in the Emerald Cluster had /24 subnet information generated for them at the time of provisioning namespaces as described in this document (IDIR protected). This information resides in Openshift as part of the namespace meta information. Product teams would like to see this information displayed on the product detail page in the Registry UI.
At this moment the information is only passed from the Registry app to the provisioner to Openshift. This feature requires building the second communication line where information can be passed from Openshift to the provisioner to the Registry app.
DoD:

[ ]  /24 subnet information is displayed on the product detail page in the Registry for Emerald namespaces.

https://digital.gov.bc.ca/cloud/services/private/internal-resources/emerald/
In the section How to find the internal CIDR /26 assigned to pods for my namespace there is a manual process to get the subnet assigned to a namespace after its created. It may be helpful if the Registry could connect to the Kube API and query this info and display it so product owners are able to easily find it without having to use the CLI.


Using Serial DMA for variable sized transfers

Hello,
I think this question might also be suited in a forum post.  I am using a STM32F3-Disco in my current project so I thought that I can also ask this here.
I am currently planning on how to perform variably sized transfers using DMA + IRQ + RTIC. According to some forum posts, this is definitely possible using the IDLE line or the Receiver Timeout IRQ by the USART peripheral. More specifically, I wanted to have one RTIC task which uses DMA to send all TX data, and one RTIC task to receive variable sized RX packets, which are only limited in their maximum size.
Unfortunately, I have not really found an example for this in Rust yet and I only have experience with variable sized transfers using a combination of FIFO + IRQ on a smaller Cortex-M0 based system. Most of the DMA based API I have found uses the read_exact API which uses a fixed buffer size.
I've looked around and experimented myself a little bit. I have found this code snippet: https://github.com/kalkyl/f303-rtic/blob/main/src/bin/serial.rs , which goes into the direction of what I require.
Some thoughts I had:

TX: is usually a little bit easier. I have a RTIC task which reads from a heapless queue or some other form of queue and sends any contained frames with DMA. My first approach would be to simply wait until the transfer is complete because I'd like to unblock the shared serial as soon as possible. The second approach instead uses a transfer complete IRQ, but then I am not fully sure how to access the USART peripheral without trickery or hacks just to read IRQ events, for example for pending RX
RX: I configure a receive timeout IRQ and then initiate a DMA transfer with the maximum expected packet length. When receiving a  recv timeout IRQ or a transfer complete, I stop the DMA transfer (for recv timeout) and restart a new one with the maximum expected packet length. I pass the read packet into a heapless queue or some other form of queue which is processed by another task.

Now, from what I have see from the STM32F3 HAL docs, this will not  be straightforward.
One problem is that I am forced to split the serial struct for DMA transfers, as the transfer struct takes ownership of the RX or TX part. This definitely makes sense, but I need the serial struct to check IRQ events . I could retrieve those using the join method, but that will never be possible because a DMA transfer for RX will practically be active permanently, and thus the RX part will always be unavailable, being cached in some transfer struct unavailable to the TX task. What is the common approach when facing a problem like that? One idea I had was to adapt the split function to return the USART peripheral so I can use it at my own peril for things like this.
Maybe someone has a better idea how to do this? Maybe there is also some other aspect I am forgetting here.. I checked the available interrupts of the STM32F303 again. I guess the core problem is that the interrupt register is used both for RX and TX, although some of the events can be checked independently for RX and TX..

Some idea

Maybe add a method called split_returning_periph  which returns the USART in addition to the TX and RX parts.
I simply use pac::Peripeherals::steal().USART? in my code
A bit fancier: I think I am only interested in the IRQ status register for determining stop conditions for RX DMA. One idea would be to have some helper structs like RxIrqStatus and TxIrqStatus which can be retrieved from the TX and RX transfer handles respectively. These registers are also read-only. These structs can then tell me what TX or RX specific events occured. That way, I don't have hack around the HAL like when using way 1 or way 2. The transfer structs still own the TX and RX handles so I still need to think how to solve this..

I was actually able to implement variable sized transfers in my RTIC application now and it seems to work well :-)
All I needed was some more access to some ISR registers.
I am thinking of preparing an minimal example where variable sized strings can be sent to the device and will be echoed back. I think this might be useful to other people, especially because it shows how to use DMA in combination with heapless and RTIC to set up an efficient and flexible UART Interface. If you are interested, I could prepare this after all necessary PRs were merged.


OneToOne / OneToMany / ManyToOne / ManyToMany relationship support?

@beberlei @EmanueleMinotto is there any plans to add OneToOne / OneToMany / ManyToOne / ManyToMany relationships support, like in Doctrine2 ORM http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html ?
I think it would be very handy to be able to use same entity class with several mappings (ORM and KeyValue) instead of creating multiple domain classes just for several storages with 90% similar structure.
Because right now I don't see easy solution on how to use existed Entities (which has OneToSomething relationships and are persisted with Doctrine 2 ORM) in conjunction with this library.

That's... Not what a key-value storage is for. We'd be building the wrong abstraction around the wrong technology.

@Ocramius why? I don't see any issues with that approach.
Redis, for example, is hell-fast, and I'd rather prefer to use it as a persistent storage for high-frequency changed data, instead of bumping MySQL/PGSQL/whatever-sql through Doctrine2.
Lets consider classic Book-Author example with 1:* relationship - l don't want my domain-level layer to be involved into knowledge like "oh here we have entity class Book (SQL persisted) and entity class BookCache (KV persisted), then Author and AuthorCache (and 533 other invariants) so lets mess up with all that".
Instead I need one single Book and Author entity class, which will be "storage-agnostic". Then they have all required mapping (annotations, yml, xml, whatever) for both SQL an KV persistence. Then client code will work with that objects in same way, no matter where do we save them after.
Risk: I only have to handle "invalidation" routine for KV layer and use it mostly as a "view layer", so all updates should be done in pair with SQL insert/update operations.

@k-vladyslav if speed is your ONLY concern, the ORM's L2C solves that issue without making people add unnecessary logic on their side and invalidation is handled as bonus.
If you really want to optimise things for reading, you should have a different model for that. In this case, your read models will have everything you need to display a resource (with a single query) and that basically invalidates your suggestion of adding associations. And that is a use for this library.

@lcobucci that is actually obvious and simple solution, which I could implement even w/o this library :) But that is boring way as for me. Here are some drawbacks of that solution:

Describe how would You map Book : Author relationship to the plain single DTO/Value Object gracefully if relationship is 1:n?
If You suggest to have BookCached and AuthorCached that means violation of some code smells. Having classes created just because of storage purpose and not for Domain Model? I'd prefer not doing that.
Lets say I use 5 different storages (its common for big products, look for polyglot persistence, M. Fowler) - U'd suggest me to have 5 different models for each domain class for sake of each storage? Eh, no, I think there might be another way :)

@lcobucci thanks, I think there is no better solution (nowadays) than L2C for me.

@k-vladyslav glad to know that I helped in someway. It's just important to mention that I didn't meant that you should create the same model for different storages, I was merely referring to things like CQRS where you have two different models: one optimised for writing and the other for reading (regardless on the way you store things). You could even go further and talk about event sourcing and stuff.
However, I think this goes WAY beyond this issue. Having that said, could we close it?

@lcobucci pretty much, thanx for time, I closed that.


Convert_variables_to_constants return None after import

System information

Have I written custom code (as opposed to using a stock example script provided in TensorFlow):
Yes, minimal example below
OS Platform and Distribution:Linux Ubuntu 16.04
TensorFlow installed from (source or binary): using pip3
TensorFlow version (use command below): git version: v1.8.0-0-g93bc2e2072 tf version 1.8.0
Python version: 3.5.2
CUDA/cuDNN version: not using (because of old GPU)
GPU model and memory: geforce 265
Exact command to reproduce:

Convert a graph using tf.graph_util.convert_variables_to_constants
Import resulting graph using tf.import_graph_def
Eval the variables you want
(4. you get "None" on eval)

The problem
After converting variables to constant
Importing the graph_def resulte in a graph that always eval to None
# minimal testing
with tf.Graph().as_default() as graphy:
    with tf.Session() as sessy:
        # declaring placeholder
        place_holder = tf.placeholder(dtype=tf.float32,shape=[3])
        tmp_feed = {place_holder:[1,1,1]}

        # declaring vars and outputs
        rand = tf.random_uniform([3])
        the_var = tf.Variable(rand,name="the_var") # depend only on var
        out = tf.add(the_var,place_holder, name="the_result_node") # depend on var and placeholder
        out2 = tf.multiply(place_holder,2.0, name="the_place_holder") # depend only on placeholder

        # getting names of outputs & vars
        out_tensor = [the_var,out,out2]
        out_names = [t.name.split(":")[0] for t in out_tensor]
        var_names = [place_holder.name.split(":")[0]] # setting place_holder as blacklist as it must not be replaced by a constant ( doing this or not doesn't change result)

        # doing a first run to get a run comparison
        sessy.run(tf.global_variables_initializer())
        for t in out_tensor:
            print("first eval",t.name,sessy.run(t, feed_dict=tmp_feed))

        # freezing the graph
        frozen_graphy = tf.graph_util.convert_variables_to_constants(
                                                sess=sessy,
                                                 input_graph_def=graphy.as_graph_def(),
                                                 output_node_names=out_names,
                                                 variable_names_blacklist=var_names)
        print("freezing done, exported:", out_names)

        # session has been closed seemingly by the convert

    # eval to check if the graph was actually modified. < return different values >
    with tf.Session(graph=graphy) as sessu:
        sessu.run(tf.global_variables_initializer())
        for t in out_tensor:
            print("second eval of graph1",t.name,sessu.run(t, feed_dict=tmp_feed))

#print(frozen_graphy) # just checking what it look like

prefixe = "frozen_import"
with tf.Graph().as_default() as grapho:
    with tf.Session() as sesso:
        print("importing frozen graph vars:", out_names)
        out_list = tf.import_graph_def(frozen_graphy,return_elements=out_names,name=prefixe)
        print("outlist:",out_list)

        # creating the feed dict for the placeholder
        input_name = prefixe+"/"+var_names[0]
        frozen_feed_dict={input_name+":0":[1,1,1]}

        # second eval to compare < return None >
        sesso.run(tf.global_variables_initializer())
        for t in out_list:
            print(t.name," =",sesso.run(t,feed_dict=frozen_feed_dict))

        # eval of placeholder: < return its value >
        p_h = grapho.get_tensor_by_name(input_name+":0")
        print(p_h.name, sesso.run(p_h, feed_dict=frozen_feed_dict))

And I checked a bit the output graph_def a bit, it does seem to hold the values of the variables:
node {
  name: "the_var"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_FLOAT
        tensor_shape {
          dim {
            size: 3
          }
        }
        tensor_content: "\344\336:?<\306\223>4\231@?"
      }
    }
  }
}

@svgoogle: Can you take a look at this?


Update code formatting guidelines

Push formatted code

Resolves #930

As a general comment, I think that fixing https://github.com/spring-cloud/spring-cloud-stream/pull/955#discussion_r116039877 should also be accompanied by the reversal of the formatting changes which are also part of this PR.

@mbogoevici Updated the rule to use join_wrapped_lines to false. But, the reformatting after changing the rule doesn't pick up any changes in the files. Do you see any files that still have incorrect formatting?

But, the reformatting after changing the rule doesn't pick up any changes in the files.

Not sure I get that. We should just revert the changed files. I suppose I can do that on merge.

We should just revert the changed files

Do you mean all the files that are changed as part of this PR? I believe we still need to apply the code formatting changes for the files based on the updated formatting rules.

I believe we still need to apply the code formatting changes for the files based on the updated formatting rules.

We need to reapply the updated formatting rules on the original files. Reapplying the rules after the first commit will preserve the formatting changes that we don't want (joining the lines).

One thing that we should do is to move the eclipse folder at the top level. It's easier to point to and the eclipse configuration files don't need to be included in the tools jar. WDYT @ilayaperumalg  ?

@mbogoevici yeah, that's better too. will fix that now.

Squashed, rebased and merged as https://github.com/spring-cloud/spring-cloud-stream/commit/bd002e4aaf05f2f4e31cb09d706910b470f960a3


Refactor of the cli

Refactored the cli in order to make sure that each command (including its help message) is entirely implemented within a single class.
The base of all the cli commands is the CliCommand class. Each implementation must have a name, and defines the command and parameters of the command by specifying the values passed to getopt, which is the default behavior of the parse_args method; alternatively, the parse_args method could in principle be overridden to define an arbitrary other way of parsing the parameters.
The Cli class is the actual runner of all the commands. It provides a decorator that is applied to each command class to register all the commands. The decorator also does some basic sanity checks on the correctness of the subclass.
For each command (subclass of CliCommand), the docstring is exactly the text that is shown by the help command for it.
Moreover, the show_help function now generates the list of commands by parsing such docstring for each command. For this to work, the line containing "NAME:" in the docstring must be present and properly formatted. If that fails for any command, show_help will raise an error; a test was added to make sure that show_help does not raise.
Closes: #203

Should have addressed most of the requested changes.
Renamed main to run so the entrypoint is consistent with the teos and the client, rather than fixing setup.py.
I added some tests for the CLI class; basically they are just mocking the rpc_client and checking that it is correctly proxying requests there. If the behavior of the CLI becomes more complex, it might make sense to remove all the sys.exit() calls from the CLI, and instead use return values (or errors) to detect various conditions; for now, it didn't seem worth it.
There are no tests for the code inside run() yet; it could make sense to also refactor the argument parsing inside a method in order to make it testable. Let me know if you think it should be done before merging this one, or I'll open a new ticket.

Opened a separate issue #245 for the RPCClient. Not super urgent imho, as most of the commands just proxy to the actual rpc, so not a lot to test there. Might be more interesting to have fully end-to-end tests where some commands are done via the cli.
I suppose some more testing could be done for CLI.run (especially failure cases), but all the tests for commands are actually calling CLI.run that dispatches to the command; therefore the positive case is tested. To test the failure cases, I suppose we should refactor it so that the sys.exit is not called from within CLI.

I think #245 could be tackled here. May even be worth also adding the sys.exit bit so we can add proper testing to the whole thing.
This would need squashing btw. I would suggest current code can go in one, given it is pretty self contained, and test in another one. The sys.exit bit could go in a separate one since it builds on top of the code improvements.

I was getting lost with trying to get a meaningful history, so I instead squashed all the work on tests into 6f03da7d453f7206d6a36dc09832d7d33e572139, including the previous changes from PR review.
About the comments in the review:

In cli_e2e, you could have a global variable keeping track of what has been sent to the tower, so you could later check that the data queried to the tower is correct (in test_get_tower_info for example). Since this is being kept track by global variables, it should work no matter if the tests are run independently or as a suite.

The numbers for n_watcher_appointments and n_responder_trackers can easily be tracked only if at the end of each test you make sure that all the appointments go back to zero, as they change when appointments are triggered or expire; hard to keep track reliably imho and it makes the code of tests hard to track. We could track n_registered_users, but currently I'm just registering one user anyway (and to make sure the correct answer is "1", we would have to register the user within test_get_tower_info as well (or rely on other tests calling it before, while now each test in test_cli_e2e can be successfully ran individually.
Tbh, I'm also generally uncomfortable with using global variables in tests, unless they are basically constants for the whole module.
If there is any changing state, it should be encapsulated somewhere, and not managed from within tests, as that makes tests very hard to follow.

Also in cli_e2e, since you are registering users to check they are in the tower response once queried, why not check they are not there before the registration (for completeness basically).

The registration is done with teos client, not with the cli; so I think this test would be out of place in cli_e2e.


delete crates when they are deleted from the index

using the changes from https://github.com/Byron/crates-index-diff-rs/pull/15
also upgrades rustwide and git2 since crates-index-diff the includes release includes an update of libgit2
adaptions due to rustwide changes in  https://github.com/rust-lang/rustwide/pull/65

r? @jyn514 @Byron
@pietroalbini also gave me examples where we deleted specific versions, not the full crate. But since there is an upcoming batch of crate-deletes coming I finished this up first.
I will add handling version-deletes separately.

@Nemo157 do you have time for a "full" review?
Or was this the only comment and we could go forward when I add the logging?

IIRC that was the only thing that stood out to me when I skimmed it. I can take another look later today.

r? @Nemo157 I added the log-message now

This looks good to me, but we should be careful about deploying this - if we notice crates being deleted that shouldn't, let's revert the release.

Yep, we definitely should watch this. I would watch it for a day after I probably deployed it.
@jyn514 or do you imagine another notification? A sentry / warning message? We don't have log aggregation with filters / alerts anywhere, right?

We don't have log aggregation with filters / alerts anywhere, right?

Not that I know of :( right now you just have to look at the systemd logs in prod.

I think it's ok not to have additional alerts - the worst that happens is we have to rebuild a bunch of crates, which isn't the end of the world.


v0.7.0 - Stable Release

Current coverage is 49.69% (diff: 47.07%)

Merging #239 into master will decrease coverage by 1.54%

@@             master       #239   diff @@
==========================================
  Files           183        191     +8
  Lines          2609       2813   +204
  Methods         579        648    +69
  Messages          0          0
  Branches        415        449    +34
==========================================
+ Hits           1337       1398    +61
- Misses         1272       1415   +143
  Partials          0          0

Powered by Codecov. Last update 806a88e...1d6efa5


FirebaseExtended/flutterfire CI should use analysis_options.yaml

Right now we are ignoring analysis_options.yaml. Running lint checks on CI will help us get the plugins ready for Flutter Favorite. However there will be some work required in order to get this ported over.
See https://github.com/flutter/flutter/issues/46808

My comment on the related issue also applies here.

could you link to an instance where it appears that CI is ignoring this file? In my testing I remember being blocked in multiple PRs based on analysis failures from the analysis_options.yaml, so I'd be really surprised if we weren't using it at all. I think it's probably more likely that there's a specific issue with it being applied to a particular package somehow.
ETA: packages that were already failing lints in the root analysis_options.yaml have their own sub analysis_options.yaml excluding them from the global linter rules that they're already failing. Most plugins were failing public_member_api_docs, and there's been a long tail of work cleaning them up: flutter/flutter#45440. It could be that the failure to alert that you're seeing is from this?

I think that's right, thanks for looking into it.


How do you bind to the onUpdate event in a vue instance?

Can you link the example here once you've added it?
Maybe one where you send the array of (data) attributes to an endpoint.


Serin Issue

I am attempting once again to use the Serenity template on Windows. I have up-to-date versions of Typescript, nodeJS and .net core framework. The following error is repeatable. Any help would be appreciated.
PS C:\Serene> cd SereneCore
PS C:\Serene\SereneCore> serin
Welcome to Serene Initializer!
Reading latest template version from VSGallery...
You already have a cached copy of latest version.
Enter a project name (press enter for Serene1)?
Creating solution Serene1
Creating project Serene1.Web (using Serene.Core\Serene.Core.vstemplate)
Restoring packages for Serene1.Web
Restoring packages for C:\Serene\SereneCore\Serene1.Web\Serene1.Web.csproj...
Restore completed in 102.97 ms for C:\Serene\SereneCore\Serene1.Web\Serene1.Web.csproj.
Generating MSBuild file C:\Serene\SereneCore\Serene1.Web\obj\Serene1.Web.csproj.nuget.g.props.
Generating MSBuild file C:\Serene\SereneCore\Serene1.Web\obj\Serene1.Web.csproj.nuget.g.targets.
Restore completed in 1.98 sec for C:\Serene\SereneCore\Serene1.Web\Serene1.Web.csproj.
events.js:167
throw er; // Unhandled 'error' event
^
Error: shutdown EPIPE
at ReadStream.Socket._final (net.js:370:25)
at callFinal (_stream_writable.js:612:10)
at process._tickCallback (internal/process/next_tick.js:63:19)
Emitted 'error' event at:
at ReadStream.onerror (_stream_readable.js:690:12)
at ReadStream.emit (events.js:182:13)
at emitErrorNT (internal/streams/destroy.js:82:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:50:3)
at process._tickCallback (internal/process/next_tick.js:63:19)
PS C:\Serene\SereneCore>

sorry for asking, but why dont u just download VS Community version and get whole thing via UI ?
worked like a charm back in my day (especially on Windows)

In fact, I already tried that approach with VS Professional 2017 in the creation of the project just hangs, so I thought that I would try this approach instead.

Sorry, can't reproduce this, should be something related to your environment

@ebekker
I am having the same issue!!
Did you solve this?

Sorry no, I stopped pursuing it.


using cesium 1.62 release

Is it possible to use release 1.62 of cesium with resium? We're using resium with typescript and cesium installed via craco-cesium. We're interested in using the new EllipsoidGeometry elements. Using CZML definitions would be fine, we wouldn't necessarily need an element wrapper for it. If so, would it be just a matter of updating the cesium version on npm or would more changes be required from the resium point of view?

In Cesium v1.62, new properties are added to Cesium's object, so we have to update Resium to add these properties to the components.
I'll update Resium as soon as possible.

Resium v1.8.0 has been released now. Try it!


Issue with ES6 module bundler Rollup

When converting commonJS modules to ES6 modules using Rollup, the name of generated bundle and document instance is clashing. To avoid that I name spaced use of document instance.
I am using following with Rollup:

var commonjs = require('rollup-plugin-commonjs');
var replace = require('rollup-plugin-replace');

The issue in rollup-plugin-commonjs was just fixed, so you can probably close this

Thanks Rich-Harris, rollup rocks.


TargetHeaterCoolerStateCharacteristic: Error parsing state Error: Unsupported API value: 6

LG Air Conditioner Model
LSN090HSV5 / RAC_056905_WW
Describe the bug
I get this error when the AC is set to Auto. When I set HomeKit to Auto, the AC switches to Fan.
Symptom check

Does your unit appear in the Home app? Yes
Is the current on/off state, temperature, and mode being reported? Yes - except for mode having fan/auto reversed per above
Does your unit respond to the controls? Yes

Same symptoms for model LG model LW1517IVSM
Additional parsing issues that may be relevant:
[06/06/2021, 11:11:50] [LgThinqAirConditioner] TargetHeaterCoolerStateCharacteristic: Error parsing state Error: Unsupported API value: 8
[06/06/2021, 11:11:50] [LgThinqAirConditioner] CurrentHeaterCoolerStateCharacteristic: Error parsing state Error: Unsupported API value: 8

Same symptoms for LG model LW1017ERSM. Today was the first I saw it, so I don't know for sure what triggered the issue. I went into Settings and changed the refresh interval to 1 a day instead 1 a minute. Everything seems to work currently, but the Error makes me concerned.

Unfortunately right now, there isn't a good way to detect whether a product support true "auto" mode or not, HomeKit doesn't support a fan-only mode for A/C units, and the RAC_056905_WW identifier is shared among units which do and do not have true "auto" support
This will have to be fixed in a future version which adds better feature auto-detection


Allow empty password in Finagle Mysql client

finagle-mysql allows empty passwords, which is not possible in quill's finagle
client. With this change, if the password is missing in the configuration, we
initialize the client with a null password.
Change in finagle 6.31.0:
https://github.com/twitter/finagle/commit/fde15f447cf1cab92e893b8fbf8f9378c6d9f00a

@pimeys Thanks for the contribution! LGTM.
I'm checking why the CI is failing, it's not related to your change.


Change Hit Windows/Arrows Hitboxes values w/ Lua

Describe your problem here.
Hey, I wanted to ask if anyone knows how to change the Sick/Good/Bad Hit Windows and Safe Frames values (From the Gameplay Settings) with some .lua stuff for a Song in PE's latest version
Are you modding a build from source or with Lua?
Lua
What is your build target?
Windows x64
Did you edit anything in this build? If so, mention or summarize your changes.
No

Could you please be more specific?

Okay, let's say I want to make a troll song where the arrow hitbox is small af so you gotta be even more precise to hit the notes
Isn't there anything like setProperty or setPropertyFromClass to change the Arrow Hitboxes?

#13418

#13418

I meant the values in
https://github.com/ShadowMario/FNF-PsychEngine/blob/65494a3375fbceb5d74cfd2231ba668790842a4f/source/backend/ClientPrefs.hx#L72
Like is there a way to change the sickWindow, goodWindow, ect?

Okay I'm going to close because I just found out


feat: adding golint and a Makefile

Added a Makefile that includes tests for golint, ineffassign, gosec, gocov, etc.
Adding coverage.yml to ci for gocov
Added golintci-lint.yml to ci for golint
Updated a test so it would pass gosec check

There are some conflicts. Remember to get your branch updated 😉

Looking forward to a more uniform codebase with conventions to follow. Let's get this in.

I believe this is obviated by https://github.com/tmc/langchaingo/pull/42


Rising Code Coverage for Disco to 100%

This PR covers one step of #94: Getting 100% code coverage. I also made a few tests stricter.
During my work, I realized, that in its integration, there is still a possible unreachable code in Disco. In BeanMethod::generateMethod(), there is a else-block which can be tested when it is handled as a unit.
The method itself is only used in ConfigurationGenerator at line 167. But before it's invoked, the same checks as in BeanMethod::generateMethod() are also done in ConfigurationGenerator, which happens at line 150. It looks like the BeanMethod::generateMethod() else-block never can be reached during Disco's runtime.
Should I remove the else-block and its newly added test?

Coverage decreased (-1.1%) to 94.491% when pulling 56adf76cdd671a5c90b4c5adbf6a36758f761ae0 on SenseException:coverage into 098ff1130cf21f031dec71239e29259a4f6c9f55 on bitExpert:master.

I know about the code duplication and to be fair I was not sure how to properly solve it. On the one hand I want to fail as early as possible and have all checks in one place but on the other hand it felt odd to not check the type in then BeanMethod in case someone would use the code in a different context.
If you ask me, I would prefer to remove the check in ConfigurationGenerator and leave it in place in the BeanMethod class. What do you think?

In that case, I'd move the InvalidProxiedClassException to BeanMethod::generateMethod() instead of creating the BeanException-body in the else-block, in case BC is important. Creating the Proxy-Method seems to be a part of the unit, that is ConfigurationGenerator::generate(). Checking the types is only relevant for $proxyMethod, so I agree with your thought about having those checks in BeanMethod.
Also, $beanType in  BeanMethod::generateMethod() can only be a string, which is why we can add a string-cast to the method.

Sounds good to me.

Are you done with the PR? Can I merge it or do you want/need to add anything else?

I moved the beanType logic to BeanMethod::generateMethod() yesterday evening. It should be ready to merge if you're okay with my changes.

Manually rebased and merged. Thanks for your contribution!

Looks like some of the changes were not merged or the merge went wrong. ConfigurationGenerator still has code that was moved into another class by this PR.

Bummer. Thanks. Looks like the rebase & merge resulted in duplicate code. Will check. Thanks for spotting the error.


fixes package for Meteor 2.3 and Meteor 3.0

passes all tests for meteor 1.12.1, 2.3, 3.0.3

Hey! Thanks for the reply.
To be honest I copied this from aldeed:collections2, which works with
modern versions of Meteor, and it fixed it – I’m not sure what it means to
have three minimum versions.
On Sun 29. Sep 2024 at 22:57, David Burles @.***> wrote:

@.**** commented on this pull request.
In package.js
https://github.com/dburles/meteor-collection-helpers/pull/88#discussion_r1780170032
:

documentation: "README.md",
git: "https://github.com/dburles/meteor-collection-helpers.git",
});

Package.onUse(function(api) {

api.versionsFrom('1.4.2');

api.versionsFrom(['1.12.1', '2.3', '3.0']);

Hey @drone1 https://github.com/drone1 just wondering why the minimum
version bump here is required?
—
Reply to this email directly, view it on GitHub
https://github.com/dburles/meteor-collection-helpers/pull/88#pullrequestreview-2335997014,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABQIEPAWY6A7QI5CC52CZCLZZBSUDAVCNFSM6AAAAABPA7LCPSVHI2DSMVQWIX3LMV43YUDVNRWFEZLROVSXG5CSMV3GSZLXHMZDGMZVHE4TOMBRGQ
.
You are receiving this because you were mentioned.Message ID:
@.***>

In a Meteor 3.0.3 project, if I try to add my local package (with the corrected   api.versionsFrom('1.4.2') line), combined with some other common packages (see below) installed, I get this error:
   While selecting package versions:
   error: Conflict: Constraint<EMAIL_ADDRESS>is not satisfied by mongo 2.0.2.
   Constraints on package "mongo":
   *<EMAIL_ADDRESS><- top level
   *<EMAIL_ADDRESS><- top level
   *<EMAIL_ADDRESS><- reactive-dict 1.3.2 <- ostrio:flow-router-extra
   3.11.0-rc300.1
   *<EMAIL_ADDRESS><- dburles:collection-helpers 1.0.0
   *<EMAIL_ADDRESS>|| 1.12.0 || 2.0.0 <- aldeed:collection2 4.0.3
   *<EMAIL_ADDRESS><- accounts-base 3.0.2
   *<EMAIL_ADDRESS>|| 2.0.0 <- alanning:roles 4.0.0

However, if I change the line to api.versionsFrom(['1.4.2', '2.3', '3.0']) (NOTE: I fixed the issue you mentioned in this comment), no errors.
Actually, I can't even get into a state where I can test the original problem I was having, because I cannot install versions 1.0.0 or 1.1.0 to my project, even with --allow-incompatible-update. (Reminder: the original problem was that helpers simply did not exist on the client.)
But yes, tests pass for Meteor 2.3 and 3.0.
However I can't get up and running with Meteor 1.4.2:
> meteor test-packages ./packages/collection-helpers --release 1.4.2

[[[[[ Tests ]]]]]

=> Started proxy.
=> Started MongoDB.
=> Errors prevented startup:

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

   While downloading<EMAIL_ADDRESS>   error: unable to get local issuer certificate

=> Your application has errors. Waiting for file change.

.meteor/packages:
<EMAIL_ADDRESS>           # Packages every Meteor app needs to have
<EMAIL_ADDRESS>                 # The database Meteor supports right now
jquery                  # Wrapper package for npm-installed jquery

<EMAIL_ADDRESS> # CSS minifier run for production mode
<EMAIL_ADDRESS>  # JS minifier run for production mode
<EMAIL_ADDRESS>              # ECMAScript 5 compatibility for older browsers
<EMAIL_ADDRESS>            # Enable ECMAScript2015+ syntax in app code

<EMAIL_ADDRESS># Update code in development without reloading the page

<EMAIL_ADDRESS>
I tried running with METEOR_NO_HTTPS=1 but no luck. Have you seen these errors before? Any suggestions?
Thanks.

Hey thanks for taking the time to test on earlier versions of Meteor. I'm happy with the version changes. Did you want to investigate async helpers?

Ok great!
Yeah, I can try and take a look at some point and submit another PR. I’ve
needed async helpers myself now with the recent meteor updates…
On Tue 15. Oct 2024 at 23:58, David Burles @.***> wrote:

Hey thanks for taking the time to test on earlier versions of Meteor. I'm
happy with the version changes. Did you want to investigate async helpers?
—
Reply to this email directly, view it on GitHub
https://github.com/dburles/meteor-collection-helpers/pull/88#issuecomment-2415237506,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABQIEPHVFTK3QYMW7ZEJFZTZ3WFYVAVCNFSM6AAAAABPA7LCPSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDIMJVGIZTONJQGY
.
You are receiving this because you were mentioned.Message ID:
@.***>

Great. I don't imagine it would require any changes to the source to support them. It's more a matter of including some tests for Meteor 3.

Good point. Let me see what I can do.
On Wed, Oct 16, 2024 at 1:06 AM David Burles @.***>
wrote:

Great. I don't imagine it would require any changes to the source to
support them. It's more a matter of including some tests for Meteor 3.
—
Reply to this email directly, view it on GitHub
https://github.com/dburles/meteor-collection-helpers/pull/88#issuecomment-2415317336,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABQIEPG4CIRKSDIAF5VCMKDZ3WNYBAVCNFSM6AAAAABPA7LCPSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDIMJVGMYTOMZTGY
.
You are receiving this because you were mentioned.Message ID:
@.***>

Any news?

Haven’t played with this yet. Are you waiting for these changes to accept
the PR? For some reason I was under the impression we were talking about a
secondary PR.
On Mon 28. Oct 2024 at 23:30, Mattia Corbelli @.***>
wrote:

Any news?
—
Reply to this email directly, view it on GitHub
https://github.com/dburles/meteor-collection-helpers/pull/88#issuecomment-2442794857,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABQIEPHZPGWVUAEVQK5ZLA3Z52UHJAVCNFSM6AAAAABPA7LCPSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDINBSG44TIOBVG4
.
You are receiving this because you were mentioned.Message ID:
@.***>

Ah sure, let me take a look…
On Wed 30. Oct 2024 at 08:49, David Burles @.***> wrote:

I don't have any idea on how Meteor 3 works with non async queries. Where
you have commented out a test with a todo it would be good to add some
async helpers.
—
Reply to this email directly, view it on GitHub
https://github.com/dburles/meteor-collection-helpers/pull/88#issuecomment-2446089524,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABQIEPBXTXZR5A72CLG3U63Z6CFPRAVCNFSM6AAAAABPA7LCPSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDINBWGA4DSNJSGQ
.
You are receiving this because you were mentioned.Message ID:
@.***>

Can't seem to get tests running on the server, despite a variety of attempts. Do you have any experience with this? I ended up posting on the Meteor forums but haven't heard anything yet. If you've got a tip, please let me know!

Should be all good here.

Updated with some structural changes and pushed, but need more testing and changes, possibly. Bear with me please. Thanks.

@dburles I think we're good here. Please take a look when you can. Thanks.

Hey @drone1 thanks for all your effort on this. I would like to keep Tinytest in place since it retains the existing file structure and simplicity. I'm going to open a new PR and cherry pick some of your commits over there.

Hey @drone1 see PR #88

Hey @drone1 thanks for all your effort on this. I would like to keep Tinytest in place since it retains the existing file structure and simplicity. I'm going to open a new PR and cherry pick some of your commits over there.

tinytest does not play nice with async as I mentioned here – the test may run, but it's likely not actually testing much. You can look into it, but it's completely outdated and supports only one async call per test, IIRC, which is why I moved over to a more modern environment.
I understand the resistance to the structural changes, but it's what collection2 uses, and it works fine. Do you have a specific concern?
I put a lot more energy into this than I would have liked. It would be nice to not have it thrown away. It would also be nice to get the credit for the work. If there are specific concerns please let me know. Thanks a lot.

Hey Tinytest is okay with async tests, it just requires that you use Tinytest.addAsync and call the onComplete function when you're done. See: https://github.com/meteor/meteor/tree/devel/packages/tinytest#synchronous-and-asynchronous-tests. If Tinytest becomes deprecated in future Meteor releases it will make sense to migrate. The test requirements for this package are pretty simple. I understand that you would appreciate credit and the your work isn't being thrown away as I have kept the changes to the tests you made, as well as the readme updates. See: https://github.com/dburles/meteor-collection-helpers/pull/89/commits/9085e8b695c2e73e896f7acbdd08aaac46882073. I really do appreciate the time you have put into working on this!

As an alternative, if you would like to make the commits yourself. I'm happy for you to open a new PR with the changes in #89 and I'll merge that. Let me know if you have issues running the Tinytest tests, but they look good on my side.

it's okay, you can make the commits, but you might consider removing the
dependency on underscore as well.
On Wed, Nov 27, 2024 at 9:36 PM David Burles @.***>
wrote:

As an alternative, if you would like to make the commits yourself. I'm
happy for you to open a new PR with the changes in #89
https://github.com/dburles/meteor-collection-helpers/pull/89 and I'll
merge that. Let me know if you have issues running the Tinytest tests, but
they look good on my side.
—
Reply to this email directly, view it on GitHub
https://github.com/dburles/meteor-collection-helpers/pull/88#issuecomment-2504730704,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABQIEPF4DOBH5N7UDV3T7GD2CYULXAVCNFSM6AAAAABPA7LCPSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDKMBUG4ZTANZQGQ
.
You are receiving this because you were mentioned.Message ID:
@.***>

Thanks @drone1. Yeah that's definitely a plan. I'm just not sure if it will break Meteor 1 and 2 support support if we switch to Object.keys/forEach.

Published as 2.0.0! Thanks for all your effort @drone1 and @harryadel for the test workflow!

OK great. Thanks
On Mon, Dec 9, 2024 at 10:03 PM David Burles @.***>
wrote:

Published as 2.0.0! Thanks for all your effort @drone1
https://github.com/drone1 and @harryadel https://github.com/harryadel
for the test workflow!
—
Reply to this email directly, view it on GitHub
https://github.com/dburles/meteor-collection-helpers/pull/88#issuecomment-2529441946,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABQIEPCVUS6TT2QOP424SUL2EYAS3AVCNFSM6AAAAABPA7LCPSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDKMRZGQ2DCOJUGY
.
You are receiving this because you were mentioned.Message ID:
@.***>


Use the gmock library already compiled for abseil.

The IncludeAbseil.cmake module already has a definition for gmock,
reuse it in the bigtable client tests.

If Abseil already includes GoogleTest / GoogleMock, does that mean we can drop them as submodules and use them via Abseil, or is that a bad idea?
Does this change mean that we're getting the GoogleTest / GoogleMock headers from our own git submodules in third_party, but getting the libraries via Abseil's git submodules? If so, is it possible that they might conflict? Or should we be getting the headers from Abseil's copy of both instead?

It is more complicated than that:  abseil requires cctz, which requires a gmock target but does not compile one nor do they include a submodule.  So we provide a gmock target to these libraries, and then we also had the googlemock target in bigtable/CMakeLists.txt.
We should consider using one of the googlemock submodules (I count 3) included with grpc, and maybe use the abseil-cpp submodule included with grpc while we are at it.  Except that grpc does not include cctz, so they must be using a subset of abseil, or an older version that did not depend on cctz, or something.
Created #126 to track that additional work.

I think I need a graph of dependencies in DOT format, so that I can visualize it via GraphViz.

Does this mean that you would rather not approve this until we have a dependency graph?  Or is this Okay to go but you want the dependency graph later?

I am being somewhat tongue-in-cheek: this is complicated, and I'm glad that you can keep this straight, but it's super confusing. I am fine with this being submitted, under the assumption that you're keeping things sane in the dependency graph with your global mental model, but the rest of us mere mortals easily get lost in this web of deps.
It would be super nice in the nebulous future to have something (anything, really) to help with this, e.g.,:

manually-generated dependency graph (but how would it be updated?)
a tool to easily generate a dependency graph of modules + submodules so that we can inspect it from time to time

but not a high-priority item, not a blocker for this PR.

I agree.  And I am no super human.  I can keep this in my head for a day or two when fixing something, and then have to learn the whole thing again.  Created #127.