Simplifying the procedure of sending message through MessageReceiver interface.

It would be very good to simplify this process by adding another method into this interface.
The method could look like default void sendMessage(Object... message) and then process all the objects using Text.of method to later use the default sendMessage method to handle it.

 I don't agree with adding such a method.

Well I will just give a link to the discussion on forum: [https://forums.spongepowered.org/t/lets-simplify-messagereceivers-method-sendmessage](Let’s simplify MessageReceiver’s method sendMessage())

I personally agree with @kashike here. In my opinion, a method like this would be only useful for temporary debugging. In all other cases you should either:

Define a static constant for the Text or TextTemplate instead of recreating it every time the message is sent.
Load the messages from a configuration to allow users to change (e.g. to translate) them.

Finally, a third reason is that Object... allows passing literally everything to the sendMessage method. There is no longer any validation of the parameters because all combinations are valid.
This is a problem if you actually want to call one of the other methods. Right now you get a compile error if you forget to build a Text object.
Let's assume we have an object of a class called Mail. With the new method, player.sendMessage(mail) is silently compiled using the Object... method and will send com.example.plugin.Mail@78308db1 to the player. We actually wanted to call player.sendMessage(mail.getText()), but there is no way to notice this until we test this at runtime.
 The first call will send AB instead of A and B on separate lines.

You want to call sendMessage(TextTemplate, Map<String, TextElement>) but you pass a map with an incompatible generic signature. Even though Text extends TextElement, the following is silently compiled using the Object... method instead of sending the formatted TextTemplate:
Map<String, Text> arguments = ImmutableMap.of("argument1", Text.of("Test"));
player.sendMessage(template, arguments);

We've had a similar discussion several times before, primarily for the addition of a String... overload: https://github.com/SpongePowered/SpongeAPI/issues/763
The reason against an Object... overload is similar: one of the purposes for the additional Text.of call is to make it absolutely clear that we can only send instances of Text. You can neither send raw color codes like on Bukkit nor throw all your API objects into the chat - you will always have to build a properly formatted Text.
I'm going to close this issue for now, feel free to comment here if you would like to discuss this further.


Root tenant RBAC

Added logic to bypass tenant scoping if the current tenant is the root tenant (Tenant 0).
Tenant 0 can see resources owned by any tenant.

https://trello.com/c/Yhly16Sl

@jrafanie Please review.

:+1: LGTM


Integrate AI-Driven Anomaly Detection and Predictive Analytics into Resource Plotting Script

This Pull Request updates the plot.py script to include advanced AI-driven features for resource analysis and prediction. The enhancements provide deeper insights into CPU and memory usage, anomaly detection, and future resource predictions. The refactoring also improves code readability and adheres to best practices.
Key Updates

Exception Handling Improvement

Replaced the generic Exception with a more specific FileNotFoundError to provide clearer error handling when the profile result file does not exist.

Cognitive Complexity Reduction

Refactored the get_each_method_maximun_cpu_mem method to reduce cognitive complexity. This refactoring involved breaking down the method into smaller, more manageable functions: - update_max_values: Updates the maximum CPU and memory usage values for the current method execution period. - update_method_exec_info: Updates the method execution information with the maximum values and manages the transition to the next method execution period.

Redundant continue Removal

Cleaned up unnecessary continue statements to streamline the code logic and improve readability.

AI-Driven Features

Anomaly Detection: Added the analyze_data method using Isolation Forest to detect anomalies in CPU and memory usage. This helps identify unusual patterns or outliers in the resource usage data.
Predictive Analytics: Introduced the predict_resource_usage method employing Linear Regression to forecast future CPU and memory usage based on historical data. This feature aids in predicting resource demands and planning accordingly.
Automated Insights: Implemented the generate_insights method to provide textual insights from the data analysis and predictions. This method summarizes detected anomalies and provides future usage predictions.

Improved Plotting

Refactored Plotting Code: Abstracted common plotting logic into helper methods: - plot_method_exec_info: Handles the plotting of method execution information, including vertical lines and annotation points. - prepare_method_data: Prepares data for plotting the key points, including color coding based on results.
Enhanced Visualization: Updated the plot to include AI-generated insights and predictions, providing a more comprehensive view of the resource usage data.

These updates enhance the functionality of the script by integrating advanced AI techniques for resource analysis, improving code maintainability, and delivering actionable insights based on the collected data.

This update introduces significant improvements to the plot.py script, enhancing its functionality with advanced AI features and refactoring the existing code for better readability and maintainability. The following changes have been implemented:

Enhanced Exception Handling: Replaced the generic Exception with FileNotFoundError for clearer error handling related to file existence.

Refactored Code for Reduced Complexity: The method get_each_method_maximun_cpu_mem has been refactored to reduce cognitive complexity. This was achieved by breaking it down into smaller methods:

update_max_values: Updates maximum CPU and memory usage for the current method execution period.
update_method_exec_info: Updates method execution information and manages transitions between execution periods.

Removed Redundant Logic: Cleaned up unnecessary continue statements, streamlining the code.

AI-Driven Features:

Anomaly Detection: Added the analyze_data method utilizing Isolation Forest for detecting anomalies in CPU and memory usage, identifying unusual patterns in the data.
Predictive Analytics: Introduced the predict_resource_usage method using Linear Regression to forecast future CPU and memory usage based on historical data, aiding in resource planning.
Automated Insights: Implemented the generate_insights method to provide actionable textual insights from data analysis and predictions.

Improved Plotting:

Refactored Plotting Code: Abstracted common plotting logic into helper methods:

plot_method_exec_info: Manages the plotting of method execution details, including vertical lines and annotations.
prepare_method_data: Prepares data for plotting, including color coding based on results.

Enhanced Visualization: Updated plots to include AI-generated insights and predictions for a comprehensive view of resource usage.

These enhancements offer deeper insights into resource usage, improved code structure, and a more informative visualization.
Feel free to adjust the comment based on specific details or preferences you have for the pull request.


Script receives 500 Server Error on fn long_url

.venv/Lib/site-packages/hdrezka/post/post.py:18
Just commented this line and 200 answer received from rezka
I am using Python 3.9 on Win 11

No problem on python 3.11

I recommend updating python to version >=3.10 and installing the latest version of the package.

If there is no such possibility:
The hdrezka API has undergone some changes, but you can manually make changes to version 1.1.1 (the latest version supporting python 3.9) if necessary.
In the hdrezka/post/urls.py file:
Line 12:
_match_quality_int = re.compile(r'(\d+)[pi]\s*($|\w+)').match

Replace with:
_match_quality_int = re.compile(r'(\d+)([piK])\s*($|\w+)').match

see this update.
Function Content
def short_url(url: str) -> str:

and
def long_url(url: str) -> str:

Replace with:
    return url

see https://github.com/NIKDISSV-Forever/HDRezka/issues/4
And (line 46)
        _i, self.addon = _i.groups()

Replace with:
        _i, u, self.addon = _i.groups()
        if u == 'K':
            _i += '000'

Note https://github.com/NIKDISSV-Forever/HDRezka/issues/5: if what you are going to play the video through does not support redirection, you will need to manually process the 301/302 codes


dont auto-save interactive message attachments

No content

Issue created by BlueBubbles Bot in the BlueBubbles commnity on behalf of @tneot01 in #android-requests.

Fixed, dev branch


webid diagnostic link broken auth.my-profile.eu

When cimba login fails  at http://cimba.co/#/login , it pops up a dialog panel which points you to
https://auth.my-profile.eu/auth/index.php?verbose=on
to diagnose the problem, but that domain doesn't exist:
$ nslookup my-profile.eu
Server:		<IP_ADDRESS>
Address:	<IP_ADDRESS>#53

Non-authoritative answer:
Name:	my-profile.eu
Address: <IP_ADDRESS>

$ nslookup auth.my-profile.eu
Server:		<IP_ADDRESS>
Address:	<IP_ADDRESS>#53

** server can't find auth.my-profile.eu: NXDOMAIN

(Not sure why my login failed either -- might be separate bug)

Also: the diagnostic window fades away which is frustrating!  Wait till I dismiss it.


RSpec Issue with RVM on Linux and OSX

Having some issues using this gem with RVM.
As far as I can tell there is an issue with the file being located within the core rspec namespace. Intially I thought it was an RVM thing however I have run the test in a bare env with only the environment variables required for ruby and gem to work, this had the same issue.
Based on the messages we exchanged yesterday I understand why it is located in that namespace, however having hacked the project to move it to a empty namespace, similar to Fuubar formatter, I have made the gem work.
As I am quite a new to ruby I am not entirely sure my rather large changes are necessary. That said I have a feeling there were some other minor issues I flushed out while doing so. These are mainly related to requires statements and were uncovered when i added a spec to try out the changes.
I have checked in my updates to https://github.com/wolfeidau/rspec_junit_formatter if you could have a look at what I have done that would be great.
    $ rspec spec
    /home/markw/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- j_unit_formatter (LoadError)
    	from /home/markw/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from /home/markw/.rvm/gems/ruby-1.9.3-p0@rails31/gems/rspec-core-2.7.1/lib/rspec/core/configuration.rb:522:in `rescue in custom_formatter'
    	from /home/markw/.rvm/gems/ruby-1.9.3-p0@rails31/gems/rspec-core-2.7.1/lib/rspec/core/configuration.rb:519:in `custom_formatter'
    	from /home/markw/.rvm/gems/ruby-1.9.3-p0@rails31/gems/rspec-core-2.7.1/lib/rspec/core/configuration.rb:301:in `add_formatter'
    	from /home/markw/.rvm/gems/ruby-1.9.3-p0@rails31/gems/rspec-core-2.7.1/lib/rspec/core/configuration_options.rb:22:in `block in configure'
    	from /home/markw/.rvm/gems/ruby-1.9.3-p0@rails31/gems/rspec-core-2.7.1/lib/rspec/core/configuration_options.rb:22:in `each'
    	from /home/markw/.rvm/gems/ruby-1.9.3-p0@rails31/gems/rspec-core-2.7.1/lib/rspec/core/configuration_options.rb:22:in `configure'
    	from /home/markw/.rvm/gems/ruby-1.9.3-p0@rails31/gems/rspec-core-2.7.1/lib/rspec/core/command_line.rb:17:in `run'
    	from /home/markw/.rvm/gems/ruby-1.9.3-p0@rails31/gems/rspec-core-2.7.1/lib/rspec/core/runner.rb:80:in `run_in_process'
    	from /home/markw/.rvm/gems/ruby-1.9.3-p0@rails31/gems/rspec-core-2.7.1/lib/rspec/core/runner.rb:69:in `run'
    	from /home/markw/.rvm/gems/ruby-1.9.3-p0@rails31/gems/rspec-core-2.7.1/lib/rspec/core/runner.rb:10:in `block in autorun'

OK I did an strace while running rspec with the 1.1 version and rspec seems to be searching for the following.
<EMAIL_ADDRESS>{st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
<EMAIL_ADDRESS>0x7fff41d4afa0) = -1 ENOENT (No such file or directory)
<EMAIL_ADDRESS>0x7fff41d4afa0) = -1 ENOENT (No such file or directory)
<EMAIL_ADDRESS>0x7fff41d4afa0) = -1 ENOENT (No such file or directory)

As you can see it cant locate the file so all bad.. The file that is present in this folder is named rspec_junit_formatter.rb
Rather than the configuration below, from the ReadMe
    --format JUnitFormatter
    --out rspec.xml

If i use the following it works!
    --format RspecJunitFormatter
    --out rspec.xml

We use rspec_junit_formatter on linux with rvm in our jenkins builds. I suspect you're not loading the gem before using the formatter.
Gems need to be required to be added to the load path by rubygems. In this case, you must require "rspec_junit_formatter" before using j_unit_formatter.
Try:
rspec -r rspec_junit_formatter -f j_unit_formatter spec

I'll update the README so this is a little more clear, I notice I've used --format RspecJunitFormatter and --format JUnitFormatter in there which is probably not helping!

Yeah being new to Ruby I think I took a very long path to the same destination, although I did learn a lot in the process.
I am planning to use it with Atlassian Bamboo CI server for pretty much the same reason.
/agree the issue I was having was mostly triggered by README
Thanks a lot for replying so promptly and sorry for hassling you so much :P

Not a problem! Thanks, the README has been updated in 1f1792c17d1f4a0fe64e4ee6806641bc6c593daf. :-)


Corrected links

Configuring and Gekko are capitalized.

What kind of change does this PR introduce? (Bug fix, feature, docs update, ...)

docs update

What is the current behavior? (You can also link to an open issue here)

nothing, this links were not working.

What is the new behavior (if this is a feature change)?

now when someone click in the link it sends to the correct section of the documentation

Other information:

:)

@askmike


Better debugging with MSI Mystic Light

Some easier workflow to debug the function calls:

Install Api Monitor http://www.rohitab.com/apimonitor,
Install MSI Mystic Light,
Start MSI Mystic Light,
After starting, stop MSI_MysticLight2_service (Services Manager),
Run API Monitor v2 32-bit in Admin mode,
In API Monitor terminate LED Keeper.exe process,
In API Monitor add External DLLs from MSI Mystic Light directory: LEDControl.dll, MBAPI_x86.dll, SMBUS_Engine.dll,
Enable monitoring of all functions for these DLLs,
Start a new process: LED Keeper.exe from API Monitor, attach using Remote Thread (Extended),
Tinker with MSI Mystic Light and see a method calls executed, like: ControlCorsairProDRAMLED,  RenesasLEDControlV3, SMB_ByteWrite,
Install .NET Reflector,
Open in .NET Reflector the LEDKeeper.exe to see all annotated enums and method calls to LEDControl.dll,
Cross-check enums with method calls and SMBUS calls.

It seems to work. I have very nice stream of SMB_ByteWrites.
It seems that MSI Mystic Light supports a majority of RGB-controlled devices (RAMs (G.SKILL, Corsair PRO, etc.), GFX, etc.).

To aid the debugging of method calls. This is the interface of MBAPI_x86.dll:
https://gist.github.com/ayufan/dca808e3927ddc3a204043348b43f140

OK. I came-up with this: https://github.com/ayufan/control-msi-rgb.
It seems that recent MSI boards use SMBus and slightly different protocol.

open LEDKeeper.exe in dnSpy find MIS_LED.CControl and you just got documentation on how to control every msi motherboard in existence that has RGB
just ctrl+f for your model. for example mine is MS-7B12
and i find a function like this:
public void NUC126_7B12_Set_LED_Data(Nuvoton_7B12_MCU.DeviceName Area, byte style, bool bAllBoard, byte r, byte g, byte b, byte speed, byte bright, byte ColorSel, byte JCType = 1, byte FanType = 1)
{
	byte b2 = bAllBoard ? 1 : 0;
	byte b3 = (byte)((int)bright << 2 | (int)speed);
	byte b4 = (byte)((int)b2 << 7 | (int)bright << 2 | (int)speed);
	byte b5 = (JCType == 0) ? 19 : 5;
	byte b6 = 0;
	byte b7 = bAllBoard ? 1 : 0;
	byte b8 = (byte)((int)ColorSel << 7 | (int)FanType << 1 | (int)JCType);
	byte b9 = (byte)((int)ColorSel << 7 | (int)b6);
	byte b10 = (byte)(b5 << 2);
	byte b11 = (byte)((int)ColorSel << 7 | (int)b7);
	if (bAllBoard)
	{
		App.Device_7B12.Nuvoton_7B12_Data[41] = style;
		App.Device_7B12.Nuvoton_7B12_Data[42] = r;
		App.Device_7B12.Nuvoton_7B12_Data[43] = g;
		App.Device_7B12.Nuvoton_7B12_Data[44] = b;
		App.Device_7B12.Nuvoton_7B12_Data[45] = b4;
		App.Device_7B12.Nuvoton_7B12_Data[49] = b11;
		App.Device_7B12.Nuvoton_7B12_Data[50] = 0;
	}
	else
	{
		switch (Area)
		{
		case Nuvoton_7B12_MCU.DeviceName.JRGB1:
		case Nuvoton_7B12_MCU.DeviceName.OnBoardLED1:
		case Nuvoton_7B12_MCU.DeviceName.OnBoardLED2:
		case Nuvoton_7B12_MCU.DeviceName.OnBoardLED3:
		case Nuvoton_7B12_MCU.DeviceName.OnBoardLED4:
		case Nuvoton_7B12_MCU.DeviceName.OnBoardLED5:
		case Nuvoton_7B12_MCU.DeviceName.OnBoardLED6:
		case Nuvoton_7B12_MCU.DeviceName.JPIPE1:
		case Nuvoton_7B12_MCU.DeviceName.JPIPE2:
		case Nuvoton_7B12_MCU.DeviceName.JPIPE3:
		case Nuvoton_7B12_MCU.DeviceName.JPIPE4:
		case Nuvoton_7B12_MCU.DeviceName.JRGB2:
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 1)] = style;
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 2)] = r;
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 3)] = g;
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 4)] = b;
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 5)] = b3;
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 9)] = b8;
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 10)] = 0;
			if (!this.b7B12_Special)
			{
				App.Device_7B12.Nuvoton_7B12_Data[45] = b4;
				App.Device_7B12.Nuvoton_7B12_Data[49] = b11;
			}
			break;
		case Nuvoton_7B12_MCU.DeviceName.JRAINBOW:
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 1)] = style;
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 2)] = r;
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 3)] = g;
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 4)] = b;
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 5)] = b3;
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 9)] = b8;
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 10)] = 0;
			break;
		case Nuvoton_7B12_MCU.DeviceName.JCORSAIR:
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 1)] = style;
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 2)] = r;
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 3)] = g;
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 4)] = b;
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 5)] = b3;
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 9)] = b8;
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 10)] = b10;
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 11)] = style;
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 12)] = r;
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 13)] = g;
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 14)] = b;
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 15)] = b3;
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 19)] = b9;
			App.Device_7B12.Nuvoton_7B12_Data[(int)(Area * Nuvoton_7B12_MCU.DeviceName.OnBoardLED6 + 20)] = b10;
			break;
		}
	}
}

Nuvoton_7B12_MCU.DeviceName gives me all the zones along with thier id's
but this function just sets some buffer but does not send anything.
so then we need to look where the function  is used. a good place is MSI_LED.CControl.SetAllLEDOff() and we find something like this:
case EnumChipest.NUC126_1:
	this.NUC126_7B12_Set_LED_Data(Nuvoton_7B12_MCU.DeviceName.JPIPE4, 0, false, 0, 0, 0, 0, 10, 1, 1, 1);
	this.NUC126_7B12_Set_LED_Data(Nuvoton_7B12_MCU.DeviceName.JRGB1, 0, true, 0, 0, 0, 0, 10, 1, 1, 1);
	this.NUC126_7B12_Set_LED_Data(Nuvoton_7B12_MCU.DeviceName.JRAINBOW, 0, false, 0, 0, 0, 0, 10, 1, 1, 1);
	this.NUC126_7B12_Set_LED_Data(Nuvoton_7B12_MCU.DeviceName.JCORSAIR, 0, false, 0, 0, 0, 0, 10, 1, 1, 1);
	App.Device_7B12.Set_AllBoard(App.Device_7B12.Nuvoton_7B12_Data);

tn this case App.Device_7B12.Set_AllBoard tells us how the data is sent to the device
public bool Set_AllBoard(byte[] data)
{
	bool result;
	if (data.Length < 162)
	{
		result = false;
	}
	else if (data[0] != 82 || data.Length < 162)
	{
		result = false;
	}
	else
	{
		int num = HID_Basic.SetFeature(this.device, data, 162UL);
		Thread.Sleep(10);
		result = (num == 1);
	}
	return result;
}

in this case we can see that all it does it writes the buffer to usb
Now we can use USBPcap and wireshark to look at the packet
In this case it's a control transfer with
request_type = 0x21
bRequest = 9
wValue = 0x0352
wIndex = 0
and the body that we have seen in code
Now that we know all that we need to control it manually, we can use libusb to send the data.


[Question] How can I exclude duplicate completion candidates?

I think it can be done by changing dup to 0 in custom completion source, but I don't know how to specify LSP in custom completion source.

I think we don't provide this for now, but maybe I can add an option for that.

I think we don't provide this for now, but maybe I can add an option for that.

Can you try #326 and see if it works for you?

Can you try #326 and see if it works for you?

Thank you for your reply.
Duplicates have been excluded in the #326  settings.

Thank you for your reply.
Duplicates have been excluded in the #326  settings.

Merged!

Merged!

confirmed. Thank you!

confirmed. Thank you!


Add server_timeout option

This pull request is very similar to #124
Current server timeout 10 second is enough to complement using cache. However, it is too short for me to create cache of huge library like pandas. It takes jedi about 60 seconds to create cache of pandas. So I want to set server timeout manually in init.vim with default value 10.
Example
let g:deoplete#sources#jedi#server_timeout = 60

LGTM, let's see what @tweekmonster thinks and says.

@KanchiShimono Thanks, LGTM too.
@blueyed @tweekmonster  I'm back. thanks for managed deoplete-jedi repository.

I think it is better just to remove this server timeout feature as it does not really solve a problem.

It is merge-able?

I think this patch good except that the default server_timeout=10 will make jedi not work on popular package such as numpy on slow machine.  I will suggest completely remove the server timeout feature and I'd like to hear @tweekmonster's opinion on this.

Hm.  OK.

I will suggest completely remove the server timeout feature and I'd like to hear @tweekmonster's opinion on this.

I think deoplete-jedi should support async feature and remove the timeout.

deoplete-jedi has code for deoplete async feature now but it is very buggy for me.  I am debugging now.
The timeout was introduced to solve #58. But it not only does not solve it and but also introduces more serious problems.

Hm.  I will check the issue.

I think it is better just to remove this server timeout feature as it does not really solve a problem.

I have read the issue.
I don't think we should remove the timeout.

The documentation should be updated.

The timeout was introduced to solve #58. But it not only does not solve it and but also introduces more serious problems.

Please describe the more serious problems.

The problem is that the first compilation of many large package takes very long time.  Using a timeout will just make jedi stop working on these packages, which is more serious than the rare problem in #58 .  There is never a good default value for such timeout.
For #58, why not just disable deoplete on large files?  The situation is rare and even the buffer-based completion is slow anyway.

I have tested get-pip.py.  It is not useable.
OK.  I will implement the feature.

Useable for me.

It is Python crashed for me.

I don't understand that.  Another bug?

Another try.  It worked.
I think it is outof memory crash.

I will add limit option in deoplete.
It checks the current buffer size.

Please note that there was a bug were Jedi would loop endlessly, never stopping and eating all CPU.
In this case a timeout is needed/useful.

In this case a timeout is needed/useful.

Yes.

Hi everyone!  I'm sorry I've been out of the loop.  I haven't tested this PR yet but I don't see anything immediately wrong with it.
The only reason I decided to add a timeout is because this became a UX issue.  If the server hangs, deoplete becomes completely unusable until nvim is restarted.  The biggest issue for me is the server hanging without the user noticing potentially for hours keeping the CPU pegged and the fans running at full speed.  This would be especially bad for anyone running on batteries.  This is why I feel that a long timeout such as the one suggested in #126 is not ideal.  I actually wanted the timeout to be lower.  10 seconds is a long time if you're expecting near-instant results.
Maybe to deal with @zhou13's concern for slow completions on slow hardware, we could have a whitelist of packages that need more time?  The user can set their own base timeout and a whitelist of packages will have their own timeout multipliers.  So for numpy, timeout * 3 and pandas would need timeout * 10 or something along those lines.

The user can set their own base timeout and a whitelist of packages will have their own timeout multipliers.

Hm.  It seems nice.

Hi everyone! I'm sorry I've been out of the loop. I haven't tested this PR yet but I don't see anything immediately wrong with it.

I should merge it?

I should merge it?

I still haven't been able to test it myself.  If you tested it and it works/doesn't crash, then yes.

OK.  I will test it.

I have tested it and it works.

@tweekmonster I just want the deoplete-jedi work on my macbook air by default without additional configuration.  Now it doesn't work for some large packages. I don't think we have the resource to maintain a whitelist with good quality.
If this feature is important to someone (I never experienced the bug you described), I think an infinite timeout (or 60s) by default might be a good idea?

Merged.

@zhou13 Sorry for the delayed reply again.  I personally experienced the long-hanging server due to a bug in Jedi that caused an infinite loop.  Since it happened before I was going to sleep, I let it go to see if it would ever stop.  The process stayed running at 100% CPU over night.  I can't remember the exact bug, but it's what prompted me to treat Jedi as a potential rogue component that requires safe boundaries.  I think it's especially important because Jedi is basically magic and our only real control over it is turning it on or off.
I totally understand your perspective, but a long hang puts me at odds with what you want.  IMO, a 60s timeout is too long for as-you-type results.  But, it may be possible to dynamically spawn threads for module completions.  If a completion is attempted for an in-progress module, it's silently ignored.  For modules that haven't been cached or started yet, spawn a new thread.  In this case, I would be fine with having a more reasonable timeout like 5min.

I don't think we have the resource to maintain a whitelist with good quality.

Well, we already know that numpy and pandas are pretty slow.  I think sklearn is, too.  Beyond that, I don't think there's much else.   If there is more, I think a PR to update the list would be fine.
Most of the slow modules are very popular in the science community and heavily use C or cython code, so I think it's fairly easy to verify whether or not they should be whitelisted.

@tweekmonster

I personally experienced the long-hanging server due to a bug in Jedi that caused an infinite loop.

For bugs you mentioned in jedi, I never met them.  Could you verify if they still exist.  If I meet them, I will try to fix it in jedi or at least submit a bug report to jedi.  Dead loop bugs are serious and fixing them can be a better strategy.

IMO, a 60s timeout is too long for as-you-type results.

First completion in jedi is never as-you-type.

If there is more, I think a PR to update the list would be fine.
Most of the slow modules are very popular in the science community and heavily use C or cython code, so I think it's fairly easy to verify whether or not they should be whitelisted.

PyPI has 109519 packages now.   Yes it is possible to whitelist all the packages you use daily for machine learning.  But do you know what python packages are popular among physicists?
Anyway, I can now put let g:deoplete#sources#jedi#server_timeout = 1000 in my vimrc to disable this feature and problem is solved at least for me.  However, I found that the README.md is not updated to include the documentation.

@zhou13

Dead loop bugs are serious and fixing them can be a better strategy.

Sure, but like @tweekmonster said already, we should handle it like a black box that can fail.
Apart from that: Jedi itself is lacking helping hands, and Dave would certainly appreciate your help.
The latest issue in this regard is https://github.com/davidhalter/jedi/issues/929.

I found that the README.md is not updated to include the documentation.

Please consider creating a PR then.. :)

For bugs you mentioned in jedi, I never met them. Could you verify whether they still exist. If I meet them, I will try to fix it in jedi or at least submit a bug report to jedi. Dead loop bugs are serious and fixing them can be a better strategy.

That would be the best strategy, but my problem was from a long time ago.  @blueyed recently found another one.  If Jedi hangs for a long time because of a new edge case, I don't want my development environment to become useless until it's fixed.  I want the problem to seem like a hiccup and I want to focus on my current tasks.  I can't stop the clock on my professional work to debug Jedi.  I don't think I'm the only one that feels this way.  What makes the situation more frustrating is if I'm actually working on this plugin when Jedi crashes or hangs.
IMO, the best strategy for dealing with this is to gracefully stop the Jedi server if it shows signs of hanging.   What I'd like to focus on is how to continue this strategy while doing something that's well within our power to make this more manageable for your scenario.  I think a whitelist would be good for this.

PyPI has 109519 packages now.

That number doesn't reflect what is truly useful to a whole community of Python developers.  That community gets much smaller when you consider that we're talking about a Neovim plugin for Python.  For example this is only a tiny fraction of packages that makes that number meaningless:

hello world
my first module

These pages give a more realistic representation of what's popular on PyPI since they track whether or not those "important" packages are keeping up with standards since they dictate the Python version that long-term production projects can use:

http://python3wos.appspot.com/
http://pythonwheels.com/

Those are still just using PyPI's download counts which are affected by package mirrors.  The absolute download volume for those packages allows us to at least narrow our view.

Yes it is possible to whitelist all the packages you use daily for machine learning. But do you know what python packages are popular among physicists?

I can't speak for physicists, but I've worked with data scientists in the past and I would say anything listed on this page should be whitelisted: https://www.scipy.org/.  Almost all of the packages shown on that page have a history of being slow to load in normal use because they are simply large.  sklearn is the only one that's specifically for ML and is a separate project from Scipy.  I think a whitelist for those and a user-configurable whitelist is pretty reasonable.  The only packages that I can think of that might require whitelisting are related to NLP.
I'm pretty sure numpy/scipy would still cover physics projects.  If you trust that developers classify their packages correctly, you could see physics-related packages here: https://pypi.python.org/pypi?:action=browse&show=all&c=396&c=398   So, yes, we could pre-populate a whitelist with popular physics modules, but I'm not suggesting we use a whitelist to merely cover popular packages.  I just want to cover the ones that are well known exceptional cases.


Update create-service-now-tickets-in-cd-stages.md

Harness Developer Pull Request
Thanks for helping us make the Developer Hub better. The PR will be looked at
by the CODEOWNERS.
What Type of PR is This?

[ ] Issue
[ ] Feature
[ ] Maintenance/Chore

If tied to an Issue, list the Issue(s) here:

Issue(s)

House Keeping
Some items to keep track of. Screen shots of changes are optional but would help the maintainers review quicker.

[ ] Tested Locally
[ ] Optional Screenshot.

Please check the Execution Link of the Pipeline for the Website Draft URL. This is located in the Preview Step behind the Harness VPN and also is available in #hdh_alerts. E.g Website Draft URL: https://unique-id--harness-developer.netlify.app. Current Draft URL is: https://65f06405adbc3f15885c9372--harness-developer.netlify.app


Add pre-compile stage

Some method should be parsed at precompile stage, eg, w-include.

For now the precompile stage is based on comment functions, if we find a better use case, we can implement it.


Add project version to startup message

This change is added to see what version of Popple is used when starting
the application.
Closes #19

Merged as 4c18f0fe1036582d90d334d75eaaadf14aaab6bd
Thanks!


Add RegPool re-reg properties

In #870 I added a check for adding new pools. In this PR I add a small additional check for re-registering pools once they've been DeReged, and thus added to the retiring set.

@mgudemann

LGTM, took me a while to understand, but the added check means that if we register a pool and that pool was already registered, i.e., is already in stPools, then it must be in retiring in the source state and must not appear in retiring anymore in the target state, right?

Yes, that's exactly right. Although now that I re-read the STS rule, I am not sure if we're required to have the pool's hk in the source state, or if we merely want it to not be in the target state.
https://github.com/input-output-hk/cardano-ledger-specs/blob/62f05730b9f0b254c4cdd3c160640b720d7fa49f/shelley/chain-and-ledger/executable-spec/src/STS/Pool.hs#L62
I'll look into that and add a comment to explain what you stated above, for future readers.

After talking to Jared, I've learned that the source and target checks for retiring are both valid. I'm adding a comment documenting what the tests are checking (basically what Matthias said above), and then I'll merge this.


pythonPackages.allure_behave: init at 2.9.45

Description of changes
adds a missing package.
The thing I want ultimately is to give allure format support to behave.
This is just one step in that direction.
Definitely not a python guy, so happy to receive feedback.
Things done

Built on platform(s)

[X] x86_64-linux
[ ] aarch64-linux
[X] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
22.05 Release Notes (or backporting 21.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[ ] Fits CONTRIBUTING.md.

The ci passes for all architectures, I'm going to merge this PR for now, but I'm open to feedback should there be any later.


Support for Angular4/5

Is there any updated plugin for this which supports Angular 4/5?
Please let me know.

Not planned yet. Don't work now with Angular 2+

Ok


Updated the fn complete_template to distribute rewards to pixel contributors

[x] issue #31
[x] follows contribution guide
[x] code change includes tests
[x] breaking change

Updated the complete_template function to distribute rewards to pixel contributors, test now passes.

Thank you, nice work!


Add license file

How is this code licensed? The readme seems to refer to a LICENSE file, but I don't see one in the root of this repo. Also, the package.json file has a blank value for the license key.

Thanks, Justin. A LICENSE has been added.


VPN Pull Merge pull request #1 from pivpn/master

PiVPN Pull

This commit has zero changes and is possibly spam. @james-lasersoft I think this would be appropriate to close.

Agreed, I was thinking that myself and was waiting for some comments. Thanks


[FLINK-36185][core] Remove RuntimeContext#getExecutionConfig

What is the purpose of the change
Remove RuntimeContext#getExecutionConfig
Brief change log
Remove RuntimeContext#getExecutionConfig
Verifying this change
This change is a trivial rework / code cleanup without any test coverage.
Does this pull request potentially affect one of the following parts:

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

Documentation

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

After discussing with @dianfu , this PR temporarily disables the PyFlink end-to-end case that uses Kafka legacy source. @dianfu will address the necessary fixes specifically for the PyFlink cases.


The latest version tag problem

Hi @MrSaints , I am the member of cdnjs, and we wants to host this repository. However, I found that that the latest  version tag about this repository is v2.2.1, but it seemed that the latest version is 2.4.7 according to the package.json file.
Could you help me update the version tag? Thanks!

cdnjs/cdnjs#9219

The latest release is actually 2.4.4 (https://github.com/MrSaints/Morphext/releases). The v2.2.1 should have been 2.2.1 (without the v).
Master is on 2.4.7, but I don't think it matters that much since the changes have mostly been on the dev side. That is, it does not affect the compiled code.
I'm happy to release the most up-to-date version anyway 👍 Let me know if there's anything else I need to do to get it to work with cdnjs.
Thanks!

Hi @maruilian11 @nolsherry @filipsedivy, I'm awaiting your response on this. I'll be closing this issue off in the coming weeks if it goes unanswered. Thanks!

Hi @MrSaints, sorry for the late reply.
If you think it's ok to not host 2.4.7 on cdnjs, I think we can close this issue.
We only need you to help keep releasing up-to-date tags which will affect the compile code 👍 Thank you!

Hi @maruilian11, yes, I'm okay with 2.4.4 being released on cdnjs. I'm assuming once I release a new tag it will update automatically on cdnjs?

@MrSaints Yes, our bot will update it in few hours after you release.

@maruilian11 Great! Well, let me know if there's anything you need me to do / help with 😄 Thanks!


Add repo edit

Before I yak-shave my way into a pointless pit, I'm submitting this PR for early review. Let me know what it's missing to be accepted and/or what I should be doing differently.

This looks good to me

Sweet. Thanks.


Fixed temp file path construction bug

Obviously there was something wrong about the construction of temporary file paths (trying to .split() an array ...).

Thanks Joschi!!

 Thanks for your work! :)


Revert "(MODULES-3236) Update mongoDB 3.x bindIp configuration parame…

…ter"
This commit wasn't compatable with mongodb 2.x
https://bugs.launchpad.net/tripleo/+bug/1567831
This reverts commit c2d92004bdc5b6e3d0ac5bbc9c70e312100c0725.

centos is still using mongodb 2.6

it also looks like this comes from an actual bug in mongodb, the documentation says the old non-yaml format for the config file is preserved for backward compatibility from 2.4 [1] so I don't think the config key should be renamed there.

https://docs.mongodb.org/v3.0/reference/configuration-options/#configuration-file

It is weird because MongoDB 2.6 does support bindIp parameter:
https://docs.mongodb.org/v2.6/reference/configuration-options/#net.bindIp
I'm trying to reproduce the bug now.

I confirm MongoDB 2.6.11 is not working with bindIp:
mongod[29024]: Error parsing INI config file: unrecognised option 'bindIp'
Which means this revert is valid.

@ryayon it seems like your patch is breaking 2.6.x deployments, even though doc says it should work it is not. Do you have thoughts?

@EmilienM, I just have opened the [MODULES-3248 ticket|https://tickets.puppetlabs.com/browse/MODULES-3248].
I will only work on 3.x configuration file so this ticket will be the first step.
Next I will update the 3.x configuration variable name one by one.

In addition to that, [MongoDB 2.6 will be end of life in some months|https://www.mongodb.com/blog/post/mongodb-2-6-end-of-life] so it is not urgent to update its configuration part.

@ryayon revert is now merged. Let me know if you want to work on the patch together and feel free to ping me on github or IRC (EmilienM, freenode) to continue this work.
Thanks!


workflows/deploy-manual: set branch name in auto-PR title and body

Description of the change:

.github/workflows/deploy-manual.yml: set branch name in auto-PR title and body

Motivation for the change: make PR title and commit descriptive.
Checklist
If the pull request includes user-facing changes, extra documentation is required:

[ ] Add a new changelog fragment in changelog/fragments (see changelog/fragments/00-template.yaml)
[ ] Add or update relevant sections of the docs website in website/content/en/docs

seems good
/lgtm


 I get the verification email, so the account is created but with a random password that i can't see because of the error.
Btw, thanks for this script :)

Changed the return signature of the random_account function and forgot to update the automatic unpacking in the console command.  Thanks for bringing this to my attention.  This is what I get for not properly testing, but to be honest I didn't expect people to actually use it, so I didn't put too much time into it.  Thanks for checking it out.


Don't set RUSTFLAGS when no specific linker is needed

This allows the cargo.sh script to use the ~/.cargo/config if it exists it certain situations.

Thanks!

Thanks!

For future reference: https://github.com/bjorn3/rustc_codegen_cranelift/issues/1129#issuecomment-770202236

For future reference: https://github.com/bjorn3/rustc_codegen_cranelift/issues/1129#issuecomment-770202236


RFP - lector

Checklist

[x] The package I am requesting does not already exist on https://chocolatey.org/packages;
[x] There is no open issue for this package;
[x] The issue title starts with 'RFP - ';
[x] The download URL is public and not locked behind a paywall / login;

Package Details
Software project URL : https://github.com/BasioMeusPuga/Lector
Direct download URL for the software / installer : https://github.com/BasioMeusPuga/Lector/archive/refs/tags/0.5.1.zip
Software summary / short description: An Ebook reader
https://github.com/BasioMeusPuga/Lector/issues/132

https://github.com/BasioMeusPuga/Lector/issues/132


SoftBody Transform breaks after removing/readding to scene during runtime

Godot version
v3.4.2.stable.official [45eaa2daf]
System information
Windows 11, GLES3, AMD Radeon RX 5700
Issue description
What doesn't work
My 3D player character (KinematicBody, right now just a Cube) should have a cloak/cape which is basically represented by an attached SoftBody node and some attachment points configured. This works as expected without any issues.
But if I change the parent of my player node (remove_child/add_child) during runtime, the SoftBody transform seems to get out-of-sync somehow.
Before changing parent:

After changing parent:

During my tests I found out that this issue also happens if I just remove and re-add the SoftBody node to scene.
Additionally there is some error in console:

E 0:00:01.976   connect: Signal 'frame_pre_draw' is already connected to given method '_draw_soft_mesh' in that object.
  <C++ Error>   Method failed. Returning: ERR_INVALID_PARAMETER
  <C++ Source>  core/object.cpp:1474 @ connect()
  <Stack Trace> Player.gd:13 @ _physics_process()

Expected behavior
The SoftBody transform shouldn't change at all if I remove and re-add the node to scene.
Steps to reproduce

create new/empty Godot project

add empty 3D scene node called Main

configure following input actions in project settings:

add following node structure to scene:

Camera transform:

Set Player/MeshInstance to CubeMesh

SoftBody settings:

Set SoftBody/Mesh to PlaneMesh and add SpatialMaterial (set Albedo color to red)

Add new GDScript to player node with following code:

extends KinematicBody

onready var bone : BoneAttachment = $BoneAttachment
onready var cape_body : SoftBody = $BoneAttachment/SoftBody

func _physics_process(delta):
	if Input.is_action_pressed("rotate_left"):
		rotation_degrees.y -= 150 * delta
	elif Input.is_action_pressed("rotate_right"):
		rotation_degrees.y += 150 * delta
	elif Input.is_action_just_pressed("reparent"):
		bone.remove_child(cape_body)
		bone.add_child(cape_body)

Run scene
Use A or D to rotate the parent node (Player).
Use SPACE to remove/add the Softbody node from BoneAttachment

Attached you find also a small project to reproduce it more quickly.
Minimal reproduction project
SoftbodyIssue.zip

This issue still exists in latest Godot versions (v3.5.rc1.official [e86d840d4] & v4.0.alpha8.official [cc3ed63af]).

This issue still exists in 4.3


how can the app register with host ip to zookeeper?

I use spring-cloud-starter-zookeeper-discovery:2.0.0.RELEASE to register app in zookeeper. I deploy the app in k8s, it seems that the app register with hostname in zookeeper(default way), but the client accessing the app outside the k8s cannot resolve the hostname in k8s. so how can the app register with host ip in zookeeper?

Set spring.cloud.zookeeper.discovery.prefer-ip-address=true to use an ip.
The spring-cloud-commons project does it's best to guess which ip/hostname to use.
See https://cloud.spring.io/spring-cloud-static/Finchley.SR2/single/spring-cloud.html#ignore-network-interfaces for information on how to inform the guessing by ignoring or preferring certain networks.

it works!!!! thanks a lot.
the config is:
server:
  port: 8081
spring:
  application:
    name: TacoCloud
  cloud:
    zookeeper:
      connect-string: <IP_ADDRESS>:2181
      discovery:
        register: true
        prefer-ip-address: true
    inetutils:
      preferred-networks:
      - 192.168
      - 172.20

after deployed in k8s, it register ip in zookeeper:

  | {"name":"TacoCloud","id":"950ec741-5247-4452-92fa-13b99434c9ae","address":"<IP_ADDRESS>","port":8081,"sslPort":null,"payload":{"@class":"org.springframework.cloud.zookeeper.discovery.ZookeeperInstance","id":"application-1","name":"TacoCloud","metadata":{}},"registrationTimeUTC":1543820989566,"serviceType":"DYNAMIC","uriSpec":{"parts":[{"value":"scheme","variable":true},{"value":"://","variable":false},{"value":"address","variable":true},{"value":":","variable":false},{"value":"port","variable":true}]}}

should add this config in doc. if not set spring.cloud.zookeeper.discovery.prefer-ip-address=true, the default is false and register with hostname.


Delete cloaked winforms test

Deletes the winforms test that was cloaked in https://github.com/dotnet/installer/pull/19218

cc @dotnet/source-build-internal

@mthalman - I don't have write access for this repo, could you merge this for me please?

The deletion of this project is causing the Windows vertical build to fail. That will need to be resolved.

The VMR did not sync the two project files due to the cloaking.
I updated the source-mappings.json in https://github.com/dotnet/installer/pull/19282. I then locally reinitialized winforms in the VMR using dotnet darc vmr initialize --vmr /root/repos/dotnet2/ --source-mappings /root/repos/installer/src/VirtualMonoRepo/source-mappings.json winforms:50add59bd0407dc3e1b5003ec56f592f06c32bda. The result of that is what you see in this PR.

@dotnet/source-build-internal - Soft ping. Could someone with permissions merge this when they get a chance? Thanks!


BUG in Ionic 2: Menu for iOS

Ionic version:  (check one with "x")
[ ] 1.x
[x ] 2.x
[ ] 3.x
I'm submitting a ...  (check one with "x")
[x ] bug report
[ ] feature request
[ ] support request => Please do not submit support requests here, use one of these channels: https://forum.ionicframework.com/ or http://ionicworldwide.herokuapp.com/
Current behavior:
The menu in iOS is buggy, getting behind the header and hiding a menu item
Expected behavior:
It should look like the menu on Android
Steps to reproduce:

Related code:
home.html
<ion-header color="header">
  <ion-navbar>
    <button ion-button icon-only menuToggle start>
        <ion-icon name="menu"></ion-icon>
    </button>
    <ion-title>Sistema</ion-title>
    <ion-buttons end>
      <button ion-button icon-only>
          <ion-icon name="search"></ion-icon>
      </button>
    </ion-buttons>
  </ion-navbar>
</ion-header>

<ion-menu [content]="menu">
  <ion-header>
    <ion-toolbar>
        <ion-title>Código: {{codigo}}</ion-title>
    </ion-toolbar>
  </ion-header>
    <ion-content>
        <ion-list>
            <ion-item (click)="categorias()" menuClose>Categorias</ion-item>
            <ion-item (click)="pedidos()" menuClose>Pedidos</ion-item>
            <ion-item (click)="perfil()" menuClose>Minha conta</ion-item>
            <ion-item (click)="sair()">Sair</ion-item>
        </ion-list>
    </ion-content>
</ion-menu>

<ion-content #menu class="home" padding>

Bem vindo, {{nome}}

Seu e-mail é: {{email}}

</ion-content>

Hello, thanks for opening an issue with us, we will look into this.

The ion-menu is intended to work with the ion-nav.
The left image you added is clearly Android, but the right one is very weird. Menu should push the normal header to the right.
See this:
https://ionicframework.com/docs/components/#menus

@AmitMY and @jgw96 I can not use ion-nav in app.html because root is an introduction page (slide) and in the print I have the Home page
If you can see, I would be grateful.
https://github.com/JonathanSilvaTI/ionic

What do you think of, instead, having HomePage as root, but it's ionViewWillEnter creates a modal with the introduction page.
That introduction page has no header, and has slides, that when you are done you press next which does dismiss for the current view (modal)

I think if a page has it owns menu it would be better.
Right now ionic can't let a page has it owns menu, it is really hard to bind a action function to menu.

Hello! As this seems like more of a support question I am going to close this issue and ask that you ask this question on our forum or on our slack channel. Thanks for using Ionic!


🐛 Copy+paste on a Vue file causes massive issues

Environment information
CLI:
  Version:                      1.6.0
  Color support:                true

Platform:
  CPU Architecture:             aarch64
  OS:                           macos

Environment:
  BIOME_LOG_DIR:                unset
  NO_COLOR:                     unset
  TERM:                         "xterm-256color"
  JS_RUNTIME_VERSION:           "v20.10.0"
  JS_RUNTIME_NAME:              "node"
  NODE_PACKAGE_MANAGER:         "pnpm/8.10.5"

Biome Configuration:
  Status:                       Loaded successfully
  Formatter disabled:           false
  Linter disabled:              false
  Organize imports disabled:    false
  VCS disabled:                 false

Workspace:
  Open Documents:               0

What happened?
I'm trying to use the new Biome Vue support, which works fine when writing and saving code, but completely breaks when copying and pasting code into the document. It's hard to explain, so I recorded a video.
https://github.com/biomejs/biome/assets/143744/2cc2abad-7c95-4f34-aab2-acaca26b4b9b
When I paste, it seems like the text selection/ranges are off, and it completely breaks the code. After I paste, I hit cmd+z to undo the brokenness, and it gets me to the output of what I expected. It kind of seems like it's running the formatter twice?
I originally though eslint/prettier/etc were also running, and they were all conflicting, but I totally disabled all of those and was able to pinpoint that Biome was the problem.
Expected result
Pastes as normal.
Code of Conduct

[X] I agree to follow Biome's Code of Conduct

This appears related to https://github.com/biomejs/biome/issues/1570
Could you see if you see multiple formatters in the list as described in that issue?

I don't see any duplicates. I also disabled all other formatters and it does still happen.

we noticed similar issues when using noUnusedImports
@ematipico any rough timeline on when full support is planned 👀
thank you for the amazing work

I believe the latest release should have fixed it


Added "enforceBounds" back to RobotStateSpace

in or_ompl there are several places where the user explicitly calls "enforceBounds" on the state space. This was removed in the last PR, and I just added it back in.

Is this required now that #44 fixed #42?

Yes, I think it should still be used because some of the classes in or_ompl directly access the state values and change them to be outside of the bounds.

I still don't really understand why this is necessary. Shouldn't we be using the methods on SO2StateSpace to perform all operations on those values (e.g. compute distances, subtract angles,e tc)? Why do we need them to be in any particular range?

this PR is just calling enforceBounds on all the subspaces. SO2StateSpace may not do anything, but the RealVectorStateSpace will force it inside the bounds.

I see. Do you know how we're getting states that are out of bounds in the first place?

I don't know whether the states end up out of bounds or not. I think the original intention of the enforceBounds function was to keep continuous joints between -PI and PI, which is not necessary. I'll close this PR.


IP address disappears from status line

I am experiencing a rather strange issue with the plugin. After installing and setting it up in the status line, the IP address appears... and disappears in the blink of an eye. See the following GIF (look at what happens before the text ip test).

The only way to let the address reappear is by changing the Public IP temp file.
I am using this on macOS 13.3.1a in iTerm 3.4.19 with zsh 5.9 and Tmux 3.3a.
set -g @public_ip_dir '~/.config/tmux/tmp/'
set -g @public_ip_tmp_file 'public_ip.json'

set -g status-right "#[fg=#586e75,bg=#002b36,nobold,nounderscore,noitalics]ÓÇ≤#[fg=#93a1a1,bg=#586e75]#[fg=#eee8d5,bg=#586e75,nobold,nounderscore,noitalics] #{public_ip ip} ÔÇ¨ ip test #[fg=#657b83]ÓÇ≤#[fg=#eee8da,bg=#657b83] #{weather} #[fg=#93a1a1,bg=#657b83,nobold,nounderscore,noitalics]ÓÇ≤#[fg=#15161e,bg=#93a1a1,bold] #h ÓÇ≥ %H:%M:%S‚†Ä#[fg=#93a1a1,bg=#0d1017]ÓÇ¥‚†Ä"

I also tried different configuration variants like the one in the readme but with no luck.
Any ideas what is going wrong here?
Update: I also notice the JSON file does not get updated after initially creating, but it does get recreated after removing it.

After some debugging I found out the issue lies in the stat command used in the statement below:
https://github.com/0xAF/tmux-public-ip/blob/871a2e1e9904dce758cb43c38acad38810c91e7b/scripts/public_ip.sh#L64
Running this command separately in bash (on macOS) gave me this error (after setting the $cache variable of course):
bash-3.2$ stat -L --format %Y "$cache"
stat: illegal option -- -
usage: stat [-FLnq] [-f format | -l | -r | -s | -x] [-t timefmt] [file ...]

After some googling I saw this post on StackExchange explaining that macOS / OSX and other unix (like) systems handle the date and stat command differently. I replaced the date and stat command in line 64 with the one from the StackExchange post and the plugin works fine now :-).
To be complete, this is the working if statement for me:
if [[ ! -f "$cache" || $(($(date +%s) - $(stat -t %s -f %m -- "$cache"))) -gt $refresh ]]; then
    curl -s "$_PIP_URL" -o "$cache"
fi

Not sure how a good fix for this would look like (my knowledge of sh is limited). Maybe a check like if Darwin { do something } or something like that?

Thanks for the report and the effort to fix it.
Please check the latest version and tell me if it works for you, so I can close the issue.

Tested it and works like a charm! Thanks for the fix!


New definition of eigenvectorUnitary

This file contains the spectral theorem for Hermitian matrices and nearby relevant theorems. We rewrote the file, recasting the natural eigenvector basis matrix as a unitary called eigenvectorUnitary, and removed a lot of defeq abuse that the original file contained, considerably simplifying things.

[ ] depends on: #12244

Thanks! Will go through these ASAP.
On Wed, Apr 24, 2024, 6:28 PM Jireh Loreaux @.***>
wrote:

@.**** commented on this pull request.
First round of comments
In Mathlib/LinearAlgebra/Matrix/PosDef.lean
https://github.com/leanprover-community/mathlib4/pull/11363#discussion_r1578583691
:

@@ -162,23 +163,22 @@ lemma posSemidef_sqrt : PosSemidef hA.sqrt := by

@[simp]
lemma sq_sqrt : hA.sqrt ^ 2 = A := by

let C := hA.1.eigenvectorMatrix

let C := hA.1.eigenvectorUnitary.1
let E := diagonal ((↑) ∘ Real.sqrt ∘ hA.1.eigenvalues : n → 𝕜)
suffices C * (E * (Cᴴ * C) * E) * Cᴴ = A by
rw [Matrix.PosSemidef.sqrt, pow_two]
change (C * E * Cᴴ) * (C * E * Cᴴ) = A
simpa only [← mul_assoc] using this
have : Cᴴ * C = 1 := by

You can get rid of this have entirely now.
In Mathlib/LinearAlgebra/Matrix/PosDef.lean
https://github.com/leanprover-community/mathlib4/pull/11363#discussion_r1578584085
:

@@ -162,23 +163,22 @@ lemma posSemidef_sqrt : PosSemidef hA.sqrt := by

@[simp]
lemma sq_sqrt : hA.sqrt ^ 2 = A := by

let C := hA.1.eigenvectorMatrix

let C := hA.1.eigenvectorUnitary.1
let E := diagonal ((↑) ∘ Real.sqrt ∘ hA.1.eigenvalues : n → 𝕜)
suffices C * (E * (Cᴴ * C) * E) * Cᴴ = A by

This should work better with it being unitary
⬇ Suggested change

suffices C * (E * (Cᴴ * C) * E) * Cᴴ = A by

suffices C * (E * (star C * C) * E) * star C = A by

In Mathlib/LinearAlgebra/Matrix/PosDef.lean
https://github.com/leanprover-community/mathlib4/pull/11363#discussion_r1578584268
:

@@ -162,23 +163,22 @@ lemma posSemidef_sqrt : PosSemidef hA.sqrt := by

@[simp]
lemma sq_sqrt : hA.sqrt ^ 2 = A := by

let C := hA.1.eigenvectorMatrix

let C := hA.1.eigenvectorUnitary.1

⬇ Suggested change

let C := hA.1.eigenvectorUnitary.1

let C : Matrix n n 𝕜 := hA.1.eigenvectorUnitary

In Mathlib/LinearAlgebra/Matrix/PosDef.lean
https://github.com/leanprover-community/mathlib4/pull/11363#discussion_r1578585228
:

rw [this, mul_one]
have : E * E = diagonal ((↑) ∘ hA.1.eigenvalues) := by
rw [diagonal_mul_diagonal]
refine congr_arg _ (funext fun v ↦ ?_) -- why doesn't "congr with v" work?
simp [← pow_two, ← RCLike.ofReal_pow, Real.sq_sqrt (hA.eigenvalues_nonneg v)]
rw [this]

convert hA.1.spectral_theorem'.symm
apply Matrix.IsHermitian.conjTranspose_eigenvectorMatrix

convert hA.1.spectral_theorem2.symm

I would get rid of the rw [this, mul_one] and rw [this] above and just go
with
⬇ Suggested change

convert hA.1.spectral_theorem2.symm

simpa [this] using hA.1.spectral_theorem2.symm

In Mathlib/LinearAlgebra/Matrix/PosDef.lean
https://github.com/leanprover-community/mathlib4/pull/11363#discussion_r1578586346
:

hA.spectral_theorem2 ▸

(posSemidef_diagonal_iff.mpr
(by simpa [RCLike.ofReal_nonneg] using h)).mul_mul_conjTranspose_same _

The bad line break positions suggest that we should ungolf this slightly.
In Mathlib/LinearAlgebra/Matrix/PosDef.lean
https://github.com/leanprover-community/mathlib4/pull/11363#discussion_r1578586994
:

@@ -351,12 +350,11 @@ theorem det_pos [DecidableEq n] {M : Matrix n n ℝ} (hM : M.PosDef) : 0 < det M
intro i _
rw [hM.isHermitian.eigenvalues_eq]

I think this works to close the goal here.
⬇ Suggested change

rw [hM.isHermitian.eigenvalues_eq]

exact hM.isHermitian.eigenvalues_pos i

In Mathlib/LinearAlgebra/Matrix/Spectrum.lean
https://github.com/leanprover-community/mathlib4/pull/11363#discussion_r1578587508
:

@.***
+theorem rank_mul_units (A : (Matrix n n 𝕜)ˣ) (B : Matrix n n 𝕜) :

Please indicate that these lemmas are waiting on #12244
https://github.com/leanprover-community/mathlib4/pull/12244
In Mathlib/LinearAlgebra/Matrix/Spectrum.lean
https://github.com/leanprover-community/mathlib4/pull/11363#discussion_r1578588007
:

have := congr_arg RCLike.re (congr_fun (congr_fun this i) i)

rw [diagonal_apply_eq, Function.comp_apply, RCLike.ofReal_re,
inv_eq_left_inv hA.eigenvectorMatrix_mul_inv, ← conjTranspose_eigenvectorMatrix, mul_mul_apply]
at this
exact this.symm
-#align matrix.is_hermitian.eigenvalues_eq Matrix.IsHermitian.eigenvalues_eq

-/-- The determinant of a hermitian matrix is the product of its eigenvalues. -/
-theorem det_eq_prod_eigenvalues : det A = ∏ i, (hA.eigenvalues i : 𝕜) := by

apply mul_left_cancel₀ (det_ne_zero_of_left_inverse (eigenvectorMatrix_mul_inv hA))
rw [← det_mul, spectral_theorem, det_mul, mul_comm, det_diagonal]
simp_rw [Function.comp_apply]
-#align matrix.is_hermitian.det_eq_prod_eigenvalues Matrix.IsHermitian.det_eq_prod_eigenvalues
+theorem spectral_theorem1 :

(star (eigenvectorUnitary hA : Matrix n n 𝕜)) * A * (eigenvectorUnitary hA : Matrix n n 𝕜)

= diagonal (RCLike.ofReal ∘ hA.eigenvalues) := by

we indent by increments of 2 additional spaces
⬇ Suggested change

= diagonal (RCLike.ofReal ∘ hA.eigenvalues) := by

 = diagonal (RCLike.ofReal ∘ hA.eigenvalues) := by

In Mathlib/LinearAlgebra/Matrix/Spectrum.lean
https://github.com/leanprover-community/mathlib4/pull/11363#discussion_r1578588255
:

EuclideanSpace.basisFun_apply, WithLp.equiv_single, ← mulVec_mulVec,

eigenvectorUnitary_mulVec, ← mulVec_mulVec, mulVec_eigenvectorBasis,
Matrix.diagonal_mulVec_single, mulVec_smul, star_eigenvectorUnitary_mulVec,
RCLike.real_smul_eq_coe_smul (K := 𝕜), WithLp.equiv_symm_smul, WithLp.equiv_symm_single,
Function.comp_apply, mul_one, WithLp.equiv_symm_single]

⬇ Suggested change

EuclideanSpace.basisFun_apply, WithLp.equiv_single, ← mulVec_mulVec,
eigenvectorUnitary_mulVec, ← mulVec_mulVec, mulVec_eigenvectorBasis,
Matrix.diagonal_mulVec_single, mulVec_smul, star_eigenvectorUnitary_mulVec,
RCLike.real_smul_eq_coe_smul (K := 𝕜), WithLp.equiv_symm_smul, WithLp.equiv_symm_single,
Function.comp_apply, mul_one, WithLp.equiv_symm_single]

EuclideanSpace.basisFun_apply, WithLp.equiv_single, ← mulVec_mulVec,
eigenvectorUnitary_mulVec, ← mulVec_mulVec, mulVec_eigenvectorBasis,
Matrix.diagonal_mulVec_single, mulVec_smul, star_eigenvectorUnitary_mulVec,
RCLike.real_smul_eq_coe_smul (K := 𝕜), WithLp.equiv_symm_smul, WithLp.equiv_symm_single,
Function.comp_apply, mul_one, WithLp.equiv_symm_single]

In Mathlib/LinearAlgebra/Matrix/Spectrum.lean
https://github.com/leanprover-community/mathlib4/pull/11363#discussion_r1578588711
:

   * (star (eigenvectorUnitary hA : Matrix n n 𝕜)) := by

rw [← spectral_theorem1, mul_assoc, mul_assoc,

 (Matrix.mem_unitaryGroup_iff).mp (eigenvectorUnitary hA).2, mul_one,

 ← mul_assoc, (Matrix.mem_unitaryGroup_iff).mp (eigenvectorUnitary hA).2, one_mul]

⬇ Suggested change

   * (star (eigenvectorUnitary hA : Matrix n n 𝕜)) := by

rw [← spectral_theorem1, mul_assoc, mul_assoc,

 (Matrix.mem_unitaryGroup_iff).mp (eigenvectorUnitary hA).2, mul_one,

 ← mul_assoc, (Matrix.mem_unitaryGroup_iff).mp (eigenvectorUnitary hA).2, one_mul]

 * (star (eigenvectorUnitary hA : Matrix n n 𝕜)) := by

rw [← spectral_theorem1, mul_assoc, mul_assoc,
(Matrix.mem_unitaryGroup_iff).mp (eigenvectorUnitary hA).2, mul_one,
← mul_assoc, (Matrix.mem_unitaryGroup_iff).mp (eigenvectorUnitary hA).2, one_mul]

In Mathlib/LinearAlgebra/Matrix/Spectrum.lean
https://github.com/leanprover-community/mathlib4/pull/11363#discussion_r1578591944
:

have := hA.spectral_theorem

rw [← @Matrix.mul_inv_eq_iff_eq_mul_of_invertible (A := hA.eigenvectorMatrixInv)] at this
have := congr_arg RCLike.re (congr_fun (congr_fun this i) i)
rw [diagonal_apply_eq, Function.comp_apply, RCLike.ofReal_re,
inv_eq_left_inv hA.eigenvectorMatrix_mul_inv, ← conjTranspose_eigenvectorMatrix, mul_mul_apply]
at this
exact this.symm
-#align matrix.is_hermitian.eigenvalues_eq Matrix.IsHermitian.eigenvalues_eq

-/-- The determinant of a hermitian matrix is the product of its eigenvalues. -/
-theorem det_eq_prod_eigenvalues : det A = ∏ i, (hA.eigenvalues i : 𝕜) := by

apply mul_left_cancel₀ (det_ne_zero_of_left_inverse (eigenvectorMatrix_mul_inv hA))
rw [← det_mul, spectral_theorem, det_mul, mul_comm, det_diagonal]
simp_rw [Function.comp_apply]
-#align matrix.is_hermitian.det_eq_prod_eigenvalues Matrix.IsHermitian.det_eq_prod_eigenvalues
+theorem spectral_theorem1 :

The 1, 2, 3 naming is really not great.
Maybe they could be (in this order)

star_mul_self_mul_eq_diagonal or spectral_theorem_eq_diagonal
eq_mul_diagonal_star_mul or spectral_theorem
Do we even need this one? It follows from either of the other two
plus a simp.

—
Reply to this email directly, view it on GitHub
https://github.com/leanprover-community/mathlib4/pull/11363#pullrequestreview-2021042860,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AOJJJTURR4JQDRHLZHHMRLLY7AWZXAVCNFSM6AAAAABEVA72J6VHI2DSMVQWIX3LMV43YUDVNRWFEZLROVSXG5CSMV3GSZLXHMZDAMRRGA2DEOBWGA
.
You are receiving this because you authored the thread.Message ID:
@.***>

OK. Will try to do this. I may have to pick your brain about this, since I
assume the #align statements are about the port? (I should have asked
about this before nuking them all...)
On Thu, May 2, 2024 at 11:26 AM Jireh Loreaux @.***>
wrote:

@.**** commented on this pull request.
In Mathlib/LinearAlgebra/Matrix/Spectrum.lean
https://github.com/leanprover-community/mathlib4/pull/11363#discussion_r1587834996
:

@@ -53,139 +50,126 @@ noncomputable def eigenvectorBasis : OrthonormalBasis n 𝕜 (EuclideanSpace
(Fintype.equivOfCardEq (Fintype.card_fin _))
#align matrix.is_hermitian.eigenvector_basis Matrix.IsHermitian.eigenvectorBasis

-/-- A matrix whose columns are an orthonormal basis of eigenvectors of a hermitian matrix. -/
-noncomputable def eigenvectorMatrix : Matrix n n 𝕜 :=

(PiLp.basisFun _ 𝕜 n).toMatrix (eigenvectorBasis hA).toBasis
-#align matrix.is_hermitian.eigenvector_matrix Matrix.IsHermitian.eigenvectorMatrix

All the #align statements got clobbered in this refactor. Can you go
through the diff, find the ones that are still relevant, and update them?
If some really things really did get deleted you can use #noalign. For an
example of each:
#align matrix.is_hermitian.eigenvector_matrix Matrix.IsHermitian.eigenvectorUnitary
#noalign matrix.is_hermitian.eigenvector_matrix_inv
The #align statements should go right after the corresponding
declaration. The #noaligns can be grouped together somewhere (e.g., at
the bottom of the file). Please add a comment to them explaining why they
all disappeared.
—
Reply to this email directly, view it on GitHub
https://github.com/leanprover-community/mathlib4/pull/11363#pullrequestreview-2036074017,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AOJJJTQ3VYWHWS2QDXFLLO3ZAJLKPAVCNFSM6AAAAABEVA72J6VHI2DSMVQWIX3LMV43YUDVNRWFEZLROVSXG5CSMV3GSZLXHMZDAMZWGA3TIMBRG4
.
You are receiving this because you authored the thread.Message ID:
@.***>

I've had a lot of input in this, so it would be good to get a second set of eyes.
maintainer merge

Definitely 👍
On Fri, May 3, 2024, 12:52 PM Jireh Loreaux @.***>
wrote:

I've had a lot of input in this, so it would be good to get a second set
of eyes.
maintainer merge
—
Reply to this email directly, view it on GitHub
https://github.com/leanprover-community/mathlib4/pull/11363#issuecomment-2093391447,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AOJJJTURPHUYLLPOTCS4ZVTZAO6EBAVCNFSM6AAAAABEVA72J6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDAOJTGM4TCNBUG4
.
You are receiving this because you authored the thread.Message ID:
@.***>


Improvements to TarfilePublisherHandler

@DrDaveD and I were troubleshooting an imbalance on publishes between the RCDS servers, and he had a couple of suggestions with how we handle retries in the TarfilePublisherHandler
https://github.com/fermitools/jobsub_lite/blob/1cf07430b89cfb3e008d32f3b5d5e8d9fff0b8e5/lib/tarfiles.py#L446
Idea 1
We basically do three operations maximum:  Exists query, Publish request (if not Exists), and then Exists queries (in retry loop until we exhaust retries).  Currently, we switch between servers for each one, and there's not really a reason to do so.  This also obscures any potential issue with a particular server, since we keep switching.  So between the first Exists, and Publish, it'd be nice to just stick with one server unless there's an actual exception.  Between the Publish and the next Exists (and any following retries), we can switch servers.
Idea 2
For any retries, since we have multiple servers, we currently wait for 30 seconds between retries, even on first failure.  It'd be better if for the first failure, we immediately switch servers and retry, and then if there's a second failure, then wait the 30 seconds thereafter between retries.  This should be as easy as doing something like this in the pubapi_operation retry loop:
_retry_interval_sec = 0
retry_count = itertools.count()
while True:
  try:
      request()
  except:
      switch_servers()
      rest_of_stuff()
      time.sleep(_retry_interval_sec)
      _retry_interval_sec = RETRY_INTERVAL_SEC

We do something similar to this in the tarball discovery code in the job wrapper scripts, where we check all four repositories for a tarball hash, then if we don't find the tarball, we wait 30 seconds and try again.

Idea 1 is implemented in commit 5097503c4.

Idea 2 is now done.  I have to think of a good way to test the following cases:

Check to make sure Idea 1 works (make sure exists and publish for a new tarball works)
Somehow make the publish fail for Idea 2.  We can then check:

Do we retry immediately the first time?
Do we switch servers?

For the exists calls, we can test the rest of Idea 2:  that is, make sure that if we set fixed_server either way, that it is respected.  This can even be tested from the python IDE.

Tests (1) and (2) work:
Using PubAPI server rcds01.fnal.gov
Calling URL https://rcds01.fnal.gov/pubapi/exists?cid=nova%2F242483b27f8e9d987653fd7dd48f7490afee0db1dbbec085cc881c7bfbd04c8b

Using RCDS to publish tarball
cid: nova/242483b27f8e9d987653fd7dd48f7490afee0db1dbbec085cc881c7bfbd04c8b
Using PubAPI server rcds01.fnal.gov
Calling URL https://rcds01.fnal.gov/pubapi/publish?cid=nova%2F242483b27f8e9d987653fd7dd48f7490afee0db1dbbec085cc881c7bfbd04c8b
Checking to see if uploaded file is published on RCDS for CID nova/242483b27f8e9d987653fd7dd48f7490afee0db1dbbec085cc881c7bfbd04c8b
Using PubAPI server rcds02.fnal.gov
Calling URL https://rcds02.fnal.gov/pubapi/exists?cid=nova%2F242483b27f8e9d987653fd7dd48f7490afee0db1dbbec085cc881c7bfbd04c8b
Could not locate uploaded file on RCDS.  Will retry in 0 seconds.
Using PubAPI server rcds01.fnal.gov
Calling URL https://rcds01.fnal.gov/pubapi/exists?cid=nova%2F242483b27f8e9d987653fd7dd48f7490afee0db1dbbec085cc881c7bfbd04c8b
Could not locate uploaded file on RCDS.  Will retry in 30 seconds.
Using PubAPI server rcds02.fnal.gov
Calling URL https://rcds02.fnal.gov/pubapi/exists?cid=nova%2F242483b27f8e9d987653fd7dd48f7490afee0db1dbbec085cc881c7bfbd04c8b
Found uploaded file on RCDS.

This shows:

The first exists and publish call go to the same server.
The first retry happens immediately after the second exists call.  We keep switching servers after that.

The job ID for this test is<EMAIL_ADDRESS>.  We want to make sure we get a fully-running test job along with test (3) before calling this done.

For the end-to-end test, it turns out that I was using an old script that isn't expected to work any longer.  I reran a test from #324, that's got an updated script, and it worked:
$ ~/jobsub_lite/bin/jobsub_submit -G fermilab --tar-file-name dropbox:///home/sbhat/FileUploadTests/testfiles.tar --onsite --debug  file:///home/sbhat/FileUploadTests/tar-file-name.sh 1

(the job id was 7723058.0@jobsub05.fnal.gov).  This submission exhibited all the behavior observed before for job<EMAIL_ADDRESS>that we expected.

(3) test:
Instantiate TarfilePublisherHandler with default setting:
$ cd lib/
$ touch /tmp/fake_token
$ python3
...
>>> from tarfiles import TarfilePublisherHandler
>>> from creds import CredentialSet
>>> tfh = TarfilePublisherHandler(cid='test/12345abcde', cred_set=CredentialSet(token='/tmp/fake_token'), verbose=1)
Publishing hash test/12345abcde to RCDS:
Using bearer token located at /tmp/fake_token to authenticate to RCDS
>>> r = tfh.cid_exists()
Using PubAPI server rcds02.fnal.gov
Calling URL https://rcds02.fnal.gov/pubapi/exists?cid=test%2F12345abcde
Traceback (most recent call last):
  File "/home/sbhat/jobsub_lite/lib/tarfiles.py", line 522, in wrapper
    )
  File "/usr/lib/python3.9/site-packages/requests/models.py", line 943, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 403 Client Error: Access denied for url: https://rcds02.fnal.gov/pubapi/exists?cid=test%2F12345abcde
Will retry in 0 seconds
Using PubAPI server rcds01.fnal.gov
Calling URL https://rcds01.fnal.gov/pubapi/exists?cid=test%2F12345abcde
Traceback (most recent call last):
  File "/home/sbhat/jobsub_lite/lib/tarfiles.py", line 522, in wrapper
    )
  File "/usr/lib/python3.9/site-packages/requests/models.py", line 943, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 403 Client Error: Access denied for url: https://rcds01.fnal.gov/pubapi/exists?cid=test%2F12345abcde
Will retry in 30 seconds
Using PubAPI server rcds02.fnal.gov
Calling URL https://rcds02.fnal.gov/pubapi/exists?cid=test%2F12345abcde
Traceback (most recent call last):
  File "/home/sbhat/jobsub_lite/lib/tarfiles.py", line 522, in wrapper
    )
  File "/usr/lib/python3.9/site-packages/requests/models.py", line 943, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 403 Client Error: Access denied for url: https://rcds02.fnal.gov/pubapi/exists?cid=test%2F12345abcde
Will retry in 30 seconds
...

Instantiate it with fixed_server set to True:
>>> tfh = TarfilePublisherHandler(cid='test/12345abcde', cred_set=CredentialSet(token='/tmp/fake_token'), fixed_server=True, verbose=1)
Publishing hash test/12345abcde to RCDS:
Using bearer token located at /tmp/fake_token to authenticate to RCDS
>>> r = tfh.cid_exists()
Using PubAPI server rcds01.fnal.gov
Calling URL https://rcds01.fnal.gov/pubapi/exists?cid=test%2F12345abcde
Traceback (most recent call last):
  File "/home/sbhat/jobsub_lite/lib/tarfiles.py", line 522, in wrapper
    )
  File "/usr/lib/python3.9/site-packages/requests/models.py", line 943, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 403 Client Error: Access denied for url: https://rcds01.fnal.gov/pubapi/exists?cid=test%2F12345abcde
Will retry in 0 seconds
Using PubAPI server rcds01.fnal.gov
Calling URL https://rcds01.fnal.gov/pubapi/exists?cid=test%2F12345abcde
Traceback (most recent call last):
  File "/home/sbhat/jobsub_lite/lib/tarfiles.py", line 522, in wrapper
    )
  File "/usr/lib/python3.9/site-packages/requests/models.py", line 943, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 403 Client Error: Access denied for url: https://rcds01.fnal.gov/pubapi/exists?cid=test%2F12345abcde
Will retry in 30 seconds
Using PubAPI server rcds01.fnal.gov
Calling URL https://rcds01.fnal.gov/pubapi/exists?cid=test%2F12345abcde
Traceback (most recent call last):
  File "/home/sbhat/jobsub_lite/lib/tarfiles.py", line 522, in wrapper
    )
  File "/usr/lib/python3.9/site-packages/requests/models.py", line 943, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 403 Client Error: Access denied for url: https://rcds01.fnal.gov/pubapi/exists?cid=test%2F12345abcde
Will retry in 30 seconds
...

Looks good.

Also verified (3) with publish calls:
>>> tfh = TarfilePublisherHandler(cid='test/12345abcde', cred_set=CredentialSet(token='/tmp/fake_token'), fixed_server=True, verbose=1)
Publishing hash test/12345abcde to RCDS:
Using bearer token located at /tmp/fake_token to authenticate to RCDS
>>> cid.publish("12345")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'cid' is not defined
>>> tfh.publish("12345")
TarfilePublisherHandler is configured to use a fixed RCDS server, however this is being overridden for the duration of the current request.
Using PubAPI server rcds02.fnal.gov
Calling URL https://rcds02.fnal.gov/pubapi/publish?cid=test%2F12345abcde
Traceback (most recent call last):
  File "/home/sbhat/jobsub_lite/lib/tarfiles.py", line 527, in wrapper
    response = func(self, *args, **kwargs)
  File "/home/sbhat/jobsub_lite/lib/tarfiles.py", line 607, in publish
    with open(tarfilename, "rb") as tarfile:
FileNotFoundError: [Errno 2] No such file or directory: '12345'
Will retry in 0 seconds
Using PubAPI server rcds01.fnal.gov
Calling URL https://rcds01.fnal.gov/pubapi/publish?cid=test%2F12345abcde
Traceback (most recent call last):
  File "/home/sbhat/jobsub_lite/lib/tarfiles.py", line 527, in wrapper
    response = func(self, *args, **kwargs)
  File "/home/sbhat/jobsub_lite/lib/tarfiles.py", line 607, in publish
    with open(tarfilename, "rb") as tarfile:
FileNotFoundError: [Errno 2] No such file or directory: '12345'
Will retry in 30 seconds
Using PubAPI server rcds02.fnal.gov
Calling URL https://rcds02.fnal.gov/pubapi/publish?cid=test%2F12345abcde
Traceback (most recent call last):
  File "/home/sbhat/jobsub_lite/lib/tarfiles.py", line 527, in wrapper
    response = func(self, *args, **kwargs)
  File "/home/sbhat/jobsub_lite/lib/tarfiles.py", line 607, in publish
    with open(tarfilename, "rb") as tarfile:
FileNotFoundError: [Errno 2] No such file or directory: '12345'
Will retry in 30 seconds

We see here that the fixed_server behavior is overridden for the publish call, as is intended.
This is ready for a PR.


Add all payments to CLI

So I'll admit there is some nice copy-pasta here -- this is very similar to the ledgers payments cli.
However, I did find an error in the current CLI payments (found in both the ledgers and transactions). If you scrolled through until you found a path_payment, you would see that you get the error:

Missing fields for path_payment operation.

The reason for this is that source_amount does not exist for path payments. See here:
https://www.stellar.org/laboratory/#explorer?resource=transactions&endpoint=single&values=eyJ0cmFuc2FjdGlvbiI6IjAwNzk0ZGUyYmQxYzEyMTliMzUyNjU3YmNlMWU0ZDhjZTJmNjA3MzdiYzU1OGZmM2MwNDZiMTRkZTRhYWExMGQifQ%3D%3D&network=public
This field only exists on payment paths, an object describing an intermediate step on a path_payment.
Is there a GIF that reflects how this work made you feel?

Closes #167

It looks like this was built on an old version of master before we introduced the formatter and simple formatter.  When i was on the plane yesterday I actually tackled this one and didn't claim the issue.  You can use this branch as a guide to implement the formatter on payments https://github.com/kbacha/stellar-sdk/tree/scott/all_payments .   Nice catch on source_amount!  👍

@correlator sorry about that, didn't see that you had claimed that until after I submitted the PR.
I'll clean this up.

@correlator may be best to just merge your changes and then remove the source_amount. lmk what you think

@robertDurst you sure?  I'm happy to let you run with this.  If you close this PR I'll open mine up.  Whatever makes you happy :)

@correlator all good man, I'll just move on to the next!

right on.  BTW solid gif game here


Decimal points to be included (Solr)

Decimal points to be included so they reflect actual budget (including pennies)

included in #2648


Auth0 multiple browser notifications

If a user / moderator has set the browser notifications then they may see up to 3 of the notifications in short interval succession.
Initial cause was party mitigated but also tracked to deployment time of the AUTH0.
This bug is more of a general annoyance than anything but would benefit from compete mitigation.

Hi . Thanks so much for reporting this bug. Since the notifications system has been completely changed by the switch to Discourse, I'm going to guess this issue is now obsolete. If I'm wrong about that, please comment here and I'll reopen the issue.


Openmp perfomance analysis in an agricultural set up using r programming

Topic Suggestion
openmp perfomance analysis in an agricultural set up using r
Proposal Submission
Proposed title of the article
openmp perfomance analysis
Proposed article introduction
OpenMP performance analysis method that visualizes grains – computation   performed by a task or a parallel for-loop chunk instance – and  highlights problems such as low parallelism, work inﬂation and  poor parallelization beneﬁt at the grain level. We demonstrate that  grain graphs can quickly reveal performance problems that are difﬁcult to detect and characterize in ﬁne detail using existing vi-sualizations in standard OpenMP programs, simplifying OpenMPperformance analysis. This enables average programmers to make  portable optimizations for poor performing OpenMP programs, reducing pressure on experts and removing the need for tedious trial and error tunnings.
Key takeaways
-what is an openmp code?
-Grain Graphs
-Need for Grain Graph
-Performance Analysis with Grain Graph

@Sous-doc, you have removed multiple sections of our Topic Approval form so we cannot review your topic suggestion. Please add them back and fill them in and then we can take your article under consideration.

@Sous-doc
Closing due to inactivity - if you'd like to continue working on the topic. Please let us know.


jets new: job mode

change --api flag to --mode
3 modes: html, api, job

Closing because this is part of #32


move must_use from methods to generic type

need to test first if it works as expected

cc @Emilgardis


yo: command not found

When i installed generator-electron and run command yo electron i bash says:
yo: command not found

You'll need yo to run the generator. npm install --global yo.


Add ionic label

This also updates the action to use node16 since node12 is EOL. Additionally, I ran npm audit fix to fix some security issues.

@iche033 I'll go ahead and merge. Let me know if we need to change anything.


Add missing test edge cases

Description
The bits size of the internal counter might create platform compatibility issues. The scope of this issue is to update the existing testing workflow to support multiple operative systems and architectures bits:

[x] Update build-test.yml to support multiple operative systems (eg. windows, ubuntu, osx) and architectures (amd64, 386, arm)

#12


Fix: support config tolerations in nodePlacement

Signed-off-by: xuezhaojun<EMAIL_ADDRESS>https://github.com/stolostron/backlog/issues/24468

/assign @JakobGray

/lgtm


Need a kill-switch/live-switch to terminate an active load test (4 pts)

It would be great if serverless-artillery had an instant kill-switch that could be used to terminate a running test.
Currently the only way to do this is to use slsart remove and wait for the currently running lambda to finish. This can be a problem if the test takes down a production server and an immediate stop is required.

fixed  in #139
We developed Kill Switch that can be called by
slsart kill

After killing an invocation, on average load will not be produced after 1 minute but this could continue for up to 2 minutes for the test to be completely stopped.


Can't set useNativeEncoding as default when using transactional binder.

When using version Elmhurst.SR1, I'm trying to set the default producer property for useNativeEncoding.
I have transactions enabled (with a transactionIdPrefix set), but wherever I try to set the default producer property for useNativeEncoding it doesn't seem to apply.
It works fine if I specify it at the specific bindings level.
e.g. This works:
spring.cloud.stream.bindings.output.producer.useNativeEncoding=true

But none of these seem to:
spring.cloud.stream.default.producer.useNativeEncoding=true
spring.cloud.stream.kafka.binder.transaction.producer.useNativeEncoding=true

(I've also tried several other properties with no success, but my understanding is it should be one of the above two).

When using transactions, the producer is created by the consumer (so it can begin the transaction, send the offset to the transaction and commit or rollback the transaction).
Since the consumer doesn't know which output channel(s) the application will use, the output binding's producer properties are ignored and the transactional producer properties are configured at the binding level.
See the documentation; specifically:
spring.cloud.stream.kafka.binder.transaction.transactionIdPrefix
Enables transactions in the binder. See transaction.id in the Kafka documentation and Transactions in the spring-kafka documentation. When transactions are enabled, individual producer properties are ignored and all producers use the spring.cloud.stream.kafka.binder.transaction.producer.* properties.
Default null (no transactions)
spring.cloud.stream.kafka.binder.transaction.producer.*
Global producer properties for producers in a transactional binder. See spring.cloud.stream.kafka.binder.transaction.transactionIdPrefix and Kafka Producer Properties and the general producer properties supported by all binders.
Default: See individual producer properties.

Sorry, I misread your question; this should work...
spring.cloud.stream.kafka.binder.transaction.producer.useNativeEncoding=true

Sorry, I misread your question; this should work...
spring.cloud.stream.kafka.binder.transaction.producer.useNativeEncoding=true

...so it's a bug; the abstract binder where this property is examined knows nothing about Kafka transactions and that the binding producer properties aren't used.
Neither of these should
spring.cloud.stream.bindings.output.producer.useNativeEncoding=true
spring.cloud.stream.default.producer.useNativeEncoding=true

But there's probably an argument that the second one should.

Sorry yes I meant to say I'd tried spring.cloud.stream.kafka.binder.transaction.producer.useNativeEncoding=true
I just forgot to note it down in the ticket (I tried many combinations to make sure I wasn't doing something stupid :) )
Thanks for the confirmation - for now I'll just specify it on each binding individually.


Adding "Scroll top down" feature to the webpage

I would like to contribute to this. Assign it to me under gssoc-2024-ext and hacktoberfest


CLI: Removed -l option add a --quiet option

Flag -l removed, this behaviour was made default
Flag -q --quiet added.
Resolved: vmware#490
Signed-off-by: Radmir Mukhambetov<EMAIL_ADDRESS>

@rnjudge This will be a breaking change. If we merge this now, our next release will be 2.0.0 not 1.1.0. Is this OK with you?

@rnjudge This will be a breaking change. If we merge this now, our next release will be 2.0.0 not 1.1.0. Is this OK with you?

yep

@rnjudge This will be a breaking change. If we merge this now, our next release will be 2.0.0 not 1.1.0. Is this OK with you?

I am OK with this since we will be adding other command line options for dockerfile lock (granted, they are not breaking).

We will also need a change in the Dockerfile ENTRYPOINT line:
`ENTRYPOINT ["tern", "-q", "-b", "/hostmount"]

@radmirnovii wanted to make sure you saw change requested as well :) You'll need to include this in Tern's main Dockerfile.

We will also need a change in the Dockerfile ENTRYPOINT line:
`ENTRYPOINT ["tern", "-q", "-b", "/hostmount"]

@radmirnovii wanted to make sure you saw change requested as well :) You'll need to include this in Tern's main Dockerfile.

fixed

Looks good. It's a major change to the CLI (I will have to retrain my fingers :D). So let me make an announcement on the slack channel before merging.


Datadog output using Datadog Logs

Motivation
Current Datadog output uses the Datadog Event feature.
We have a different usage in mind, using Datalog Logs to ingest Falco events.
It would allow a smoother integration with the Cloud SIEM Datadog feature to centralize all alerts (including falco events).
Feature
Add Datadog output using Logs feature.
A design may be discussed because a Datadog output already exist.

Should we create a complete new output for Datadog Logs without any modification to the current Datadog event output?
Should we create a new parameter mode: (event | logs) within the current Datadog output, with a default mode to event (so no breaking change)?
Something different?

WDYT?
If we agree on a design, I can work on the implementation.
Alternatives
An alternative would be to use the S3 output to store Falco event in S3, then a Datadog forwarder within AWS (using lambda etc) to push falco events to Datadog logs. It is not ideal because it adds some intermediaries and increases the pricing for no real reason.
Additional context

Hi @yohboy,
This is a good idea. To avoid any breaking change, a new output would be better. I don't have access to a Datadog account, feel free to propose an implementation.
Regards,

Hi @Issif thank you for your answer!
I agree a new output would definitely avoid any breaking change, but I presume it would add some confusion if there are 2 datadog outputs.
First one will be named datadog and related to datadog events.
The second one will be named datadog_logs? and related to datadog logs.
It may be not fully clear for everyone. But renaming the first output would cause some breaking changes.
Regards,

Hi @Issif ,
can you tell me how is working the release cycle of this project? I see that the last release was in July.
When will the 2.30 version be released? Asking because I would like to integrate the new output in the falcosidekick helm chart.

There is no precise schedule, I release a new version when I consider we have enough new features or when a major bug has been fixed. For the 2.30, I've in mind to do the release in the next weeks. I'll take care of the Helm chart directly at that time.

Thank you!


Accessing cluster features from actors

Currently, the only way to interact with cluster features is to go through the Cluster.GetAsync or Cluster.RequestAsync.
So in order to have an actor to talk to other cluster actors, is to inject the cluster instance into the actor itself.
This works but is a violation of the interface segregation principle.
Instead, we should likely extract the core functionality needed into some form of IClusterContext or similar.
An interface that only expose the  Cluster.GetAsync and Cluster.RequestAsync methods.
This interface could have some type middle ware if needed, retry and caching policies etc.
We just recently added the IRequestAsync which goes in this direction, but was mostly introduced for testing purposes.
https://github.com/AsynkronIT/protoactor-dotnet/blob/dev/src/Proto.Cluster/RequestAsyncStrategy.cs#L9
But I believe this could be built upon to allow custom policies to be injected.

Latest changes make it so that the Cluster instance is also part of the GrainInit, now called ClusterInit message.
The actor can pick this up and keep a ref to cluster, its cluster identity and kind

This is now supported via the new Extension system.
use  IContext.Cluster() to get the cluster instance inside an actor


v0.6.0

Changes:

Fix: Users info no longer "undefined" when sending out codes (Error 400: to_user_id "undefined" must be numeric)
Updated list of games returned via !whichpack
Migrated Settings to use Redux store
Updated and increased unit-test coverage to aid in bug squashing

Codecov Report
Attention: Patch coverage is 96.24573% with 11 lines in your changes are missing coverage. Please review.

Project coverage is 96.21%. Comparing base (36b72ea) to head (0de9709).
Report is 8 commits behind head on main.

Files
Patch %
Lines

src/components/main-screen/index.jsx
80.76%
9 Missing and 1 partial :warning:

src/utils/queue.js
66.66%
1 Missing :warning:

Additional details and impacted files
@@            Coverage Diff             @@
##             main      #24      +/-   ##
==========================================
+ Coverage   93.62%   96.21%   +2.58%
==========================================
  Files          33       27       -6
  Lines        5428     5126     -302
  Branches      199      192       -7
==========================================
- Hits         5082     4932     -150
+ Misses        344      193     -151
+ Partials        2        1       -1

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


add go reoutines

Happy hacking :)

Thank you @moogacs for contribution 👍

@aprabhat & @rajkumarGosavi Can you please review the code changes?

@moogacs Can you please have look on review comments & incorporate suggested changes?

@sagar-jadhav  will do that

@moogacs I am closing #78 PR due to inactivity. Please raise another PR once you ready with your changes.


Test file logger behaviour on file collision

I noticed that if multiple tests end up with the same test name, the logs are overwritten. Since we need to manually create the test name for Theory tests, it's possible that we'll get it wrong. I think it's a good idea to log a warning in the global test log at least.
We could also explore adding a collision resolution. For example, create logs with new names like DuplicateTest.log, DuplicateTest.1.log, DuplicateTest.2.log ...

cc @anurse


[otlLib] Optimization: Globally merge SingleSubst chain targets

Optimization idea for a rainy day: Identify SingleSubst (GSUB type 1) lookups that are only reachable as targets of chained contextual substitutions but are not directly part of any feature. Try merging these SingleSubst tables, provided that the combined size is smaller than the sum of the parts. This would be a global, cross-lookup version of a local optimization currently performed by makeotf and feaLib; see https://github.com/behdad/fonttools/issues/512.
Like with all optimizations, it would be important to profile the impact with non-toy workloads/fonts.
Personally, I’ve no intentions to implement this anytime soon, but wanted to write it down so it won’t be forgotten. Maybe somebody else want to give it a try some day.

Won't happen IMO.


README: Document our license-list version, parens issue, and license

The “at your option” language is modeled on Rust's from rust-lang/rust@00c856c0 (2012-12-03), although I've made it more compact by using Markdown for the upstream license links.
I'd rather leave caller bugs to the issue tracker, but the paren bug is an important issue for folks writing license expressions (i.e. all crate authors), so I'm calling it out on our README until we get it fixed.
I've also added local files with license text for this package.  These files match what's in Rust 1.23.0, modulo some whitespace in LICENSE-APACHE (which I've pulled directly from apache.org).
Fixes #15.

I've bumped this to the 3.0 license list now that #11 has landed.  I'll give this a week to cook and then land it unless someone raises concerns with it ;).


refactor: run async task in thread pool

Summary
try run async task in thread-pool

Checklist

[ ] Tests updated (or not required).
[ ] Documentation updated (or not required).

!bench

!bench

!bench

!bench

!bench


Add ag-hover when row is hovered

Resynced and updated the pr from #478, github auto closed issue so I'm creating a new one. Solves #223. I've also added in the fix from @antur84
Hopefully @ceolter if you could provide some guidance on where to put or refactoring that needs to be done this we can get this merged in so I don't have to keep the fork up to date at work :).

I won't be making any relevent code changes before looking at this pr, which may not be until the end of the year!


chinese vs japanese

Thanks for making this node module, it looks pretty neat, I've been looking for a separate transliterator, one that's not a web service, for a while now.
I'm trying to transliterate '古代祐三' to Yuzo Koshiro or Koshiroyūzō or at least koshiroyuzo, however, I'm getting the chinese transliteration:
> tr('古代祐三'); // Yuzo Koshiro, google translate gives Koshiroyūzō
'Gu Dai You San'
> tr('鈴木さると'); // Saruto Suzuki, google translate gives Suzuki saru to
'Ling Mu saruto'

Is there a way to prefer japanese over chinese?
Thanks!

Hi! I'm glad that you found this module useful and thanks for bring this up. I have actually thought about this before. From my reasearch, I found two modules which can convert Japanese to Romaji:
https://github.com/WaniKani/WanaKana
https://github.com/hakatashi/japanese.js
Hope it would help

Thanks, kuroshiro seems to come close to what I need.

In the future I'm thinking to integrate something like kuroshiro with transliteration (if doable) or provide a database and / or pluggable rules in a middleware. But I'm not sure when I have time to do this (or probably I'll never have time :)). If there's any thought or suggestions please leave a comment. Thanks