Month: June 2024
Excel changes my Date
Hi, I’m using Microsoft 365 and in excel when I try to type in a date e.g 01012014 excel changes it to 28/10/4670. I have formatted my cells to short date, I have also gone into advanced excel options to ensure that the box isn’t ticked for “use 1904 date system”. I just want to be able to type in a date and the system will automatically put it into the format that I have selected for the cell and keep the correct date. Eg I type 01012014 = excel to populate the cell like 01/01/2024. I have googled and looked into this community page but can’t seem to find the answer that I’m looking for, can anyone help please?
Hi, I’m using Microsoft 365 and in excel when I try to type in a date e.g 01012014 excel changes it to 28/10/4670. I have formatted my cells to short date, I have also gone into advanced excel options to ensure that the box isn’t ticked for “use 1904 date system”. I just want to be able to type in a date and the system will automatically put it into the format that I have selected for the cell and keep the correct date. Eg I type 01012014 = excel to populate the cell like 01/01/2024. I have googled and looked into this community page but can’t seem to find the answer that I’m looking for, can anyone help please? Read More
conditional formating with time (hours)
I have three columns, first one with break time out and second with break time in. The third have to show the difference and if it is grater than one hour it has to show in red text. times are entered in this format 13.30 (for 1:30 PM)
I have three columns, first one with break time out and second with break time in. The third have to show the difference and if it is grater than one hour it has to show in red text. times are entered in this format 13.30 (for 1:30 PM) Read More
external trigger to initiate script commands
I’m wanted to use an external device to trigger my script. I have limited experience with Simulink so I’m not sure if that is the right system to use. Ideal, once something sets off the trigger, I want it to run my code.I’m wanted to use an external device to trigger my script. I have limited experience with Simulink so I’m not sure if that is the right system to use. Ideal, once something sets off the trigger, I want it to run my code. I’m wanted to use an external device to trigger my script. I have limited experience with Simulink so I’m not sure if that is the right system to use. Ideal, once something sets off the trigger, I want it to run my code. simulink, external, trigger, input, output MATLAB Answers — New Questions
Why do I see “The RPC server is unavailable” when calling Hysys solver from MATLAB?
Hi! I am trying to automate my hysys model on MATLAB, and successfully linked via actxserver. Added my code below. Currently, I keep getting the error that
Warning: Error during simulation run: Invalid input for argument 2 (rhs2):
Value must be numeric or logical
I tried to see what the problem was and used the code:
>> properties(MySimCase.Solver)
but I received back the error below:
Error: The RPC server is unavailable.
When I code properties(MySimCase), it is able to list for me all the properties, only for solver it isnt.
Please help!
Below is the full code:
>> % Connect to HYSYS Application
try
MyObject = actxserver(‘Hysys.Application’);
catch ME
error(‘Error connecting to HYSYS: %s’, ME.message);
end
FileNamePath = ‘Test’; % Adjust the filename as needed
try
MySimCase = MyObject.SimulationCases.Open([cd, strcat(”, FileNamePath, ‘.hsc’)]);
catch ME
error(‘Error opening simulation case: %s’, ME.message);
end
MySimCase.Visible = true;
% Verify the list of unit operations
try
unitOperations = MySimCase.Flowsheet.Operations;
numUnitOperations = unitOperations.Count;
unitOperationNames = cell(numUnitOperations, 1);
for idx = 1:numUnitOperations
unitOperationNames{idx} = unitOperations.Item(idx – 1).Name; % Adjusting index for MATLAB (1-based)
end
disp(‘Available unit operations in the flowsheet:’);
disp(unitOperationNames);
catch ME
error(‘Error accessing unit operations: %s’, ME.message);
end
% Access the LIC control under unit operations
try
LICSP = unitOperations.Item(‘LIC’);
catch ME
error(‘Error accessing LIC control: %s’, ME.message);
end
if isempty(LICSP)
error(‘The ”LIC” control was not found in the flowsheet.’);
end
% Display the properties of LICSP for debugging
disp(‘Properties of LICSP:’);
disp(get(LICSP));
% Set the range for the filling level in LIC (SP)
startLevel = 0.5;
endLevel = 0.9;
stepSize = 0.1;
% Initialize variables for storing the results
seagoingBOG = [];
cjkBOG = [];
portBOG = [];
boilerBOG = [];
% Loop through the filling levels
fillingLevel = startLevel:stepSize:endLevel;
for i = 1:numel(fillingLevel)
% Set the filling level value
try
LICSP.SPValue = fillingLevel(i); % Set the setpoint value
catch ME
warning(‘Error setting LIC control set point: %s’, ME.message);
continue;
end
% Run the simulation case
try
MySimCase.Solver.Integrator.RunUntil(MySimCase.Solver.Integrator.CurrentTime)
catch ME
warning(‘Error during simulation run: %s’, ME.message);
continue;
end
% Obtain Seagoing BOG
try
bog2Stream = MySimCase.Flowsheet.MaterialStreams.Item(‘BOG2’);
seagoingBOG(i) = bog2Stream.MolarFlow.GetValue(‘kgmole/h’) * 8760; % Assuming 8760 hours in a year
catch ME
warning(‘Error accessing BOG2 stream for Seagoing BOG: %s’, ME.message);
seagoingBOG(i) = NaN;
end
% Obtain CJK BOG
try
bog2Stream = MySimCase.Flowsheet.MaterialStreams.Item(‘BOG2’);
cjkBOG(i) = bog2Stream.MolarFlow.GetValue(‘kgmole/h’) * 8760 * 0.5; % Example: Assuming CJK BOG is 50% of BOG2
catch ME
warning(‘Error accessing BOG2 stream for CJK BOG: %s’, ME.message);
cjkBOG(i) = NaN;
end
% Obtain Port BOG
try
bog3Stream = MySimCase.Flowsheet.MaterialStreams.Item(‘BOG3’);
portBOG(i) = bog3Stream.MolarFlow.GetValue(‘kgmole/h’) * 8760; % Assuming 8760 hours in a year
catch ME
warning(‘Error accessing BOG3 stream for Port BOG: %s’, ME.message);
portBOG(i) = NaN;
end
% Obtain Boiler BOG
try
bog2Stream = MySimCase.Flowsheet.MaterialStreams.Item(‘BOG2’);
bog3Stream = MySimCase.Flowsheet.MaterialStreams.Item(‘BOG3’);
boilerBOG(i) = (bog2Stream.MolarFlow.GetValue(‘kgmole/h’) + bog3Stream.MolarFlow.GetValue(‘kgmole/h’)) * 8760 – cjkBOG(i);
catch ME
warning(‘Error accessing BOG streams for Boiler BOG: %s’, ME.message);
boilerBOG(i) = NaN;
end
end
% Close the HYSYS application
MyObject.Quit();Hi! I am trying to automate my hysys model on MATLAB, and successfully linked via actxserver. Added my code below. Currently, I keep getting the error that
Warning: Error during simulation run: Invalid input for argument 2 (rhs2):
Value must be numeric or logical
I tried to see what the problem was and used the code:
>> properties(MySimCase.Solver)
but I received back the error below:
Error: The RPC server is unavailable.
When I code properties(MySimCase), it is able to list for me all the properties, only for solver it isnt.
Please help!
Below is the full code:
>> % Connect to HYSYS Application
try
MyObject = actxserver(‘Hysys.Application’);
catch ME
error(‘Error connecting to HYSYS: %s’, ME.message);
end
FileNamePath = ‘Test’; % Adjust the filename as needed
try
MySimCase = MyObject.SimulationCases.Open([cd, strcat(”, FileNamePath, ‘.hsc’)]);
catch ME
error(‘Error opening simulation case: %s’, ME.message);
end
MySimCase.Visible = true;
% Verify the list of unit operations
try
unitOperations = MySimCase.Flowsheet.Operations;
numUnitOperations = unitOperations.Count;
unitOperationNames = cell(numUnitOperations, 1);
for idx = 1:numUnitOperations
unitOperationNames{idx} = unitOperations.Item(idx – 1).Name; % Adjusting index for MATLAB (1-based)
end
disp(‘Available unit operations in the flowsheet:’);
disp(unitOperationNames);
catch ME
error(‘Error accessing unit operations: %s’, ME.message);
end
% Access the LIC control under unit operations
try
LICSP = unitOperations.Item(‘LIC’);
catch ME
error(‘Error accessing LIC control: %s’, ME.message);
end
if isempty(LICSP)
error(‘The ”LIC” control was not found in the flowsheet.’);
end
% Display the properties of LICSP for debugging
disp(‘Properties of LICSP:’);
disp(get(LICSP));
% Set the range for the filling level in LIC (SP)
startLevel = 0.5;
endLevel = 0.9;
stepSize = 0.1;
% Initialize variables for storing the results
seagoingBOG = [];
cjkBOG = [];
portBOG = [];
boilerBOG = [];
% Loop through the filling levels
fillingLevel = startLevel:stepSize:endLevel;
for i = 1:numel(fillingLevel)
% Set the filling level value
try
LICSP.SPValue = fillingLevel(i); % Set the setpoint value
catch ME
warning(‘Error setting LIC control set point: %s’, ME.message);
continue;
end
% Run the simulation case
try
MySimCase.Solver.Integrator.RunUntil(MySimCase.Solver.Integrator.CurrentTime)
catch ME
warning(‘Error during simulation run: %s’, ME.message);
continue;
end
% Obtain Seagoing BOG
try
bog2Stream = MySimCase.Flowsheet.MaterialStreams.Item(‘BOG2’);
seagoingBOG(i) = bog2Stream.MolarFlow.GetValue(‘kgmole/h’) * 8760; % Assuming 8760 hours in a year
catch ME
warning(‘Error accessing BOG2 stream for Seagoing BOG: %s’, ME.message);
seagoingBOG(i) = NaN;
end
% Obtain CJK BOG
try
bog2Stream = MySimCase.Flowsheet.MaterialStreams.Item(‘BOG2’);
cjkBOG(i) = bog2Stream.MolarFlow.GetValue(‘kgmole/h’) * 8760 * 0.5; % Example: Assuming CJK BOG is 50% of BOG2
catch ME
warning(‘Error accessing BOG2 stream for CJK BOG: %s’, ME.message);
cjkBOG(i) = NaN;
end
% Obtain Port BOG
try
bog3Stream = MySimCase.Flowsheet.MaterialStreams.Item(‘BOG3’);
portBOG(i) = bog3Stream.MolarFlow.GetValue(‘kgmole/h’) * 8760; % Assuming 8760 hours in a year
catch ME
warning(‘Error accessing BOG3 stream for Port BOG: %s’, ME.message);
portBOG(i) = NaN;
end
% Obtain Boiler BOG
try
bog2Stream = MySimCase.Flowsheet.MaterialStreams.Item(‘BOG2’);
bog3Stream = MySimCase.Flowsheet.MaterialStreams.Item(‘BOG3’);
boilerBOG(i) = (bog2Stream.MolarFlow.GetValue(‘kgmole/h’) + bog3Stream.MolarFlow.GetValue(‘kgmole/h’)) * 8760 – cjkBOG(i);
catch ME
warning(‘Error accessing BOG streams for Boiler BOG: %s’, ME.message);
boilerBOG(i) = NaN;
end
end
% Close the HYSYS application
MyObject.Quit(); Hi! I am trying to automate my hysys model on MATLAB, and successfully linked via actxserver. Added my code below. Currently, I keep getting the error that
Warning: Error during simulation run: Invalid input for argument 2 (rhs2):
Value must be numeric or logical
I tried to see what the problem was and used the code:
>> properties(MySimCase.Solver)
but I received back the error below:
Error: The RPC server is unavailable.
When I code properties(MySimCase), it is able to list for me all the properties, only for solver it isnt.
Please help!
Below is the full code:
>> % Connect to HYSYS Application
try
MyObject = actxserver(‘Hysys.Application’);
catch ME
error(‘Error connecting to HYSYS: %s’, ME.message);
end
FileNamePath = ‘Test’; % Adjust the filename as needed
try
MySimCase = MyObject.SimulationCases.Open([cd, strcat(”, FileNamePath, ‘.hsc’)]);
catch ME
error(‘Error opening simulation case: %s’, ME.message);
end
MySimCase.Visible = true;
% Verify the list of unit operations
try
unitOperations = MySimCase.Flowsheet.Operations;
numUnitOperations = unitOperations.Count;
unitOperationNames = cell(numUnitOperations, 1);
for idx = 1:numUnitOperations
unitOperationNames{idx} = unitOperations.Item(idx – 1).Name; % Adjusting index for MATLAB (1-based)
end
disp(‘Available unit operations in the flowsheet:’);
disp(unitOperationNames);
catch ME
error(‘Error accessing unit operations: %s’, ME.message);
end
% Access the LIC control under unit operations
try
LICSP = unitOperations.Item(‘LIC’);
catch ME
error(‘Error accessing LIC control: %s’, ME.message);
end
if isempty(LICSP)
error(‘The ”LIC” control was not found in the flowsheet.’);
end
% Display the properties of LICSP for debugging
disp(‘Properties of LICSP:’);
disp(get(LICSP));
% Set the range for the filling level in LIC (SP)
startLevel = 0.5;
endLevel = 0.9;
stepSize = 0.1;
% Initialize variables for storing the results
seagoingBOG = [];
cjkBOG = [];
portBOG = [];
boilerBOG = [];
% Loop through the filling levels
fillingLevel = startLevel:stepSize:endLevel;
for i = 1:numel(fillingLevel)
% Set the filling level value
try
LICSP.SPValue = fillingLevel(i); % Set the setpoint value
catch ME
warning(‘Error setting LIC control set point: %s’, ME.message);
continue;
end
% Run the simulation case
try
MySimCase.Solver.Integrator.RunUntil(MySimCase.Solver.Integrator.CurrentTime)
catch ME
warning(‘Error during simulation run: %s’, ME.message);
continue;
end
% Obtain Seagoing BOG
try
bog2Stream = MySimCase.Flowsheet.MaterialStreams.Item(‘BOG2’);
seagoingBOG(i) = bog2Stream.MolarFlow.GetValue(‘kgmole/h’) * 8760; % Assuming 8760 hours in a year
catch ME
warning(‘Error accessing BOG2 stream for Seagoing BOG: %s’, ME.message);
seagoingBOG(i) = NaN;
end
% Obtain CJK BOG
try
bog2Stream = MySimCase.Flowsheet.MaterialStreams.Item(‘BOG2’);
cjkBOG(i) = bog2Stream.MolarFlow.GetValue(‘kgmole/h’) * 8760 * 0.5; % Example: Assuming CJK BOG is 50% of BOG2
catch ME
warning(‘Error accessing BOG2 stream for CJK BOG: %s’, ME.message);
cjkBOG(i) = NaN;
end
% Obtain Port BOG
try
bog3Stream = MySimCase.Flowsheet.MaterialStreams.Item(‘BOG3’);
portBOG(i) = bog3Stream.MolarFlow.GetValue(‘kgmole/h’) * 8760; % Assuming 8760 hours in a year
catch ME
warning(‘Error accessing BOG3 stream for Port BOG: %s’, ME.message);
portBOG(i) = NaN;
end
% Obtain Boiler BOG
try
bog2Stream = MySimCase.Flowsheet.MaterialStreams.Item(‘BOG2’);
bog3Stream = MySimCase.Flowsheet.MaterialStreams.Item(‘BOG3’);
boilerBOG(i) = (bog2Stream.MolarFlow.GetValue(‘kgmole/h’) + bog3Stream.MolarFlow.GetValue(‘kgmole/h’)) * 8760 – cjkBOG(i);
catch ME
warning(‘Error accessing BOG streams for Boiler BOG: %s’, ME.message);
boilerBOG(i) = NaN;
end
end
% Close the HYSYS application
MyObject.Quit(); matlab, hysys MATLAB Answers — New Questions
How do I install Windows 11 on unsupported hardware without losing data?
I would like to learn how to install Windows 11 on unsupported hardware. My current computer does not meet Microsoft’s official system requirements, such as TPM and Secure Boot, but I would still like to upgrade. I am particularly concerned about losing all my data and files or applications during the installation process. Can anyone provide a detailed tutorial or tips on how to successfully bypass these limitations and install Windows 11 on my computer without affecting its performance or losing data? Any help would be greatly appreciated!
I would like to learn how to install Windows 11 on unsupported hardware. My current computer does not meet Microsoft’s official system requirements, such as TPM and Secure Boot, but I would still like to upgrade. I am particularly concerned about losing all my data and files or applications during the installation process. Can anyone provide a detailed tutorial or tips on how to successfully bypass these limitations and install Windows 11 on my computer without affecting its performance or losing data? Any help would be greatly appreciated! Read More
Property assignment is not allowed when the object is empty. Use subscripted assignment to create an array element.
This code is meant to read off a data stream from a creep frame and continuously save it until told to stop by attached ui. The problem is I had to move it to a new computer and reinstall everything necessary. Now I am getting a error from line 30 which states startBackground(s);
Property assignment is not allowed when the object is empty. Use subscripted assignment to create an array element.
here is the input code i used. a separate Ui is created where the controlling properties like time interval, radius, initial length, triaxality and displacement increment are told. along with a folder designated, and name of output file. What should happen is that once i press run, the program should start recording the data after file directory is selected. Instead as soon as file directory is selected I get the error.
here is the code
clc;clear;
% c is a struct
c.Date = clock;
c.Rate = 10;
%% Reading/Setting DAQ
s = daq.createSession(‘dt’);
s.addAnalogInputChannel(‘DT9804(00)’,’0′,’Voltage’);
s.addAnalogInputChannel(‘DT9804(00)’,’1′,’Voltage’);
s.addAnalogInputChannel(‘DT9804(00)’,’2′,’Voltage’);
s.addAnalogInputChannel(‘DT9804(00)’,’3′,’Voltage’);
s.addAnalogInputChannel(‘DT9804(00)’,’4′,’Voltage’);
s.Rate = c.Rate; % Background acuisition rate
%%
% Display graphical user interface
hGui = createDataCaptureUI(s);
% Add a listener for DataAvailable events and specify the callback function
dataListener = addlistener(s, ‘DataAvailable’, @(src,event) dataCapture(src, event, c, hGui));
% Start continuous background data acquisition
s.IsContinuous = true;
startBackground(s);
% Wait until session s is stopped from the UI
while s.IsRunning
pause(0.5);
end
delete(dataListener);
delete(s);
I looked up solutions to the error online. but they do not seem to apply.
the gui file doesn’t seem to be the source of the problemThis code is meant to read off a data stream from a creep frame and continuously save it until told to stop by attached ui. The problem is I had to move it to a new computer and reinstall everything necessary. Now I am getting a error from line 30 which states startBackground(s);
Property assignment is not allowed when the object is empty. Use subscripted assignment to create an array element.
here is the input code i used. a separate Ui is created where the controlling properties like time interval, radius, initial length, triaxality and displacement increment are told. along with a folder designated, and name of output file. What should happen is that once i press run, the program should start recording the data after file directory is selected. Instead as soon as file directory is selected I get the error.
here is the code
clc;clear;
% c is a struct
c.Date = clock;
c.Rate = 10;
%% Reading/Setting DAQ
s = daq.createSession(‘dt’);
s.addAnalogInputChannel(‘DT9804(00)’,’0′,’Voltage’);
s.addAnalogInputChannel(‘DT9804(00)’,’1′,’Voltage’);
s.addAnalogInputChannel(‘DT9804(00)’,’2′,’Voltage’);
s.addAnalogInputChannel(‘DT9804(00)’,’3′,’Voltage’);
s.addAnalogInputChannel(‘DT9804(00)’,’4′,’Voltage’);
s.Rate = c.Rate; % Background acuisition rate
%%
% Display graphical user interface
hGui = createDataCaptureUI(s);
% Add a listener for DataAvailable events and specify the callback function
dataListener = addlistener(s, ‘DataAvailable’, @(src,event) dataCapture(src, event, c, hGui));
% Start continuous background data acquisition
s.IsContinuous = true;
startBackground(s);
% Wait until session s is stopped from the UI
while s.IsRunning
pause(0.5);
end
delete(dataListener);
delete(s);
I looked up solutions to the error online. but they do not seem to apply.
the gui file doesn’t seem to be the source of the problem This code is meant to read off a data stream from a creep frame and continuously save it until told to stop by attached ui. The problem is I had to move it to a new computer and reinstall everything necessary. Now I am getting a error from line 30 which states startBackground(s);
Property assignment is not allowed when the object is empty. Use subscripted assignment to create an array element.
here is the input code i used. a separate Ui is created where the controlling properties like time interval, radius, initial length, triaxality and displacement increment are told. along with a folder designated, and name of output file. What should happen is that once i press run, the program should start recording the data after file directory is selected. Instead as soon as file directory is selected I get the error.
here is the code
clc;clear;
% c is a struct
c.Date = clock;
c.Rate = 10;
%% Reading/Setting DAQ
s = daq.createSession(‘dt’);
s.addAnalogInputChannel(‘DT9804(00)’,’0′,’Voltage’);
s.addAnalogInputChannel(‘DT9804(00)’,’1′,’Voltage’);
s.addAnalogInputChannel(‘DT9804(00)’,’2′,’Voltage’);
s.addAnalogInputChannel(‘DT9804(00)’,’3′,’Voltage’);
s.addAnalogInputChannel(‘DT9804(00)’,’4′,’Voltage’);
s.Rate = c.Rate; % Background acuisition rate
%%
% Display graphical user interface
hGui = createDataCaptureUI(s);
% Add a listener for DataAvailable events and specify the callback function
dataListener = addlistener(s, ‘DataAvailable’, @(src,event) dataCapture(src, event, c, hGui));
% Start continuous background data acquisition
s.IsContinuous = true;
startBackground(s);
% Wait until session s is stopped from the UI
while s.IsRunning
pause(0.5);
end
delete(dataListener);
delete(s);
I looked up solutions to the error online. but they do not seem to apply.
the gui file doesn’t seem to be the source of the problem property assignment, create array element, oop MATLAB Answers — New Questions
AVASOFT Presents: Unveiling Microsoft’s Security Copilot – Exclusive Webinar
Webinar Overview
Seize this unique opportunity to delve into the capabilities of Microsoft’s Security Copilot. Designed for IT professionals, security specialists, and decision-makers, this webinar will equip you with the knowledge and tools to safeguard your organization’s critical assets and stay ahead of emerging threats.
What to Expect
Core Features and Benefits: Explore the powerful functionalities of Security Copilot and how they can transform your security posture.Effortless Integration: Learn best practices for integrating Security Copilot with your existing security infrastructure.Success Stories: Gain insights from real-world use cases and success stories.
Interactive Q&A Session: Engage with our experts and get answers to your specific questions.
Speakers:
Hemanathan (Practice Head – IAM and Security)
Aswin Ramanujam (Software Engineer)
Ruban S (Software Engineer)
Sanjana Satya Narayana (Software Engineer)
Webinar OverviewSeize this unique opportunity to delve into the capabilities of Microsoft’s Security Copilot. Designed for IT professionals, security specialists, and decision-makers, this webinar will equip you with the knowledge and tools to safeguard your organization’s critical assets and stay ahead of emerging threats. REGISTER HERE! What to Expect Core Features and Benefits: Explore the powerful functionalities of Security Copilot and how they can transform your security posture.Effortless Integration: Learn best practices for integrating Security Copilot with your existing security infrastructure.Success Stories: Gain insights from real-world use cases and success stories.Interactive Q&A Session: Engage with our experts and get answers to your specific questions. Speakers:Hemanathan (Practice Head – IAM and Security)Aswin Ramanujam (Software Engineer)Ruban S (Software Engineer)Sanjana Satya Narayana (Software Engineer) Read More
Announcing Face API Service SDKs for Liveness
The Azure AI Vision Face team updated the public preview of Liveness Detection at //build in May. You can read more about it here You Are Real: More Secure Identity Verification – Microsoft Community Hub.
We are now happy to announce the availability of client library for building an app server for Liveness Detection in the four core Azure languages.
.NET (C#): https://www.nuget.org/packages/Azure.AI.Vision.Face/
Java: https://central.sonatype.com/artifact/com.azure/azure-ai-vision-face
Python: https://pypi.org/project/azure-ai-vision-face/
Javascript: https://www.npmjs.com/package/@azure-rest/ai-vision-face
The liveness solution integration consists of two separate components: a frontend mobile/web application and an app server/orchestrator. With the library, you can now easily build the app server needed for a complete liveness solution in your preferred programming language. This includes operations for creating a liveness session, querying the liveness detection result and audit logs. You can learn more from this tutorial.
Microsoft Tech Community – Latest Blogs –Read More
Strange issue with mean, max, and min of vector?
Hello,
I am having an issue with finding the mean max and min of a vector (attached). All values in the vector are positive (increments of time) and less than 1. However, when I test the mean() = -8.0219, max = 9.5770, min = -4.3200e+04. When I try to find() the indices of the min and max, it says that it is 1 but, the value at index 1 is 0.012.
When you test the vector, do you get the same result? Why is it outputting these incorrect values?Hello,
I am having an issue with finding the mean max and min of a vector (attached). All values in the vector are positive (increments of time) and less than 1. However, when I test the mean() = -8.0219, max = 9.5770, min = -4.3200e+04. When I try to find() the indices of the min and max, it says that it is 1 but, the value at index 1 is 0.012.
When you test the vector, do you get the same result? Why is it outputting these incorrect values? Hello,
I am having an issue with finding the mean max and min of a vector (attached). All values in the vector are positive (increments of time) and less than 1. However, when I test the mean() = -8.0219, max = 9.5770, min = -4.3200e+04. When I try to find() the indices of the min and max, it says that it is 1 but, the value at index 1 is 0.012.
When you test the vector, do you get the same result? Why is it outputting these incorrect values? mean, max, min MATLAB Answers — New Questions
How do I remove landing zone created from ARM template
Hi All,
I created a landing zone from an ARM template (enterprise-scale for small enterprises), which can be found here. Since then, I deleted all the management groups, but I still see some residuals such as ‘metric alert rule,’ ‘log analytics workspace,’ etc.
How do I go about removing everything that was created from the ARM template and ensure nothing is left behind?
Many thanks,
James.
Hi All,I created a landing zone from an ARM template (enterprise-scale for small enterprises), which can be found here. Since then, I deleted all the management groups, but I still see some residuals such as ‘metric alert rule,’ ‘log analytics workspace,’ etc. How do I go about removing everything that was created from the ARM template and ensure nothing is left behind? Many thanks,James. Read More
I have 3 option to pick which I need that the time
I have codes to pick which on to print. I have one button
Private Sub PrintButton_Click()
Dim selectedOption As Integer
‘ Get user selection from option buttons
selectedOption = GetSelectedOption()
Select Case selectedOption
Case 1
PrintLast3Months
Case 2
PrintLastMonthToCurrent
Case 3
PrintCurrentMonth
Case Else
MsgBox “Please select an option.”, vbExclamation
End Select
End Sub
I have codes to pick which on to print. I have one buttonPrivate Sub PrintButton_Click()
Dim selectedOption As Integer
‘ Get user selection from option buttons
selectedOption = GetSelectedOption()
Select Case selectedOption
Case 1
PrintLast3Months
Case 2
PrintLastMonthToCurrent
Case 3
PrintCurrentMonth
Case Else
MsgBox “Please select an option.”, vbExclamation
End Select
End Sub Read More
Crashing in Sharepoint – halp plz
Hi community,
I work with Sharepoint pretty frequently. For the past 2 months, I found that I will be working on a file, and then without any sign or warning, Sharepoint crashes and then reloads with a new file (that I had not clicked on, sometimes haven’t even interacted with the file before). I am trying to figure out a way to report the problem to Microsoft, because this happens with every 1-3 files I touch. We use this every day for hundreds of files, so this problem is terrible in terms of completing job duties. Does anyone know what to do here? Any suggestions?
Thanks!
Hi community, I work with Sharepoint pretty frequently. For the past 2 months, I found that I will be working on a file, and then without any sign or warning, Sharepoint crashes and then reloads with a new file (that I had not clicked on, sometimes haven’t even interacted with the file before). I am trying to figure out a way to report the problem to Microsoft, because this happens with every 1-3 files I touch. We use this every day for hundreds of files, so this problem is terrible in terms of completing job duties. Does anyone know what to do here? Any suggestions? Thanks! Read More
Business Applications Partner News: Week of June 17
Check out this week’s top resources to stay up-to-date on the latest Business Applications Partner News. Remember to sign up for the monthly Dynamics 365 and Power Platform partner pulse newsletters.
What to register for:
Viva Engage Business Applications Partner Community
What to download:
FY25 Partner Activities Office Hours Deck
What to review/like/share:
Partner case study: Alterna lights up operational efficiency for renewable energy provider with Dynamics 365
May Highlights Rewind: LinkedIn | direct blog link
RSM creates winning playbook for midmarket ERP cloud migration: LinkedIn | direct blog link
What to watch:
June 6 Tech Talk: Power Platform Well-Architected
Reminders: Register for the upcoming partner events!
Events:
June 24-27: FY25 Partner Activities deep-dive webinar series
July 10: MCAPS Start for Partners
July 22: Microsoft Partner FY25 GTM Launch Event for Business Applications
Sep 18-20: Microsoft Power Platform Conference
Trainings:
Level Up Copilot Sales Champion training course (access code: MOKC-MCJB)
Check out this week’s top resources to stay up-to-date on the latest Business Applications Partner News. Remember to sign up for the monthly Dynamics 365 and Power Platform partner pulse newsletters.
What to register for:
Viva Engage Business Applications Partner Community
What to download:
FY25 Partner Activities Office Hours Deck
What to review/like/share:
Partner case study: Alterna lights up operational efficiency for renewable energy provider with Dynamics 365
May Highlights Rewind: LinkedIn | direct blog link
RSM creates winning playbook for midmarket ERP cloud migration: LinkedIn | direct blog link
What to watch:
June 6 Tech Talk: Power Platform Well-Architected
Reminders: Register for the upcoming partner events!
Events:
June 24-27: FY25 Partner Activities deep-dive webinar series
July 10: MCAPS Start for Partners
July 22: Microsoft Partner FY25 GTM Launch Event for Business Applications
Sep 18-20: Microsoft Power Platform Conference
Trainings:
Level Up Copilot Sales Champion training course (access code: MOKC-MCJB)
ET DELETED TinyPE Binary – Possibly Hostile
I have a firewall rule, which is blocking communication from 151.101.126.172 to my local windows 10 machine, under category “ET DELETED TinyPE Binary – Possibly Hostile”
How to get dynamic list of authorized ip’s which must have to connect with my windows machine while window update?
I don’t want to disable the rule for all the sources ip’s.
I have a firewall rule, which is blocking communication from 151.101.126.172 to my local windows 10 machine, under category “ET DELETED TinyPE Binary – Possibly Hostile” How to get dynamic list of authorized ip’s which must have to connect with my windows machine while window update?I don’t want to disable the rule for all the sources ip’s. Read More
Premium Planner Plans and PowerBI integration
Can you now, or will you be able to, configure reporting in PowerBI from one or multiple premium MS Planner plans?
Can you now, or will you be able to, configure reporting in PowerBI from one or multiple premium MS Planner plans? Read More
Unleashing PTU Tokens Throughput with KV-Cache-Friendly Prompt on Azure
1- Introduction
PTUs are reserved processing capacity, ensuring stable performance for uniform LLM workloads. The reserved capacity of PTUs makes KV caching more effective compared to Pay-As-You-Go (PayGo). This blog post delves into the role of Key-Value (KV) caching in enhancing PTU throughput, and practical strategies to create cache-friendly prompts that maximize efficiency.
2- What are Provisioned Throughput Units (PTUs)?
Provisioned Throughput Units (PTUs) in Azure represent a dedicated model processing capacity that can be reserved and deployed for handling prompts and generating completions. The key benefits of PTUs include:
Predictable Performance: Ensures stable maximum latency and throughput for uniform workloads.
Reserved Processing Capacity: Once deployed, the throughput is available irrespective of utilization.
Cost Savings: High throughput workloads may lead to cost savings compared to token-based consumption models.
3- KV Caching: Enhancing Efficiency in Language Models
Key-Value (KV) caching is a technique employed in generative transformer models, such as language models (LLMs), to optimize the inference process. Key aspects of KV caching include:
Reduction of Computational Cost: Minimizes the need to recompute key and value tensors for past tokens during each generation step.
Memory-Compute Trade-off: Tensors are stored (cached) in GPU memory, balancing memory usage and compute efficiency.
4- Crafting KV Cache-Friendly Prompts:
To optimize your prompts for KV caching, consider the following strategies:
Position Dynamic Elements Wisely: Place dynamic elements, such as grounding data, date & time, or chat history, toward the end of your prompt.
Maintain Order for Static Elements: Keep static elements like safety instructions, examples, and tool/function definitions at the beginning and in a consistent order.
Dedicate Your PTU Deployment: Dedicating your deployment to few use cases can further improve cache hit rates, as the requests will be more uniform.
5- A Case Study with GPT4-T-0409:
The following experiments focused on the impact of the cacheable/fixed percentage of the prompt on system performance, specifically average time-to-first-token and throughput. The results showed a clear trend: as the fixed/cacheable part of the prompt increased, the average latency decreased and the request capacity increased.
General Settings:
Model: GPT4-T-0409
Region: UK South
PTU: 100
Load test duration: 5 min
Experiment 1:
Input token size: 10245
Output token size: 192
Cacheable % of the prompt
1%
25%
50%
75%
Throughput (request/min)
7
9
12.5
20
Time to first token (sec)
2.4
2.0
1.77
1.3
Analysis:
Throughput Improvement: As the cacheable percentage of the prompt increased from 1% to 75%, throughput saw a significant increase from 7 requests per minute to 20 requests per minute. This translates to nearly a threefold improvement, highlighting the efficiency gain from caching.
Latency Reduction: The time to the first token decreased from 2.4 seconds to 1.3 seconds as the cacheable percentage increased. This reduction in latency indicates faster initial response times, which is crucial for user experience.
Experiment 2:
Input token size: 5000
Output token size: 100
Cacheable % of the prompt
1%
25%
50%
75%
Throughput (request/min)
17
22
32
55
Time to first token (sec)
1.31
1.25
1.16
0.9
Analysis:
Throughput Improvement: When the cacheable percentage of the prompt increased from 1% to 75%, throughput saw an impressive rise from 17 requests per minute to 55 requests per minute. This more than threefold increase demonstrates the substantial impact of cache-friendly prompts on system performance.
Latency Reduction: The time to the first token improved from 1.31 seconds to 0.9 seconds with higher cacheable percentages. This faster response time is beneficial for applications requiring real-time or near-real-time interactions.
* The results may vary based on the model type, deployment region, and use case.
Summary of the results:
In both experiments, a longer cacheable part of the prompt resulted in significant boosts in throughput and reductions in latency. The improvements were more pronounced in Experiment 2, likely due to the smaller input token sizes.
Throughput: Across both experiments, a higher cacheable percentage of the prompt resulted in substantial increases in throughput. In Experiment 1, throughput increased by almost 186%, and in Experiment 2, it increased by approximately 224% from the lowest to the highest cacheable percentage.
Latency: The time to the first token decreased consistently as the cacheable percentage of the prompt increased. This reduction in latency enhances the user experience by providing quicker initial responses.
These results underscore the importance of optimizing prompts to be cache-friendly, thereby maximizing the performance of the system in terms of both throughput and latency. By leveraging caching strategies, systems can handle more requests per minute and provide faster responses, ultimately leading to a more efficient and scalable AI deployment.
6- Conclusion
Provisioned Throughput Units (PTUs) in Azure offer significant advantages in terms of performance, capacity, and cost savings. By leveraging KV caching and creating cache-friendly prompts, you can further enhance the efficiency of your AI workloads. Optimizing prompt structure not only maximizes the benefits of PTUs but also ensures more effective and resource-efficient model processing.
7- Acknowledgments
A special thanks to Michael Tremeer for his invaluable review and feedback on this blog post. Your insights have greatly enhanced the quality of this work.
8- References
Transformers KV Caching Explained | by João Lages | Medium
Techniques for KV Cache Optimization in Large Language Models (omrimallis.com)
Microsoft Tech Community – Latest Blogs –Read More
Don’t know what is wrong with my output of this code
function [MOVINGREG] = registerMarsImages(MOVING,FIXED)
% Convert images to grayscale if they are RGB
if size(MOVING, 3) == 3
MOVING = rgb2gray(MOVING);
end
if size(FIXED, 3) == 3
FIXED = rgb2gray(FIXED);
end
% Detect features in both images
points1 = detectSURFFeatures(MOVING, ‘MetricThreshold’, 1000);
points2 = detectSURFFeatures(FIXED, ‘MetricThreshold’, 1000);
% Extract features from both images
[features1, valid_points1] = extractFeatures(MOVING, points1);
[features2, valid_points2] = extractFeatures(FIXED, points2);
% Match features by using their descriptors
indexPairs = matchFeatures(features1, features2, ‘MatchThreshold’, 10, ‘MaxRatio’, 0.7);
% Retrieve locations of corresponding points for each image
matchedPoints1 = valid_points1(indexPairs(:, 1), :);
matchedPoints2 = valid_points2(indexPairs(:, 2), :);
% Estimate the transformation between the moving and fixed images
[tform, inlierIdx] = estimateGeometricTransform2D(matchedPoints1, matchedPoints2, ‘projective’, ‘Confidence’, 99.9, ‘MaxNumTrials’, 2000);
% Get the output limits for the transformation
[xLimitsMoving, yLimitsMoving] = outputLimits(tform, [1 size(MOVING, 2)], [1 size(MOVING, 1)]);
[xLimitsFixed, yLimitsFixed] = outputLimits(projective2d(eye(3)), [1 size(FIXED, 2)], [1 size(FIXED, 1)]);
% Determine the size of the panorama
xMin = min([xLimitsMoving xLimitsFixed]);
xMax = max([xLimitsMoving xLimitsFixed]);
yMin = min([yLimitsMoving yLimitsFixed]);
yMax = max([yLimitsMoving yLimitsFixed]);
width = round(xMax – xMin);
height = round(yMax – yMin);
% Create an empty panorama canvas
panorama = zeros(height, width, ‘like’, FIXED);
% Create reference objects for the panorama and the fixed image
panoramaView = imref2d([height width], [xMin xMax], [yMin yMax]);
fixedRef = imref2d(size(FIXED), [xLimitsFixed(1) xLimitsFixed(2)], [yLimitsFixed(1) yLimitsFixed(2)]);
% Warp the moving image into the panorama
registered = imwarp(MOVING, tform, ‘OutputView’, panoramaView);
% Overlay the fixed image onto the panorama
panorama = imwarp(FIXED, projective2d(eye(3)), ‘OutputView’, panoramaView, ‘FillValues’, 0);
panorama = max(panorama, registered);
% Resize the panorama to fit within 1024×1024
scaleFactor = min(1024 / width, 1024 / height);
panoramaScaled = imresize(panorama, scaleFactor);
% Create a 1024×1024 canvas
finalPanorama = zeros(1024, 1024, ‘like’, FIXED);
% Determine the position to center the scaled stitched image within the canvas
[scaledHeight, scaledWidth] = size(panoramaScaled);
xOffset = max(0, round((1024 – scaledWidth) / 2));
yOffset = max(0, round((1024 – scaledHeight) / 2));
% Place the scaled stitched image onto the 1024×1024 canvas
finalPanorama(yOffset + (1:scaledHeight), xOffset + (1:scaledWidth)) = panoramaScaled;
% Store the registered image
MOVINGREG.RegisteredImage = finalPanorama;
% Store the transformation object
MOVINGREG.Transformation = tform;
end
% Load the images
fixedImg = imread("sol_03333_opgs_edr_ncam_NLB_693387385EDR_F0921230NCAM00259M_.JPG");
leftImg = imread("sol_03333_opgs_edr_ncam_NLB_693387301EDR_F0921230NCAM00259M_.JPG");
% Register the two images
reg = registerMarsImages(leftImg, fixedImg)
figure; imshow(reg.RegisteredImage)function [MOVINGREG] = registerMarsImages(MOVING,FIXED)
% Convert images to grayscale if they are RGB
if size(MOVING, 3) == 3
MOVING = rgb2gray(MOVING);
end
if size(FIXED, 3) == 3
FIXED = rgb2gray(FIXED);
end
% Detect features in both images
points1 = detectSURFFeatures(MOVING, ‘MetricThreshold’, 1000);
points2 = detectSURFFeatures(FIXED, ‘MetricThreshold’, 1000);
% Extract features from both images
[features1, valid_points1] = extractFeatures(MOVING, points1);
[features2, valid_points2] = extractFeatures(FIXED, points2);
% Match features by using their descriptors
indexPairs = matchFeatures(features1, features2, ‘MatchThreshold’, 10, ‘MaxRatio’, 0.7);
% Retrieve locations of corresponding points for each image
matchedPoints1 = valid_points1(indexPairs(:, 1), :);
matchedPoints2 = valid_points2(indexPairs(:, 2), :);
% Estimate the transformation between the moving and fixed images
[tform, inlierIdx] = estimateGeometricTransform2D(matchedPoints1, matchedPoints2, ‘projective’, ‘Confidence’, 99.9, ‘MaxNumTrials’, 2000);
% Get the output limits for the transformation
[xLimitsMoving, yLimitsMoving] = outputLimits(tform, [1 size(MOVING, 2)], [1 size(MOVING, 1)]);
[xLimitsFixed, yLimitsFixed] = outputLimits(projective2d(eye(3)), [1 size(FIXED, 2)], [1 size(FIXED, 1)]);
% Determine the size of the panorama
xMin = min([xLimitsMoving xLimitsFixed]);
xMax = max([xLimitsMoving xLimitsFixed]);
yMin = min([yLimitsMoving yLimitsFixed]);
yMax = max([yLimitsMoving yLimitsFixed]);
width = round(xMax – xMin);
height = round(yMax – yMin);
% Create an empty panorama canvas
panorama = zeros(height, width, ‘like’, FIXED);
% Create reference objects for the panorama and the fixed image
panoramaView = imref2d([height width], [xMin xMax], [yMin yMax]);
fixedRef = imref2d(size(FIXED), [xLimitsFixed(1) xLimitsFixed(2)], [yLimitsFixed(1) yLimitsFixed(2)]);
% Warp the moving image into the panorama
registered = imwarp(MOVING, tform, ‘OutputView’, panoramaView);
% Overlay the fixed image onto the panorama
panorama = imwarp(FIXED, projective2d(eye(3)), ‘OutputView’, panoramaView, ‘FillValues’, 0);
panorama = max(panorama, registered);
% Resize the panorama to fit within 1024×1024
scaleFactor = min(1024 / width, 1024 / height);
panoramaScaled = imresize(panorama, scaleFactor);
% Create a 1024×1024 canvas
finalPanorama = zeros(1024, 1024, ‘like’, FIXED);
% Determine the position to center the scaled stitched image within the canvas
[scaledHeight, scaledWidth] = size(panoramaScaled);
xOffset = max(0, round((1024 – scaledWidth) / 2));
yOffset = max(0, round((1024 – scaledHeight) / 2));
% Place the scaled stitched image onto the 1024×1024 canvas
finalPanorama(yOffset + (1:scaledHeight), xOffset + (1:scaledWidth)) = panoramaScaled;
% Store the registered image
MOVINGREG.RegisteredImage = finalPanorama;
% Store the transformation object
MOVINGREG.Transformation = tform;
end
% Load the images
fixedImg = imread("sol_03333_opgs_edr_ncam_NLB_693387385EDR_F0921230NCAM00259M_.JPG");
leftImg = imread("sol_03333_opgs_edr_ncam_NLB_693387301EDR_F0921230NCAM00259M_.JPG");
% Register the two images
reg = registerMarsImages(leftImg, fixedImg)
figure; imshow(reg.RegisteredImage) function [MOVINGREG] = registerMarsImages(MOVING,FIXED)
% Convert images to grayscale if they are RGB
if size(MOVING, 3) == 3
MOVING = rgb2gray(MOVING);
end
if size(FIXED, 3) == 3
FIXED = rgb2gray(FIXED);
end
% Detect features in both images
points1 = detectSURFFeatures(MOVING, ‘MetricThreshold’, 1000);
points2 = detectSURFFeatures(FIXED, ‘MetricThreshold’, 1000);
% Extract features from both images
[features1, valid_points1] = extractFeatures(MOVING, points1);
[features2, valid_points2] = extractFeatures(FIXED, points2);
% Match features by using their descriptors
indexPairs = matchFeatures(features1, features2, ‘MatchThreshold’, 10, ‘MaxRatio’, 0.7);
% Retrieve locations of corresponding points for each image
matchedPoints1 = valid_points1(indexPairs(:, 1), :);
matchedPoints2 = valid_points2(indexPairs(:, 2), :);
% Estimate the transformation between the moving and fixed images
[tform, inlierIdx] = estimateGeometricTransform2D(matchedPoints1, matchedPoints2, ‘projective’, ‘Confidence’, 99.9, ‘MaxNumTrials’, 2000);
% Get the output limits for the transformation
[xLimitsMoving, yLimitsMoving] = outputLimits(tform, [1 size(MOVING, 2)], [1 size(MOVING, 1)]);
[xLimitsFixed, yLimitsFixed] = outputLimits(projective2d(eye(3)), [1 size(FIXED, 2)], [1 size(FIXED, 1)]);
% Determine the size of the panorama
xMin = min([xLimitsMoving xLimitsFixed]);
xMax = max([xLimitsMoving xLimitsFixed]);
yMin = min([yLimitsMoving yLimitsFixed]);
yMax = max([yLimitsMoving yLimitsFixed]);
width = round(xMax – xMin);
height = round(yMax – yMin);
% Create an empty panorama canvas
panorama = zeros(height, width, ‘like’, FIXED);
% Create reference objects for the panorama and the fixed image
panoramaView = imref2d([height width], [xMin xMax], [yMin yMax]);
fixedRef = imref2d(size(FIXED), [xLimitsFixed(1) xLimitsFixed(2)], [yLimitsFixed(1) yLimitsFixed(2)]);
% Warp the moving image into the panorama
registered = imwarp(MOVING, tform, ‘OutputView’, panoramaView);
% Overlay the fixed image onto the panorama
panorama = imwarp(FIXED, projective2d(eye(3)), ‘OutputView’, panoramaView, ‘FillValues’, 0);
panorama = max(panorama, registered);
% Resize the panorama to fit within 1024×1024
scaleFactor = min(1024 / width, 1024 / height);
panoramaScaled = imresize(panorama, scaleFactor);
% Create a 1024×1024 canvas
finalPanorama = zeros(1024, 1024, ‘like’, FIXED);
% Determine the position to center the scaled stitched image within the canvas
[scaledHeight, scaledWidth] = size(panoramaScaled);
xOffset = max(0, round((1024 – scaledWidth) / 2));
yOffset = max(0, round((1024 – scaledHeight) / 2));
% Place the scaled stitched image onto the 1024×1024 canvas
finalPanorama(yOffset + (1:scaledHeight), xOffset + (1:scaledWidth)) = panoramaScaled;
% Store the registered image
MOVINGREG.RegisteredImage = finalPanorama;
% Store the transformation object
MOVINGREG.Transformation = tform;
end
% Load the images
fixedImg = imread("sol_03333_opgs_edr_ncam_NLB_693387385EDR_F0921230NCAM00259M_.JPG");
leftImg = imread("sol_03333_opgs_edr_ncam_NLB_693387301EDR_F0921230NCAM00259M_.JPG");
% Register the two images
reg = registerMarsImages(leftImg, fixedImg)
figure; imshow(reg.RegisteredImage) matlab code, matlab, output, image stitching, panorama MATLAB Answers — New Questions
I want show population on plot like 36M, 37M….
please help me, I=I need the grow population like 36m, 37, 38,.. on plotplease help me, I=I need the grow population like 36m, 37, 38,.. on plot please help me, I=I need the grow population like 36m, 37, 38,.. on plot matlab MATLAB Answers — New Questions
How to authenticate from C# to SP online?
Hi. I have created a new app registration in Azure and this allows you to generate a secret value.
then when I go over to _layouts/15/appregnew.aspx and try to enter that secret I get the following : Invalid app secret. It must be a valid base64 encoded string of an 32-byte binary.
How to resolve this?
Hi. I have created a new app registration in Azure and this allows you to generate a secret value. then when I go over to _layouts/15/appregnew.aspx and try to enter that secret I get the following : Invalid app secret. It must be a valid base64 encoded string of an 32-byte binary. How to resolve this? Read More
Tech Talks Presents: Protect & Manage Enterprise Data Effectively at Scale | June 20th
Join us on Thursday, June 20th at 8am PT as Mihaela Blandea, Principal Program Manager and Jocelyn Panchal, Product Manager present Protect & Manage Enterprise Data Effectively at Scale.
In the digital era, low code platforms and AI are driving rapid transformation. But the balance between innovation and robust security is a pivotal challenge for organizations. Join this session to uncover the latest capabilities available for Power Platform to maximize security and compliance while minimizing risk and effort to confidently unlock the full potential of AI innovation within your organization
We hope you’ll join us!
Call to Action:
Click on the link to save the calendar invite: https://aka.ms/TechTalksInvite
View past recordings (sign in required): https://aka.ms/TechTalksRecording
Get started with the adoption tools here
Join us on Thursday, June 20th at 8am PT as Mihaela Blandea, Principal Program Manager and Jocelyn Panchal, Product Manager present Protect & Manage Enterprise Data Effectively at Scale.In the digital era, low code platforms and AI are driving rapid transformation. But the balance between innovation and robust security is a pivotal challenge for organizations. Join this session to uncover the latest capabilities available for Power Platform to maximize security and compliance while minimizing risk and effort to confidently unlock the full potential of AI innovation within your organizationWe hope you’ll join us!
Call to Action:
Click on the link to save the calendar invite: https://aka.ms/TechTalksInvite
View past recordings (sign in required): https://aka.ms/TechTalksRecording
Get started with the adoption tools here Read More