Why are spline entities limited to degree 10?

I'd like to create higher degree spline curves to represent bezier curves.

I am guessing that English is not your native language. Is that correct?
There is 10 division default when converting polylines to splines in Autocad.
Please include files and code when reporting an issue so that your problem can be correctly understood and answered.
My best guess is that your question makes and an assumption based on what you have opened and not on what you jave actually created and that there is no such problem.

While that is correct, I don't see its significance.
But I fixed the title, if that was your problem.

In this picture you can see the code that limits splines to degree 10.
To represent Bezier curves with a spline, the degree has to be (number of control points - 1).
This limit on the degree of splines limits me to creating Bézier curves with <= 11 control points.
Is this limit a fundamental limit of the following code in the library or just a guard clause with some random value?

It's sample code that you need to modify to fit your needs
I have not had to work with spline creation in netDXF. I have read every comment and issue in the discussion board about them though.
I believe that the issue you are facing is that the sample code is written out to 10 divisions, as an example, and if you want more you need to add the support for it in your code.
Have you walked the code through to see why you cannot just change the number 10 to a higher number?

That's not sample code.
It's code from within the library.
If i try creating a Spline of a degree higher than 10, I get that ArgumentOutOfRangeException.
I have not looked past line 167 in the Spline.cs file.
If I wanted to modify the guard clause I'd have to clone the library, modify it and create a new DLL to test in my application.

I would step through it. I seem to recall the code is hard coded to support 10.
I think I remember seeing an area in the code where each of the 10 are defined. The bottom line is that this code tight. The only issues I have ever had are the ones where I didn't know what I was doing and there was always a a good logical reason for exactly why something was working the way that it was. Perhaps there is known technique for breaking down the input and working it in degrees of divisions by 10 that facilities that higher precision?
It would make sense. I would review all of the samples and post here for splines if I had not yet. You question seems to me like it has already been answered. There has to be a logical reason behind it being exactly what it is.
To me it is like the transformations. There is nothing in the code that explains transformation math or other basic math for geometry.
You will get your answer soon. :) I will be looking to see the answer provided. It's interesting.
I have a cloned library I use. I don't remember what it was that I changed, but someone posted some code that modified something and I used the tools here in git that show the diff version changes color coded and it made it real easy. The dll compliles fine and replacing a referenced dll is pretty simple. However, I still question why I needed to do it and why that support was not in the native code. I do think there was a very good reason for why it was not there at the time and I did what I did to solve my immediate problem. e.g. The code probably does not need a number bigger than 10 to accomplish the final goal. We shall see. Good luck. All the fun.

You have that correct, that is the library and not sample.code. I see that.

http://docs.autodesk.com/ACD/2011/ENU/filesDXF/WS1a9193826455f5ff18cb41610ec0a2e719-79e1.htm
Here is some documentation on splines in a dxf file.
As far as I know there is no limit on the number of control points or the degree.
They way I see it, the library is just writing a text file.
You don't need to do any calculations on actually drawing the spline.
So the upper limit of degree 10 is somewhat unnecessary.
The application in which the dxf will be imported might have a limit in its calculations, but that is very variable across all the different applications.
I think you can open the upper bound to "infinity".
Of course still limited by the date type "short" you are using as input.

Here is the code I have been using.
And while trying to export a Spline with a higher degree than 10 I got the error message.
        private void btnSaveDXF_Click(object sender, EventArgs e)
        {
            // Try to parse with invariant culture
            if (!double.TryParse(txtChord.Text.Replace(",", "."), CultureInfo.InvariantCulture, out double chord))
            {
                MessageBox.Show("Invalid Chord");
                return;
            }

            // Create a new DXF document
            DxfDocument dxf = new DxfDocument();

            // Define control points for the spline
            List<Vector3> controlPointsTopVector = new();

            // Add top control points to the list
            foreach (PointD point in controlPointsTop)
            {
                switch (cmbCoordinateStyle.Text)
                {
                    case "x,y":
                        // show error message and return if "x,y" is selected
                        MessageBox.Show("Please select a different coordinate style for DXF export.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    case "0,y,z":
                        // Append point in "0,y,z" style
                        controlPointsTopVector.Add(new Vector3(0, point.Y * chord, point.X * chord));
                        break;
                    case "x,0,z":
                        // Append point in "x,0,z" style
                        controlPointsTopVector.Add(new Vector3(point.X * chord, 0, point.Y * chord));
                        break;
                    case "x,y,0":
                        // Append point in "x,y,0" style
                        controlPointsTopVector.Add(new Vector3(point.X * chord, point.Y * chord, 0));
                        break;
                    default:
                        // show error message and return if nothing or something else is selected
                        MessageBox.Show("Please select a different coordinate style for DXF export.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        break;
                }
            }

            // Define control points for the spline
            List<Vector3> controlPointsBottomVector = new();

            // Add top control points to the list
            foreach (PointD point in controlPointsBottom)
            {
                switch (cmbCoordinateStyle.Text)
                {
                    case "x,y":
                        // show error message and return if "x,y" is selected
                        MessageBox.Show("Please select a different coordinate style for DXF export.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    case "0,y,z":
                        // Append point in "0,y,z" style
                        controlPointsBottomVector.Add(new Vector3(0, point.Y * chord, point.X * chord));
                        break;
                    case "x,0,z":
                        // Append point in "x,0,z" style
                        controlPointsBottomVector.Add(new Vector3(point.X * chord, 0, point.Y * chord));
                        break;
                    case "x,y,0":
                        // Append point in "x,y,0" style
                        controlPointsBottomVector.Add(new Vector3(point.X * chord, point.Y * chord, 0));
                        break;
                    default:
                        // show error message and return if nothing or something else is selected
                        MessageBox.Show("Please select a different coordinate style for DXF export.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                }
            }

            // Create a spline with the control points
            netDxf.Entities.Spline splineTop = new netDxf.Entities.Spline(controlPointsTopVector, null, degree: short.Parse((controlPointsTop.Count - 1).ToString()));
            netDxf.Entities.Spline splineBottom = new netDxf.Entities.Spline(controlPointsBottomVector, null, degree: short.Parse((controlPointsBottom.Count - 1).ToString()));

            // Add the spline to the DXF document
            dxf.Entities.Add(splineTop);
            dxf.Entities.Add(splineBottom);

            // Save the DXF document to a file
            //dxf.Save(loadedAirfoilName + ".dxf", );

            // Create a SaveFileDialog to get the save location from the user
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            saveFileDialog.FileName = PrepareAirfoilName(loadedAirfoilName);
            saveFileDialog.Filter = "DXF Files (*.dxf)|*.dxf";
            saveFileDialog.Title = "Save as DXF";

            if (saveFileDialog.ShowDialog() == DialogResult.OK)
            {
                dxf.Save(saveFileDialog.FileName);
                MessageBox.Show("File Saved Successfully!");
            }
        }

This limit is imposed by AutoCad. Here is an excerpt from the official documentation:

Control Vertices (CV)
Creates a spline by specifying control vertices. Use this method to create splines of degree 1 (linear), degree 2 (quadratic), degree 3 (cubic), and so on up to degree 10. Adjusting the shape of a spline by moving control vertices often provides better results than moving fit points.

A degree of 10 is already very, very high, and more than enough for any kind of purposes. Unless you know what and why you are increasing the degree, stick to a third degree curve, maximum, not matter if it is a Bezier, a B-Spline, a NURBS. Maybe you can go as high as four, at most, for some special needs; second degree NURBS are useful to create conics. You must realize that increasing the degree comes at a heavy cost in computational time; and while you can, mathematically speaking, set the degree as high as you want, make it high enough and no computer will be able to calculate the curve in your life time. So, always use the lowest degree that serves the purpose.
What I see here is a bad approach to a problem. If you are working with a Bezier curve, you do not increase its degree to get more controls points to be able to draw a more complex curve. What you do is to concatenate multiple low degree curves into a composite bezier curve, aka Bezier Spline. If what you want is to have a single curve, you can always work with B-Splines or NURBS, the number of controls points is independent from the degree, except for the minimum required imposed by the degree. There is plenty of information in the Wikipedia about all this.
There is a constructor in the Spline class that takes a list of concatenated quadratic or cubic bezier curves and builds the corresponding NURBS (a DXF spline entity) with it, exactly for this kind of applications.

Thank you. That was a perfect answer. I really appreciate you taking the time to explain that.

My App can handle Bezier curves of a very high degree without issue.
https://youtu.be/j_0ItXrmmoA
It might be a lot easier using the DeCasteljau or Bernstein algorithms
and I understand there are many more calculations needed to evaluate a Spline curve,
but even Onshape has no problem with a Bezier curve that has ~30 control points.

Rhino allows Splines up to degree 11

And also exports that to a dxf:

Autodesk Fusion 360 can even import the degree 11 Spline

Onshape puts the degree 31 curve in a dxf

And Fusion 360 actually imports it (with a lot of struggle; and can't really draw it correctly)

The point is, even if other programms can't handle it, there is no need to restrict to 10.
Can you please increase the limit to something a bit higher?
Maybe 20? Or 15?

This is not a competition to know how high I can set the degree of my curve. I can draw you a bezier of degree 100 and it will be a waste of time and resources, just because you can does not mean you should.
Drawing a single 2D bezier curve of degree 10, 20, 30, whatever. is trivial but, what happens when you start to deal with hundreds, thousands of curves, or you start to build surfaces with those curves? the computation time starts to add up. Just by adding the Z axis and working in 3D instead of 2D you are increasing the operations by 50%.
I will not change the upper limit, the source code is available, delete it or set it to a thousand if it bothers you so much.


Nucleo_h743zi fails to format storage flash partition

Describe the bug
The file system fails to format the storage partition on the nucleo_h743zi board. This is failing on both the samples/subsys/shell/fs and the samples/subsys/fs/littlefs. Also one thing to note is the docs for the littlefs example say that it was created using the nucleo_h743zi board which us the same board I am attempting to test with.
To Reproduce
littlefs Example

west build -b nucleo_h743zi zephyr/samples/subsys/fs/littlefs -p auto
Build fails with the following error code:

[4/16] Building C object CMakeFiles/app.dir/src/main.c.obj
FAILED: CMakeFiles/app.dir/src/main.c.obj
ccache /home/jowen/Downloads/zephyr-sdk-0.15.1/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc -DCORE_CM7 -DHSE_VALUE=8000000 -DKERNEL -DLFS_CONFIG=zephyr_lfs_config.h -DSTM32H743xx -DUSE_FULL_LL_DRIVER -DUSE_HAL_DRIVER -D_FORTIFY_SOURCE=2 -D__PROGRAM_START -D__ZEPHYR__=1 -I/home/jowen/dev/zephyrproject/zephyr/include -I/home/jowen/dev/zephyrproject/build/zephyr/include/generated -I/home/jowen/dev/zephyrproject/zephyr/soc/arm/st_stm32/stm32h7 -I/home/jowen/dev/zephyrproject/zephyr/drivers -I/home/jowen/dev/zephyrproject/zephyr/soc/arm/st_stm32/common -I/home/jowen/dev/zephyrproject/modules/hal/cmsis/CMSIS/Core/Include -I/home/jowen/dev/zephyrproject/modules/hal/atmel/include -I/home/jowen/dev/zephyrproject/zephyr/modules/hal_nxp/. -I/home/jowen/dev/zephyrproject/modules/hal/stm32/stm32cube/stm32h7xx/soc -I/home/jowen/dev/zephyrproject/modules/hal/stm32/stm32cube/stm32h7xx/drivers/include -I/home/jowen/dev/zephyrproject/modules/hal/stm32/stm32cube/stm32h7xx/drivers/include/Legacy -I/home/jowen/dev/zephyrproject/modules/hal/stm32/stm32cube/common_ll/include -I/home/jowen/dev/zephyrproject/modules/fs/littlefs -I/home/jowen/dev/zephyrproject/zephyr/modules/littlefs -isystem /home/jowen/dev/zephyrproject/zephyr/lib/libc/minimal/include -isystem /home/jowen/Downloads/zephyr-sdk-0.15.1/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.1.0/include -isystem /home/jowen/Downloads/zephyr-sdk-0.15.1/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.1.0/include-fixed -fno-strict-aliasing -Og -imacros /home/jowen/dev/zephyrproject/build/zephyr/include/generated/autoconf.h -ffreestanding -fno-common -g -gdwarf-4 -fdiagnostics-color=always -mcpu=cortex-m7 -mthumb -mabi=aapcs -mfp16-format=ieee --sysroot=/home/jowen/Downloads/zephyr-sdk-0.15.1/arm-zephyr-eabi/arm-zephyr-eabi -imacros /home/jowen/dev/zephyrproject/zephyr/include/zephyr/toolchain/zephyr_stdint.h -Wall -Wformat -Wformat-security -Wno-format-zero-length -Wno-main -Wno-pointer-sign -Wpointer-arith -Wexpansion-to-defined -Wno-unused-but-set-variable -Werror=implicit-int -fno-pic -fno-pie -fno-asynchronous-unwind-tables -fno-reorder-functions --param=min-pagesize=0 -fno-defer-pop -fmacro-prefix-map=/home/jowen/dev/zephyrproject/zephyr/samples/subsys/fs/littlefs=CMAKE_SOURCE_DIR -fmacro-prefix-map=/home/jowen/dev/zephyrproject/zephyr=ZEPHYR_BASE -fmacro-prefix-map=/home/jowen/dev/zephyrproject=WEST_TOPDIR -ffunction-sections -fdata-sections -std=c99 -nostdinc -MD -MT CMakeFiles/app.dir/src/main.c.obj -MF CMakeFiles/app.dir/src/main.c.obj.d -o CMakeFiles/app.dir/src/main.c.obj -c /home/jowen/dev/zephyrproject/zephyr/samples/subsys/fs/littlefs/src/main.c
In file included from /home/jowen/dev/zephyrproject/zephyr/include/zephyr/arch/arm/aarch32/arch.h:20,
                 from /home/jowen/dev/zephyrproject/zephyr/include/zephyr/arch/cpu.h:19,
                 from /home/jowen/dev/zephyrproject/zephyr/include/zephyr/kernel_includes.h:33,
                 from /home/jowen/dev/zephyrproject/zephyr/include/zephyr/kernel.h:17,
                 from /home/jowen/dev/zephyrproject/zephyr/samples/subsys/fs/littlefs/src/main.c:12:
/home/jowen/dev/zephyrproject/zephyr/include/zephyr/devicetree.h:190:36: error: 'DT_N_NODELABEL_storage_partition_PARTITION_ID' undeclared here (not in a function)
  190 | #define DT_NODELABEL(label) DT_CAT(DT_N_NODELABEL_, label)
      |                                    ^~~~~~~~~~~~~~~
/home/jowen/dev/zephyrproject/zephyr/include/zephyr/devicetree.h:3714:24: note: in definition of macro 'DT_CAT'
 3714 | #define DT_CAT(a1, a2) a1 ## a2
      |                        ^~
/home/jowen/dev/zephyrproject/zephyr/include/zephyr/storage/flash_map.h:292:35: note: in expansion of macro 'DT_FIXED_PARTITION_ID'
  292 | #define FIXED_PARTITION_ID(label) DT_FIXED_PARTITION_ID(DT_NODELABEL(label))
      |                                   ^~~~~~~~~~~~~~~~~~~~~
/home/jowen/dev/zephyrproject/zephyr/include/zephyr/devicetree.h:190:29: note: in expansion of macro 'DT_CAT'
  190 | #define DT_NODELABEL(label) DT_CAT(DT_N_NODELABEL_, label)
      |                             ^~~~~~
/home/jowen/dev/zephyrproject/zephyr/include/zephyr/storage/flash_map.h:292:57: note: in expansion of macro 'DT_NODELABEL'
  292 | #define FIXED_PARTITION_ID(label) DT_FIXED_PARTITION_ID(DT_NODELABEL(label))
      |                                                         ^~~~~~~~~~~~
/home/jowen/dev/zephyrproject/zephyr/samples/subsys/fs/littlefs/src/main.c:271:32: note: in expansion of macro 'FIXED_PARTITION_ID'
  271 |         .storage_dev = (void *)FIXED_PARTITION_ID(storage_partition),
      |                                ^~~~~~~~~~~~~~~~~~
ninja: build stopped: subcommand failed.
FATAL ERROR: command exited with status 1: /usr/bin/cmake --build /home/jowen/dev/zephyrproject/build

shell/fs Example

west build -b nucleo_h743zi zephyr/samples/subsys/shell/fs -p auto
west flash
Send the following command over the uart console to the nucleo. fs mount littlefs /lfs
Mount command fails:

*** Booting Zephyr OS build zephyr-v3.2.0  ***

[00:00:00.000,000] <dbg> fs: fs_register: fs register 1: 0
uart:~$ fs mount littlefs /lfs
Error mounting as littlefs: -28
[00:00:19.609,000] <inf> littlefs: LittleFS version 2.4, disk version 2.0
[00:00:19.609,000] <dbg> littlefs: littlefs_flash_init: FS area 1 at 0x20000 for 131072 bytes
[00:00:19.610,000] <inf> littlefs: FS at flash-controller@52002000:0x20000 is 1 0x20000-byte blocks with 512 cycle
[00:00:19.610,000] <inf> littlefs: sizes: rd 16 ; pr 16 ; ca 64 ; la 32
[00:00:19.610,000] <wrn> littlefs: can't mount (LFS -84); formatting
[00:00:19.610,000] <err> littlefs: WEST_TOPDIR/modules/fs/littlefs/lfs.c:567: No more free space 1
[00:00:19.610,000] <err> littlefs: format failed (LFS -28)
[00:00:19.610,000] <err> fs: fs mount error (-28)
uart:~$

Environment (please complete the following information):
OS: Ubuntu 20.04
Toolchain Zephyr SDK 0.15.1
Commit SHA: https://github.com/zephyrproject-rtos/zephyr/commit/4256cd41df6c60f1832fd2deb14edc30ac7debab
https://github.com/zephyrproject-rtos/zephyr/issues/51870#tasklist-block-f097606c-01c2-406a-a4fa-b86cd95f4d8c

The sample is looking for a  "storage_partition" node.

I am using the default nucleo_h743zi.dts to compile this project and it looks like it does have a storage partition. Are you wanting me to test with something different than this?
&flash0 {
	partitions {
		compatible = "fixed-partitions";
		#address-cells = <1>;
		#size-cells = <1>;

		/* 128KB for bootloader */
		boot_partition: partition@0 {
			label = "mcuboot";
			reg = <0x00000000 DT_SIZE_K(128)>;
			read-only;
		};

		/* storage: 128KB for settings */
		storage_partition: partition@20000 {
			label = "storage";
			reg = <0x00020000 DT_SIZE_K(128)>;
		};

		/* application image slot: 256KB */
		slot0_partition: partition@40000 {
			label = "image-0";
			reg = <0x00040000 DT_SIZE_K(256)>;
		};

		/* backup slot: 256KB */
		slot1_partition: partition@80000 {
			label = "image-1";
			reg = <0x00080000 DT_SIZE_K(256)>;
		};

		/* swap slot: 128KB */
		scratch_partition: partition@c0000 {
			label = "image-scratch";
			reg = <0x000c0000 DT_SIZE_K(128)>;
		};
	};
};

Since the nucleo_h743zi.overlay is deleting the node (of the flash0)  /delete-node/ &storage_partition;
another one is required  from the qspi-nor-flash@0 for testing.
Could  you look at https://github.com/zephyrproject-rtos/zephyr/pull/51926

Note that west build -p auto -b nucleo_h743zi samples/subsys/shell/fs  does not report any build error

@jpowen898, @FRASTM, I don't think it is a good idea to use littlefs on the internal flash of a stm32h743zi: the flash blocks are 128kB and it will need at least 2 blocks to provide any power loss resilience. So at least the storage size should be doubled. Even in that case I am unsure if a littlefs configuration with only 2 eraseable blocks is a good idea.

@jpowen898, @FRASTM, I don't think it is a good idea to use littlefs on the internal flash of a stm32h743zi: the flash blocks are 128kB and it will need at least 2 blocks to provide any power loss resilience. So at least the storage size should be doubled. Even in that case I am unsure if a littlefs configuration with only 2 eraseable blocks is a good idea.

Do you mean simply preventing that platform (and maybe others with large sector-size) to run that samples on the internal flash mem ?
(Then this is to clarify in the README of that sample)

I don't want to prevent running the sample on that platform, but it should somehow be made clear to the user that there are limitations arising from using it on devices with large erase-block-size (and limited erase-block-count). I think it would be good to add this to the documentation of the platform. It should be straight forward that any power loss resilient storage solution needs at least 2 erase-blocks (where would the data be stored during an erase ?).
There are users that will be able to work around limitations (e.g. because it is used as read-only, or by adapting the partitions to their needs). But by just enabling the samples users might think there is no limitation at all (because the sample runs), and then after some time get stuck because in real world usage the limitations jump up.
Trying to clarify all limits of a (external) subsystem in a sample IMO seems the wrong place.

Since the nucleo_h743zi.overlay is deleting the node (of the flash0)  /delete-node/ &storage_partition; another one is required from the qspi-nor-flash@0 for testing.
Could you look at #51926

I'm confused by this PR. It looks like they are implying that there is a qspi flash chip on the nucleo_h743zi to which they are mounting the littlefs file system. From what I can tell looking at schematics for this board there is no qspi chip on it. Is the assumption that you need to buy and wire up a breakout board for that qspi flash chip in order to get the example to work?


fa2 field with extracted fa data

See gist for method used
https://gist.github.com/climbingweathermap/ffb5ae8b76b1ac803581c2c6eccfd9d1

Thanks so much for the PR!  Would it be possible to post a text extract showing the original FA and FA2?


[T3A4][T13-A2] Kevin Ong

Ready for review

@Kevin-Ong i liked your approach!
Some comments, to help you think through to refine the solution, added. Please ack & close the PR after reading comments.

Acknowledged :)


fix missing openssl feature checks

Changes proposed in this pull request:

FIPS mode and openssl compression could have been compiled out on target platform and results in undefined refs
added defines to check for OPENSSL_FIPS and OPENSSL_NO_COMP

Your great patch is much appreciated. We are considering to apply your patch into the SoftEther VPN main tree.
SoftEther VPN Patch Acceptance Policy:
http://www.softether.org/5-download/src/9.patch
You have two options which are described on the above policy.
Could you please choose either option 1 or 2, and specify it clearly on the reply?

option 1

PRELIMINARY DECLARATION FOR FUTURE SWITCH TO A NON-GPL LICENSE
I hereby agree in advance that my work will be licensed automatically under the Apache License or a similar BSD/MIT-like open-source license in case the SoftEther VPN Project adopts such a license in future.

can be optional?
Make it two commits?
Otherwise this looks good.

Optional as in the lib not compiled with support for it and therefor the build fails with undefined refs.
Why two commits, i don't understand?

On 07/26/18 13:04, Andy Walsh wrote:

Optional as in the lib not compiled with support for it and therefor
the build fails with undefined refs.

No, I meant to replace optionally by optional in the commit message
description.

Why two commits, i don't understand?
In my opinion, the commit should be split up, as the two changes are
independent. In case one of the define is wrong, or causes problems,
that commit can be easily reverted.

ah oki, so just two commits in one PR or two PR?

On 07/26/18 13:10, Andy Walsh wrote:

ah oki, so just two commits in one PR or two PR?

I’d say one merge/pull request. (Thinking about it, I forgot
if SoftEther squashes commits when accepting a merge/pull
request. Hopefully, they do not.)

done, split into two commits

Nice. Thank you very much. In the future, the original commit message (summary) should also be updated.

Thank you very much for your contribution!


Fix for Issue#10 - bad link

This solves the dead link problem but should probably be corrected on https://www.leveluptutorials.com/ as I bet it's missing an intended redirect catch. Potential fix: #10

Closing as @stolinski fixed with merge 42df326


Support NGINX Listening

This depends on synapse-nginx 0.2.2, and allows us to start switching over Smartstack listeners from HAProxy to nginx.
The main contribution here is that we can do the rollout gradually by controlling the "listen_with_X" configuration flags, where we can have just HAProxy bind the listen ports, both HAProxy and nginx bind the listen ports, and just NGINX bind the listen ports.
The integration tests are expanded to test all three listening setups. Integration tests that were better suited for unit tests (testing exact implementation details) were refactored since unit tests cover config generation.
I think I still need to figure out how to make nginx act as a fully transparent proxy (right now it sends back the wrong headers I think), and I need to iron out user/group issues. I'd like to get the review started since it's so significant though.
@jnb @solarkennedy @EvanKrall heads up :-)

Here goes nothin.


⚠ ClamAV has degraded performance

In 42b3a8b, ClamAV (https://spamassassin.apache.org/) experienced degraded performance:

HTTP code: 200
Response time: 511 ms

Resolved: ClamAV performance has improved in af2a32e.


add include/exclude_paths to the auth plugins

I believe this may satisfy #853.
We have a use case where we want some endpoints within our api to be able to be accessible anonymously. Each of our api's hosts its own swagger ui with api-docs which we want to be accessible anonymously while securing the other endpoints with oauth2. The most flexible solution I thought of was having include_paths and exclude_paths arrays in the plugin config. Using these you can get pretty good control over which endpoints require authentication and which do not. This also opens the possibility of having multiple auth plugins on a single api for different endpoints (example basic-auth on the swagger ui and oauth2 on all else).
Each element in the include/exclude path arrays is a regex that is applied to the request url (after stripping out the path prefix).
Also if you do hit an endpoint which is excluded and you do have the necessary auth header(s), it will still try authentication. It will only skip the auth stuff if the auth headers are not present.
Note: I can't seem to figure out the deal with the travis ci build :( It looks like it fails sending the coveralls report? I was hoping if I created a coveralls account and added my fork that it would work, but it didn't seem to help.
Just getting the following error (even if i build the latest next branch):
Upload error: Couldn't find a repository matching this job.
Upload error: Couldn't find a repository matching this job.
Upload error: Couldn't find a repository matching this job.

Would we prefer moving that is_path_included method to a more global location? I wasn't sure how isolated you want the plugins to be.

Hi,
As much as we appreciate the contribution, we currently have plans to allow unauthenticated calls, and those are part of a bigger plan to allow more flexibility with APIs and Plugins. We would like all plugins (not only authentication ones) to have such features as include/exclude path, and the model refactoring needed requires a lot of reflexion to satisfy all our use cases (which is to be a less opinionated as possible). This is a process we are currently undergoing.
When such a feature/model refactoring will be implemented, it should also, as discusses in #853, introduce the notion of "anonymous consumer", a consumer that has less powers than an authenticated one, and such a concept impacts both the core and the sibling plugins.
In short, this is a much deeper problem that does not only impact the authentication plugins. We are happy that you could find a solution for your use case by tweaking Kong to your needs, but to benefit to the entire community, a lot more work will be required.
PS: If you are to use this, I would indeed recommend grouping those functions together, and avoid duplicating that much code. This is a very good hint as to why this issue needs to be addressed at a deeper level.
PPS: the coveralls.io error you are seeing suddenly popped up yesterday and is not only related to your branch/PR but also affects branches of this repository. We haven't figured it out yet.

(Leaving this opened for discussion, feel free to share thoughts!)

Related to #505.


HydroDyn WaveMod=6 Kinematics Read Bug

Hi,
I'm having issues using WaveMod=6.
I've been playing around with this using the conda install of openfast (both 3.1 and 3.2) on a Linux machine.
I have a very clean process for defining the 8 input files. I run HydroDyn, extract the internal nodes, and then define my kinematics/pressures on them in an automated way (+ the surface elevation file), having taking guidance from previous forum discussions and the old CertTest folders.
For cases with a low number of internal nodes (<100), everything seems to work fine and my loads perfectly match the simple WaveMode=2 HydroDyn Airy wave cases I'm trying to validate against. However, as the number of internal nodes increases, and as so do the number of columns in the kinematic and pressure input files, the file reading becomes quite temperamental.  Moreover, the number of columns that I can get safely read seems to depend to an extent on formatting/precision.
I'm struggled with this for many hours today but can't come up with a good set of rules for when I would expect it to work. To be clear, I'm 99% sure I've got the input file format down: it works very well for small problems  (<100 nodes).
Ultimately, I'd like to be able to do this with a jacket, potentially with 1000s of internal nodes. Can anyone help? I'm considering replacing the string-to-array function ("ReadCAryFromStr" from NWTC - it's this that seems to "break") with my own to get the job done as I believe that's the issue but I'm not overly great with Fortran so I'd like to save myself that if I can.
Can anyone help?
Best wishes,
Sam

Hi Sam,
Can you attach a copy of one of your failing WaveMod=6 kinematic input files with more than 100 nodes?
It is very likely that there is an issue in the parsing of this file when any input line is long (such as more than 1024 characters -- I don't remember the exact limit).
Regards,
Andy

Hi Andy,
Thanks so much for your response.
Please see attached a working (coarse) and not working (fine) version of my WaveMod=6 setup using the HydroDyn driver.
for_andy.zip
If it is a input line length issue, is there anything I can do re recompilation?
Best,
Sam

Hi Sam,
In the hydrodyn/src/UserWaves.f90 file, change character array size in line 947 from
      CHARACTER(2048)           :: TextLine          !< One line of text read from the file
to a larger number such as
      CHARACTER(4096)           :: TextLine          !< One line of text read from the file
then recompile.
You may need to make that much larger depending on how long the line is.  In principle this can be a very large number, but it was set to what we initially thought would be a reasonable size.
Hope this helps,
Andy

Thanks Andy, I’ll give that a try tomorrow.
Best,
Sam

That fix worked Andy! Thanks very much :)
Best,
Sam


Creating container via remote API with data volume specification causes error

uname -a
Linux rjb 3.19.0-26-generic #28~14.04.1-Ubuntu SMP Wed Aug 12 14:09:17 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
docker version
 Version:      1.8.1
 API version:  1.20
 Go version:   go1.4.2
 Git commit:   d12ea79
 Built:        Thu Aug 13 02:35:49 UTC 2015
 OS/Arch:      linux/amd64

Server:
 Version:      1.8.1
 API version:  1.20
 Go version:   go1.4.2
 Git commit:   d12ea79
 Built:        Thu Aug 13 02:35:49 UTC 2015
 OS/Arch:      linux/amd64

docker info
Containers: 2
Images: 51
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 55
 Dirperm1 Supported: true
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.19.0-26-generic
Operating System: Ubuntu 14.04.3 LTS
CPUs: 2
Total Memory: 5.813 GiB
Name: rjb
ID: U3PM:6Q7Q:4N54:TB2L:N4OR:BU2J:H4LE:XUAP:IAUO:H5VM:5LWB:JVJZ
WARNING: No swap limit support

Environment details:
VMWare Fusion V8
How reproducible:
Fails every time
Steps to Reproduce:

run:
docker pull ubuntu:14.04
Submit a POST call:
curl -XPOST localhost:4243/containers/create?name=dockerdata -H "Content-Type:application/json" -d '{"Image": "ubuntu:14.04", "Hostconfig": {"Binds": ["/var/www"] }  }'

Actual Results:

Error: Invalid volume specification: /var/www
No volume mounts reported for the container

Expected Results:
Expected something like the following when inspecting the container
    "Mounts": [
        {
            "Name": "67bfe6dca71...",
            "Source": "/var/lib/docker/volumes/67bfe6dca71.../_data",
            "Destination": "/var/www",
            "Driver": "local",
            "Mode": "",
            "RW": true
        }

Additional info:
The same issue was reported here for Docker V1.6
I'm attempting to create a data volume container.
Expectations come from the Documentation:
Creates a container with /fakedir shareable volume based on https://docs.docker.com/reference/api/docker_remote_api_v1.18/#create-a-container:
"Binds – A list of volume bindings for this container. Each volume binding is a string of the form container_path (to create a new volume for the container), host_path:container_path (to bind-mount a host path into the container), or host_path:container_path:ro (to make the bind-mount read-only inside the container)."
Finally, the expected behavior is obtained when not using the remote API. Running this command:
docker create -v /var/www --name dockerdata ubuntu:14.04 /bin/true
leads to the desired result.

@barsteadr Keep in mind, the CLI uses the remote API in all cases.
A "Bind" is a host_path:container_path. The bind spec you have is indeed incorrect since you have not specified a host path.
If all you are looking to do is to create a normal volume (not bound to a specific host dir), then you should do:
{
    "Image": "ubuntu:14.04",
    "Volumes": { "/var/www": {} }
}

@cpuguy83 Volumes is not included in Remote API v1.20 (https://docs.docker.com/reference/api/docker_remote_api_v1.20/#create-a-container) and doesn't seem to be working.

Yes, it appears someone has made a mistake when updating the API docs...

The syntax I pasted is correct, however:
$ curl -XPOST -H 'Content-Type: application/json' localhost/containers/create?name=foo -d '{"Image": "busybox", "Volumes": { "/foo": {}}}'
$ docker inspect -f '{{ json .Mounts }}' foo | jq .
[
  {
    "RW": true,
    "Mode": "",
    "Driver": "local",
    "Destination": "/foo",
    "Source": "/var/lib/docker/volumes/9b2a28e96e288b674e9b8ef0b645af7696d31f43c761ac44bd33e3a3a661a833/_data",
    "Name": "9b2a28e96e288b674e9b8ef0b645af7696d31f43c761ac44bd33e3a3a661a833"
  }
]

@cpuguy83 Sorry, I should have replied earlier. Yes, as @jom said the the 'volumes' key is undocumented in the API docs. Yes, the syntax you suggested worked perfectly for me :+1:. Many thanks.


Added support for quad encoder + button input

added a menu item that has a 'numeric modal' mode, in this mode it uses next() and prev() input to increase and decrease its numeric value. select() toggles the modal mode.
added a menu item that only does 'MenuSystem::back()' when selected.
made it possible for a menu item to change name at any time (by removingconstfrom a few places). E.g. this way we can have menuitems that toggles start/stop etc, etc.

With these changes it is possible to control the entire menu system with justup,downandselect (or forward and backward rotation + a button)
I understand that these changes are quite extensive. And they could possibly have been implemented in a different way. This is just a suggestion.
regards
@eadf

Thanks, this looks like a nice addition. I have some feedback for improvements. Let me know what you think.

Rather than using a define for the text buffer length, could we dynamically resize the buffer? I know it depends on what the formatter does, but it would be easier for users this way;
I think menuSystemTextBuffer should be a class member. As it stands, multiple NumericMenuItem's will use the same buffer;
The numberFormat callback shouldn't take a non-const pointer to menuSystemTextBuffer. It's an internal implementation detail and giving the calling access to mess with it feels wrong. The formatter could return the formatted value instead (and give up ownership of it);
Instead of making is_modal, modal_next, and modal_prev public perhaps it's better to make MenuSystem a friend of NumericMenuItem, then they can be private. I can't see any reason for clients to call those functions;
I'm interested to know why you use the term modal? I think of dialogs when you say this;
Two public add_item methods will be really confusing for newcomers and beginners. Is there any way we can keep one add_item function. One option I thought of is to make the on_select callback a member of MenuItem and pass it in the constructor rather than in MenuSystem::add_item. The downside to that is that it's a breaking change.;
Why remove const from the return value of get_selected?

I'm sorry if that seems like a lot of suggestions. I'd love to know what you think; perhaps you have some other ideas?
Thanks again for the pull-request.

Don't worry, positive feedback like that is always positive :)

Normally I would have used a dynamically allocated buffer, but I'm a bit wary of memory leaks in a Arduino sketch. Without a proper debugger those bugs can be really nasty to get rid of.

In my first versionmenuSystemTextBufferwas a member, but I noticed that my available dynamic memory was dwindling quite fast with a few NumericMenuItems. After some thoughts on the issue i realized that the buffer could be shared. Its an inherently single-threaded process and the content of the buffer is just sent to the LCD/Serial and then it could be wiped/reused.

Hm, true that. It could be up the user to handle the buffer entirely. Then we get rid of the need for the end user to modify MenuSystem.h too (MENUSYSTEM_TEXTBUFFER_SIZE).

Good suggestion, I didn't know that Arduino c++ implemented friend. Apparently it is not as limited as I was informed.

Yes, it's from back in the days (96?) when I did some X11 programming. A modal dialog was something that was stealing all input until dismissed. Just like the NumericMenuItem do. Maybe it's not the correct term nowadays

MenuItemBase could be removed, and BackMenuItem could directly inherit from MenuItem.
Then a single add_item method should suffice:
void add_item(MenuItem* pItem, void (*on_select)(MenuItem*)=NULL)
The price for this would be that BackMenuItem will contain a NULL _on_select pointer 99.9% of the time, but we will probably get a smaller vTable.

The problem was in in theMenuSystem::next()andMenuSystem::prev()methods. When in modal mode they delegate to theNumericMenuItem::modal_next()andNumericMenuItem::modal_prev():
_p_curr_menu->get_selected()->modal_next();
Those methods can't operate on aconstpointer because they modifyNumericMenuItem::_value
The option I could think of was to use const-cast-away but that's inherently ugly imho.

Please let me know what you think
I'll start with item 4 right away.

That was fast. :) Changes look good. Comments for your comments:

That's a good point. I suppose my concern is that users need to know to define MENUSYSTEM_TEXTBUFFER_SIZE if they don't want the default. I wish the Arduino supported compile-time asserts. Perhaps I'll give dynamic allocation a try before releasing, but for now I guess documenting the requirement above is enough.
With some clever/complex state machines you could probably end up overwriting the buffer, but I agree it's very unlikely. Perhaps we could make the buffer a static member of NumericMenuItem so it's at least at the right scope?
Great!
I'm assuming friend is supported. I didn't think about it to be honest.
Ok. The term is fine. I couldn't think of anything else to call it to be honest.
Great idea. I think I'd prefer that.
Ok I understand. I think it's fine to remove the const. I prefer that over another method.

Thank you. I made some final modifications:
(1) I can't really figure out a good way to solve the text buffer problem.
If we let the user define the buffer, we need to accept a pointer to it in get_name().
Or we require the users to more or less copy&paste the code of NumericMenuItem::get_name() (as it is now) into their numberformatters..
Yes, Arduino IDE really needs a way to define compile flags..
Maybe a solution will turn up with time.
(2) I tried to move the buffer as a static member, but I can't figure out how to initialize it. Google says that static array members should be initialized with a = {0,0,...}; but that's no good with arbitrary sizes.
A sure way of crashing the buffer is to call get_name() from within the number format method.
I added a method get_base_name() as a workaround for that (if someone needs the un-altered name)
(5) Some variation of edit, edit mode or something could work as well. I'll leave it up to you to decide.
regards

How does rebasing affect pull-requests? I've never tried it, but that might be a solition for cleaning up the history. I can rebase before merging to clean things up.
Thanks for the effort you put in. I'll grab the changes and run some tests and perhaps try dynamic allocation with char*, and then merge with master.

How does rebasing affect pull-requests? I've never tried it, but that might be a solution for cleaning up the history. I can rebase before merging to clean things up.

I'm not sure about that. But it would be nice if you could rebase before merging.

Thanks for the effort you put in. I'll grab the changes and run some tests and perhaps try dynamic allocation with char*, and then merge with master.

I noticed that I used some camelCaseNaming inside NumericMenuItem (maxValue, minValue numberFormat). I would not mind if you renamed those.

No worries, I'll take care of that too.

I've started merging this today. I changed the callback function to typedef String (*NumberFormat_t)(const float value);. I think it's more descriptive passing the value rather than the whole item.
I'm trying to find a way to not have get_composite_name because it sounds too much like get_name and it only really applies to NumericMenuItem. It's not so easy though and may be something that I can solve with display() from #18.

I changed the callback function to typedef String (*NumberFormat_t)(const float value);. I think it's more descriptive passing the value rather than the whole item.

By passing the String by reference I tried for these goals:

As few alloc/dealloc and copy operations as possible. By passing by value, the String will be stack allocated and copied at least two times. Bad news for my 8MHz pro mini :)
If really needed, the format function could govern more than just the number format.
By overwriting the String (instead of just appending) it could alter the entire text line. i.e. the "menu name=<" part. (but not the last ">").
That's why it had access to the NumericMenuItem reference.

The const in const float value is pointless, It's just a copy and after the format call the float doesn't exist any more.

I'm trying to find a way to not have get_composite_name because it sounds too much like get_name and it only really applies to NumericMenuItem.

I started with having the get_composite_name functionality inside get_name but that didn't make sense when I really needed to retrieve the unaltered name. If there is a set_name then get_name should return the same value imho.
Maybe you could replace get_composite_name with get_text,get_lineorget_representation?
Or if that doesn't work: get_name and set_name could be renamed get_base_name and set_base_name. Then get_composite_name->get_name

If really needed, the format function could govern more than just the number format. By overwriting the String (instead of just appending) it could alter the entire text line. i.e. the "menu name=<" part. (but not the last ">" in modal mode). That's why it had access to the NumericMenuItem reference.

This is what #18 will help with. It defines a display callback for all Menu's. That callback will determine how to display the MenuItems in that menu. (It also might allow for removing the need for the client to ever trigger rendering itself). Plus, if you can do more than format the number, it's not really a number formatter anymore. I know, I know that's really pedantic of me.

The const in const float value is pointless

It shows intent and will complain at compile time if users (think beginners) try to mess with it. You're right that it doesn't really matter.

As few alloc/dealloc and copy operations as possible. By passing by value, the String will be allocated and copied at least two times. Bad news for my 8MHz pro mini :)

I knew you'd bring this up :smile: I was thinking the same, but I'm heading in the direction of not using String at all if I can because it's less memory efficient. I want to look at it with #18, but perhaps we'll need to go back to the parametrised variant. I'm open to it.

and should* be the polymorphic goto method for text representation of any MenuComponent

And I think this comment touches on something we need to think about for #18. What is the polymorphic method for rendering a MenuItem. Should this be the user defined display callback? What will it look like? At the moment we're forcing a certain style (the '>' and '=' symbols).
How do feel about me finishing tidying up, rebasing and merging the code for this (with the changes mentioned above) with master, closing this issue, and moving the discussion over to #18?

How do feel about me finishing tidying up, rebasing and merging the code for this (with the changes mentioned above) with master, closing this issue, and moving the discussion over to #18?

Sounds good, see you on the flip side

I merged this into master. Perhaps I screwed something up with the rebasing :worried: since it didn't close this issue automatically. We'll see. In any case, the master branch works as expected.

Yeah, github thinks this PR is rejected.. but never mind that, the addon seems to work and that's the important bit.


Best practice to force reload in low network conditions

I am displaying images in a FlatList. In low network conditions, some of those images are blank, and some are the default Broken Image that is part of this package.
On Android, if I open a detail page with another instance of BlastedImage with the exact same image URI, and the image loads, I can then return to the previous page (which has not been unmounted / remounted), but the image is still broken. The image is only repaired by unmounting / remounting the FlatList.
If I recall correctly, with react-native-fast-image, if a broken image were eventually loaded successfully, it would then appear on every mounted image instance with the same URI.
I will dig into the react-native-fast-image code to see if it was doing something that caused the above auto-repair behavior.
Otherwise, I am considering keeping track of the broken images via onError. If the FlatList is manually refreshed by the user via pull down refresh, I will call the exported loadImage on each broken one and then generate a new key for the corresponding BlastedImage component to force it to remount. I expect this will fix the issue.
Is there a better way to force reloading of the images that initially failed?

After further investigation into the package, I discovered the following.
When an image fails to load due to a network timeout or invalid url, the error state value is set and the component renders image-error.png.
Sending a new instance of the source object prop has no impact, because the effect that fetches the image returns early when the error state value is set.
Removing the error state value from the effect dependency causes an infinite rendering loop because the source prop is modified by the component itself (e.g., not a stable value).
So there is no way to retry fetching the image other than unmounting and remounting.


refactor(lib): Get rid of runtime, async/await

Relying on async/await generators and the babel-runtime just for async/await at one single space
isn't the most important part. This reduces the code by quite a lot and makes it way simpler.
It’s just an idea, so…. :)

:+1: merge at will :smile:


[v0.2.x] force nb to version compatible with 1.0

With nb < 0.1.3 other crates cannot use nb 1.0 as the types will not match.
A new release of 0.2.x including this would be good.

r? @ryankurte
(rust_highfive has picked a reviewer for you, use r? to override)

I opened this against the wrong branch. See: #253


Template repo files should be cleaned up after an error

Description
Steps to reproduce:

Create a repo from a template repo
Create fails due to some reason (repo-avatar file not found, in my case)
500 error
Go back in the browser to the new repository form
Try to create an empty repo with the same name and owner (without the problematic template)

I expected the creation of an empty repo to work for a repo name that isn't used. However, the repo creation fails with an error message:

Files already exist for this repository. Contact the system administrator.

To fix it, the admin needs to delete the bare git repo from the filesystem using rm -r. This makes the repo name available again.
In this case, one cause is the original file not found. However, filesystem changes like creating the bare git repo should get reverted in the case of an error, the same way that database changes are reverted using a transaction.
Here is the database transaction that reverts db changes. As far as I know, there is no equivalent clean-up for the filesystem.
https://github.com/go-gitea/gitea/blob/0c72256ab4e6e6f6c6cd6d4949b37d32a7816785/services/repository/template.go#L74
Contrast this with CreateRepositoryDirectly() (not from a repo template), which cleans up.
https://github.com/go-gitea/gitea/blob/0c72256ab4e6e6f6c6cd6d4949b37d32a7816785/services/repository/create.go#L304-L306
However, it's unclear to me that the above code calling DeleteRepositoryDirectly() (first introduced in #14384) actually cleans up the files because it first looks for the repo in the database, and if it's not there, returns early. At the point it's being called, the repo wouldn't be in the database because the transaction has been rolled back.
Gitea Version
1.20.5
Can you reproduce the bug on the Gitea demo site?
No
Log Gist
No response
Screenshots
No response
Git Version
No response
Operating System
Linux
How are you running Gitea?
docker
Database
PostgreSQL

Encountered this yesterday, glad to see someone already reported it! And thanks for the fix.


[ALLUXIO-3247] support alluxio on zookeeper client URI

https://alluxio.atlassian.net/browse/ALLUXIO-3247
Here we support both alluxio://zk@host1:port1;host2:port2/path/to/file
and alluxio://zk@host1:port1,host2:port2/path/to/file format.
This is because in testing:
(1) Spark does not support comma separator in hadoop.FileInputFormat.
Only alluxio://zk@host1:port1;host2:port2/path/to/file  works in Spark.
(2) Hadoop jar and Flink run command do not support semicolons separator (will separate the URI as multiple commands).
Only alluxio://zk@host1:port1,host2:port2/path/to/file works.
(3) HBase and Hive support both formats.

alluxio-bot, check this please

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/20587/Failed Tests: 2org.alluxio:alluxio-core-client-hdfs: 2alluxio.hadoop.AbstractFileSystemTest.loadFaultTolerantSystemWhenUsingNoAuthorityalluxio.hadoop.AbstractFileSystemTest.loadRegularThenFaultTolerant
Test FAILed.

Merged build finished. Test FAILed.

Merged build finished. Test PASSed.

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

@aaudiber @apc999 PTAL, thanks!

Merged build finished. Test PASSed.

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

Merged build finished. Test PASSed.

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

Merged build finished. Test FAILed.

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

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/20644/Failed Tests: 4org.alluxio:alluxio-tests: 4alluxio.server.configuration.ConfigCheckerIntegrationTest.unsetVsSetalluxio.server.configuration.ConfigCheckerIntegrationTest.multiMastersalluxio.server.ft.ZookeeperFailureIntegrationTest.zkFailurealluxio.server.ft.journal.JournalBackupIntegrationTest.backupRestoreZk
Test FAILed.

Merged build finished. Test FAILed.

Merged build finished. Test FAILed.

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

Merged build finished. Test FAILed.

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

jenkins, test this please

Merged build finished. Test FAILed.

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

@aaudiber @apc999 @gpang The tests keep failing but mvn clean install runs successful at local computer. PTAL, thanks!

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

Merged build finished. Test PASSed.

@apc999 @aaudiber  PTAL, thanks!

Can one of the admins verify this patch?

Merged build finished. Test PASSed.

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

@aaudiber @apc999
Make the following changes:
(1) In HDFS API, the priority is as follows:
Zookeeper URI > Zookeeper configuration in files > Single Master URI
(2) AlluxioURI capable of processing Alluxio on Zookeeper URI.
Create a ZookeeperURI class which extends the StandardURI class but contains one more variable: mZookeeperAddress and override the getAuthority method to return mZookeeperAddress.
(3) AbstractFileSystem
Now are able to get Zookeeper configuration from Alluxio URI.
To separate from the Zookeeper configuration set in Conf files, introduce another Configuration Source: URI. By doing this, we are able to change from ZkURI to single master URI.
PTAL, thanks!

Merged build finished. Test PASSed.

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

Merged build finished. Test FAILed.

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

Merged build finished. Test FAILed.

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

Merged build finished. Test FAILed.

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

Merged build finished. Test FAILed.

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

Merged build finished. Test PASSed.

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

@aaudiber  @apc999 PTAL, thanks
Main changes:
(1) Alluxio URI in HDFS has the highest priority. Not matter it contains Zookeeper address or not.
(2) Change from ZookeeperURI(which extends StandardURI) to ZookeeperAuthority.
minimizes the part that needs to extend.

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

Merged build finished. Test PASSed.

@aaudiber @apc999 PTAL, thanks!
Main changes:
(1) Check connect details match before set uri + hadoop conf into Alluxio configuration.
(2) Expose AlluxioURI.getAuthority() return Authority object and AlluxioURI.getAuthorityType()

@aaudiber The connect details match now directly merge the null Zookeeper address into Alluxio configuration. PTAL, thanks!

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

Merged build finished. Test PASSed.

@aaudiber @apc999  PTAL, thanks!

Merged build finished. Test PASSed.

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

Merged build finished. Test PASSed.

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

Merged build finished. Test PASSed.

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

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

Merged build finished. Test PASSed.

Merged build finished. Test PASSed.

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

@apc999 Changed most of the parts, except for the AuthorityType.HOSTNAME_PORT. Not sure would it be good to rename it as "MASTER" or "NORMAL" or something else.
This AuthorityType actually refers to all authority other than null and ZookeeperAuthority.
PTAL, thanks!

@apc999 Fixed the issues. Thanks for the review. PTAL

Merged build finished. Test PASSed.

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

Merged build finished. Test PASSed.

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

Merged build finished. Test PASSed.

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

@apc999 @aaudiber PTAL, thanks!
Make a non-trial change to the AlluxioURI Authority.
Now each Authority type has its own class, The getAuthority().toString() will be much safer than before.
  public AuthorityType getAuthorityType() {
    Authority authority = mUri.getAuthority();
    if (authority instanceof NoAuthority) {
      return AuthorityType.NONE;
    } else if (authority instanceof ZookeeperAuthority) {
      return AuthorityType.ZOOKEEPER;
    } else if (authority instanceof SingleMasterAuthority) {
      return AuthorityType.SINGLE_MASTER;
    } else {
      return AuthorityType.OTHER;
    }
  }

Merged build finished. Test PASSed.

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

Merged build finished. Test PASSed.

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

@aaudiber Addressed the comments, PTAL, thanks!

Merged build finished. Test PASSed.

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

@aaudiber Fix the NoAuthority docs, PTAL, thanks!

Merged build finished. Test PASSed.

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

Merged build finished. Test PASSed.

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


[play-pac4j-2.0.1] NullpointerException when setting null value in Redis Cache

We are using Redis cache with our Play 2.4 application. After upgrading from play-pac4j 1.7.x to play-pac4j-java 2.0.1-SNAPSHOT, we get a NullPointerException originating from the IndirectClient.cleanAttemptedAuthentication() function (line 76) when logging in a user. Or more specifically when setting a session attribute after successfully authenticating a user.
This it the relevant line:
context.setSessionAttribute(this.getName() + "$attemptedAuthentication", (Object)null);
I suspect play-pac4j 1.7.x did not set a null value in the cache?
When using Play's standard EhCache saving objects with null values in the cache does not seem to be a problem.

Yes, this cleanup is a new feature from pac4j v1.8. We will have the issue twice as we clean elements from the session at the end of the login process: https://github.com/pac4j/pac4j/blob/master/pac4j-core/src/main/java/org/pac4j/core/client/IndirectClient.java#L134
But we could safely use an empty String as tests are made using CommonHelper.isNotBlank.
Would you mind opening a pull request for that on the pac4j project? I guess we'll need to wait for pac4j v1.8.3 to release play-pac4j v2.0.1.

Ok. See (https://github.com/pac4j/pac4j/issues/424)[https://github.com/pac4j/pac4j/issues/424].


EXC BAD ACCESS when calling createOrUpdateInRealm:withJSONArray: second time.

+ (NSDictionary *)mc_inboundMapping {
    static NSMutableDictionary *mappingForClassName = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        mappingForClassName = [NSMutableDictionary dictionary];
    });
    @synchronized(mappingForClassName) {
        NSDictionary *mapping = mappingForClassName[[self className]];//<----EXC BAD ACCESS here
        if (!mapping) {
            SEL selector = NSSelectorFromString(@"JSONInboundMappingDictionary");
            if ([self respondsToSelector:selector]) {
                mapping = MCValueFromInvocation(self, selector);
            }
            else {
                mapping = [self mc_defaultInboundMapping];
            }
            mappingForClassName[[self className]] = mapping;
        }
        return mapping;
    }
}

When I attempt to call createOrUpdateInRealm:withJSONArray: multiple time in loop for multiple RLMObjects, the first RLMObject works OK, but the second RLMObject(no matter what class is) fails with EXC BAD ACCESS code1 on static variable. I think autorelease pool deallocate pointing NSMutualDictionary. Anybody got this issue? I'm using xcode 6.3.2 and Realm 0.96.3.
+ (NSArray *)createOrUpdateInRealm:(RLMRealm *)realm withJSONArray:(NSArray *)array {
    NSInteger count = array.count;
    NSMutableArray *result = [NSMutableArray array];

    for (NSInteger index=0; index*kCreateBatchSize<count; index++) {
        NSInteger size = MIN(kCreateBatchSize, count-index*kCreateBatchSize);
        @autoreleasepool
        {
            for (NSInteger subIndex=0; subIndex<size; subIndex++) {
                NSDictionary *dictionary = array[index*kCreateBatchSize+subIndex];
                id object = [self createOrUpdateInRealm:realm withJSONDictionary:dictionary];
                [result addObject:object];
            }
        }
    }

    return [result copy];
}

Maybe this is related to https://github.com/matthewcheok/Realm-JSON/pull/77 - I've just merged and push 0.2.14 for this.

I tried 0.2.14 but got the same result. autoreleasepool deallocates NSMutableDictionary and only static pointer left alive.
How about this is? This works fine though.
for mc_outboundMapping & mc_inboundMapping
mappingForClassName = [[NSMutableDictionary dictionary] retain];

for mc_classForPropertyKey
set = [[NSCharacterSet characterSetWithCharactersInString:@"\"<"] retain];

I think I found the problem(which was mine).
This(R+J) is ARC project and my projects is Non-ARC.
So I had to add -fobjc-arc flag in build phase.


first commit

Broken Version

Fixed Desktop Version

Fixed Mobile Version

I don't think this is good solution.  But approving it for now- we don't have time lol

lol okayyy!


[WFRP4e System] [UI] Character sheet displayed incorrectly if Screen Scaling in Windows is not 100%

I have 4k monitor and I use 150% scaling, as otherwise text would be too small in most instances to be readable. I know compatibility with Windows Scaling is big issue (even some video games have more issues with scaling than with resolutions), but if you would be able to fix it, it would be awesome.
I also confirmed that this issue appears on FullHD (1920x1080 px) monitor/resolution with scaling set to 125%.
Issue: Character sheet's background is not fully filling the sheet, leaving transparent gaps. Also, the header is only partial (with 150% scaling, header has only half required height).
I did not notice this issue in other windows, only character/npc/creature/vehicle sheets
How it looks: https://i.imgur.com/UPYkLpn.jpg
It displays correctly on my second monitor, which has 100% scaling set in Windows.
Issue also disappears when I set scaling to 100% on my main monitor, but each character of text is like 2mm tall.
System: Windows 11, 64 bit
Monitors: 4k (150%) and FullHD (100%)
Browsers tested: Opera GX, Microsoft Edge, Google Chrome
From<EMAIL_ADDRESS>11.302wfrp4e: 6.5.9wfrp4e-archives1: 3.0.2wfrp4e-archives2: 3.0.6wfrp4e-core: 3.1.4wfrp4e-rnhd: 3.0.7wfrp4e-up-in-arms: 3.0.6wfrp4e-wom: 3.0.5wfrp4e-zoo: 3.0.2Active Modules: ATL, darkraven-games-soundscapes-free, dice-so-nice, forien-quest-log, foundryvtt-simple-calendar, fxmaster, lib-wrapper, michaelghelfi, polyglot, popout, tabletop-rpg-music, token-action-hud, tomcartos-ostenwold, wfrp4e-actor-sheet-print, wfrp4e-gm-toolkit, wfrp4e-random-treasure

Duplicate #48


optgroup wrong font style

font-size is wrong, and maybe color also...simply remove it from select2-results__group style
.select2-container--bootstrap .select2-results__group {
    /*color: #777;*/
    display: block;
    padding: 6px 12px;
    /*font-size: 12px;*/
    line-height: 1.428571429;
    white-space: nowrap;
}

And padding too : 6 4 seems okay.

Hey @michele-b and @NaWer!
If you take a look at the Sass (or Less) sources for .select2-results__group and compare them to the style definitions for Bootstraps "Dropdown header", you will find that we mimick the latter in terms of font-size, line-height and color (while the padding is based on Bootstraps definitions for .form-control and we do not alter the browser default styles of the <strong> tag the class is applied to).
The Bootstrap documentation describes the purpose of the "Dropdown header" as "to label sections of actions in any dropdown menu" – which is very close to the job that .select2-results__group is doing.
If you need to change the styles for .select2-results__group, just add some custom CSS, e. g.
.select2-container--bootstrap .select2-results__group {
    color: inherit;
    font-size: inherit;
    padding: 6px 4px;
}

For those who do compile their own select2-bootstrap-theme from the Sass or Less source, the next theme update will introduce a bunch of variables enabling you to change the properties in question.

As announced, 0.1.0-beta.9 provides dedicated variables.


Editor Stacks: "Close All Editors" command too easy to press

Related #6536

VSCode Version: commit 5376d6daa0f74e65fbe425393b8533094e69d9b0
OS Version: Mac OS X

Steps to Reproduce:

Open multiple editor groups
Click on the command overflow (ellipses) button

I found it a little too easy to accidentally close all the editors in the entire window.

This could be detrimental to a user's layout.  Therefore, I think we should prompt confirmation before closing all editors (as it is sort of a destructive change). No need to prompt for closing all editors in group, though, as that is less destructive.
@stevencl do you agree?
Just my opinion: Also, what I was expecting to be at the bottom of this list was "Close All Editors in Group,"  as that's a command I would use frequently (and the bottom of a context menu is so easy to hit without thinking).

@stevencl @bgashler1 actually "Close All Editors" would actually close every editor across all groups and not just within the group. I would say it is equally a destructive change of layout as "Close All Editors in Group" is as long as we do not have support for empty groups.
Honestly we did not prompt for closing editors and layouts before and people did not ask for it, I wonder why we would change this now?

@bgashler1 @stevencl when @joaomoreno tested this today (i looked over his shoulder) we also wondered if there should be a "Close All Editors" on the overflow menu of a group because people might misunderstand it as a way to close all editors of the group. Maybe we should not have the other close actions in there?

Outcome from the UX meeting:

we will shorten the names of the actions when they appear in their context

editor: close, close others, (close all?)
editor shown as tab: additionally "close left", "close right"
group: move left, move right, close all

we will drop actions that target other contexts (no close all groups, close other groups in the context of editors or groups)

@isidorn by reducing the number of actions in the context menu in "Opened Editors" I decided that we do not need the context menu there anymore. Now it looks like this:

Which matches pretty much what we had in working files:

Looks good to me, I like that the change from what we had previously is minimal.


Remove deleted codecov package as dependency

Description
This pull request remove the package codecov as dependency because it has been removed from PyPI and is not needed by the codecov GitHub Action for running test coverage analysis.
Type of change
Please check all relevant options.

[x] Improvement (non-breaking)
[ ] Bug fix (non-breaking)
[ ] New feature (non-breaking)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] This change requires a documentation update

Codecov Report

Merging #2099 (c63d273) into main (c1859ba) will decrease coverage by 36.28%.
The diff coverage is n/a.

: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    #2099       +/-   ##
===========================================
- Coverage   85.63%   49.35%   -36.28%
===========================================
  Files         297      297
  Lines       26515    26515
  Branches     4867     4867
===========================================
- Hits        22705    13087     -9618
- Misses       2572    12744    +10172
+ Partials     1238      684      -554

see 146 files with indirect coverage changes


Store original state of dmlWithSchema

This is a follow on PR from the discussion in #2075.
It protects the original state of the dmlWithSchema flag rather than explicitly setting it to false.

Looks good, thanks!


Update index.md

Checklist:

[ ] I have read freeCodeCamp's contribution guidelines.
[ ] My pull request has a descriptive title (not a vague title like Update index.md)
[ ] My pull request targets the main branch of freeCodeCamp.
[ ] I have tested these changes either locally on my machine, or GitPod.

Closes #XXXXX

#xxxxxارسال شده از دستگاه Galaxy من
-------- پیام اصلی --------از: Muhammed Mustafa @.> تاریخ: ۲۰۲۳/۱/۱۹  ۱۸:۰۳  (GMT+03:30) گیرنده: freeCodeCamp/freeCodeCamp @.> گیرنده کپی: Subscribed @.***> موضوع Re: [freeCodeCamp/freeCodeCamp] Update index.md (PR #49065)
Closed #49065.
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you are subscribed to this thread.Message ID: @.***>

#xxxxxارسال شده از دستگاه Galaxy من
-------- پیام اصلی --------از: Akash Kumar @.> تاریخ: ۲۰۲۳/۱/۱۹  ۱۷:۵۱  (GMT+03:30) گیرنده: freeCodeCamp/freeCodeCamp @.> گیرنده کپی: Subscribed @.***> موضوع [freeCodeCamp/freeCodeCamp] Update index.md (PR #49065) Checklist:
I have read freeCodeCamp's contribution guidelines.
My pull request has a descriptive title (not a vague title like Update index.md)
My pull request targets the main branch of freeCodeCamp.
I have tested these changes either locally on my machine, or GitPod.
Closes #XXXXX
You can view, comment on, or merge this pull request online at:
  https://github.com/freeCodeCamp/freeCodeCamp/pull/49065
Commit Summary
e495837  Update index.md
File Changes  (1 file)
M
docs/index.md
(2)

Patch Links:
https://github.com/freeCodeCamp/freeCodeCamp/pull/49065.patch
https://github.com/freeCodeCamp/freeCodeCamp/pull/49065.diff
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you are subscribed to this thread.Message ID: @.***>


Possible memory leakage in curl slist

When setting up a transfer, we use curl slist, which needs to be freed manually.
https://curl.se/libcurl/c/curl_slist_free_all.html

Heh, when I pointed it out in the review, I had a suspicion that I must have screwed this up as well 😅


elf: object pinning with custom configs

Introduce object pinning with custom configs. When a module is loaded with parameters of custom config, pin the object with a path defined in the custom config. The actual pinnned object is visible as /sys/fs/bpf/<pin_path>. The pin_path can be any path, e.g. a normal path like ns1/testgroup1, or hash of a particular path.
To cover the test case of loading modules with custom pinning config, also add a test for loading module with specific parameters, and checking for actual pinned object under /sys/fs/bpf.

From a cursory look:
PinObjectCustom  should allow the user to pin an object to a custom path, but it doesn't do that atm. I.e. the hashing of customPath is not something that should be in gobpf.
We have a SectionParams map that can be passed to Load() to set individual parameters for sections in an .elf file:
https://github.com/iovisor/gobpf/blob/master/elf/elf.go#L442-L449
Did you try to add a new field to SectionParams instead? For instance
type SectionParams struct {
	PerfRingBufferPageCount   int
	SkipPerfMapInitialization bool
        PinConfig MapPinConfig
}

(With a better name than PinConfig maybe :)
func NewModuleWithCustomCtx(fileName string, customCtx map[string]*CustomContext) *Module doesn't feel right IMHO:

context or ctx in Go land usually is associated with https://godoc.org/context
While the argument customCtx sounds very generic it serves only a very specific purpose at the same time

@schu good point about Load(parameters), I agree that sounds better than hooking the new feature on NewModule()

I think we can further simplify the logic and code by unifying the handling of PIN_GLOBAL_NS and PIN_CUSTOM_NS. Ultimately, PIN_GLOBAL_NS is just a custom path following a convention.
Something like this maybe:
func createPinPath(path string) (string, error) {
        err := bpffs.Mount()
        if err != nil {
                return "", err
        }
        err = os.MkdirAll(filepath.Dir(path), syscall.S_IRWXU)
        if err != nil {
                return "", fmt.Errorf("error creating map directory %q: %v", filepath.Dir(path), err)
        }
        return path, nil
}

func validateMapPath(path string) error {
        return nil // TODO
}

func getMapNamespace(mapDef *C.bpf_map_def) string {
        namespacePtr := &mapDef.namespace[0]
        return C.GoStringN(namespacePtr, C.int(C.strnlen(namespacePtr, C.BUF_SIZE_MAP_NS)))
}

func getMapPath(mapDef *C.bpf_map_def, mapName string, params SectionParams) (string, error) {
        var mapPath string
        switch mapDef.pinning {
        case PIN_OBJECT_NS:
                return "", fmt.Errorf("not implemented yet")
        case PIN_GLOBAL_NS:
                namespace := getMapNamespace(mapDef)
                if namespace == "" {
                        return "", fmt.Errorf("map %q has empty namespace", mapName)
                }
                mapPath = filepath.Join(BPFFSPath, namespace, "globals", mapName)
        case PIN_CUSTOM_NS:
                if params.PinPath == "" {
                        return "", fmt.Errorf("no pin path given for map %q with PIN_CUSTOM_NS", mapName)
                }
                mapPath = filepath.Join(BPFFSPath, params.PinPath)
        default:
                // map is not pinned
                return "", nil
        }
        if err := validateMapPath(mapPath); err != nil {
                return "", err
        }
        return createPinPath(mapPath)
}

I feel it would be easier to read and avoids the ErrNoPinPath logic.

We should start having a Documentation/ directory.

[ ] explaining what is pinning and the bpffs
[ ] why it improves the situation compared to the previous solutions in "tc-exec" or SCM_RIGHTS (see description in man tc-bpf(8), search for "can then share eBPF maps with each other" for more context)
[ ] different pinning options
[ ] comparisons with other projects doing pinning (iproute2/tc, perf, Linux bpf-samples)
[ ] when are the map resetted

@schu Updated. Thanks!

We need to handle CloseExt()

Updated.

CloseExt() already cleaned up maps when Unpin option is set in closeOptions. However, unpinMap() still cleaned up only global maps. So I had to add another option PinPath to closeOptions, for unpinning the path correctly for both global and custom namespaces.
I also updated integration tests, to verify the unpinned path.
I wrote a simple documentation about object pinning. As discussed, the document doesn't include all other use cases, but is just a simple README.

@schu Done. Thanks!

@alban @iaguis Updated. Hopefully I addressed every comment.


SHR object model

Pull requests into Flux require the following. Submitter and reviewer should :white_check_mark: when done. For items that are not-applicable, note it's not-applicable (N/A) and :white_check_mark:.
Submitter:
This pull request creates Javascript objects for progression, toxicity, and staging from JSON. Sample code in src/tools/index.js
Running the Application

[ ] Manually tested in Chrome
[ ] Manually tested in IE

Documentation

[ ] This pull request describes why these changes were made
[ ] Recognizes any potential shortcomings/bugs in the description
[ ] Cheat sheet is updated
[ ] Demo script is updated
[ ] Documentation on Wiki has been updated
[ ] Additional technical components and libraries are documented and added to wiki as needed

NoteParser

[ ] Note parser has been updated if structured phrases change

Code Quality

[ ] 4-space indents - convert any tabs to spaces
[ ] Use public class field syntax for binding functions - ex. handleChange = () => { ... };
[ ] Code is commented

Tests

[ ] Existing tests passed
[ ] Added UI tests for slim mode
[ ] Added UI tests for full mode
[ ] Added backend tests for fluxNotes code
[ ] Added note parser examples to test new functionality

Reviewer 1: Name

[ ] Code is maintainable and reusable, reuses existing code and infrastructure where appropriate, and accomplishes the task’s purpose
[ ] The tests appropriately test the new code, including edge cases
[ ] You have tried to break the code

Reviewer 2: Name

[ ] Code is maintainable and reusable, reuses existing code and infrastructure where appropriate, and accomplishes the task’s purpose
[ ] The tests appropriately test the new code, including edge cases
[ ] You have tried to break the code

We are using new ES6 object model so I will close this out.


prediction module neural net architectures

Dear all,
Does someone know where the different neural net architectures are defined (i.e layers, number of neurons, etc ...) that are used in the prediction module.
I figured where the weights of these models are saved ("/modules/prediction/data") however, i cannot find where the models themselves are defined and hence trained.
Thank you in advance

I would also like to know. I need to slightly modify a few of the Apollo models before deploying in the environment.