Category: News
arduino BLE send/receive simulink problem
Hello,
I am trying to send /receive BLE data from the sensors on an arduino board in simulink using some predifined BLE peripheral blocks. Then I upload the code on the arduino hardware and run it. So far this works with arduino nano iot 33 as all characteristics are visible.
It does not with BLE, BLE sense, and BLE sense rev2 boards. With the latter, the BLE service does not show up, for example in matlab calling blelist.
I tried with an ESP32 board as well. Here characteristics appear, but it depends on how many have been defined in simulink. Some of them are not accesible and some carry the same uuid although they have been given a different characteristic uuid in Simulink. It gives a erratic impression.
I’ve looked around on the forum but can’t find a solution. This seems to be a simulink incompatability issue…?
Is there perhaps a workaround for this problem ?
Thanks for any helpHello,
I am trying to send /receive BLE data from the sensors on an arduino board in simulink using some predifined BLE peripheral blocks. Then I upload the code on the arduino hardware and run it. So far this works with arduino nano iot 33 as all characteristics are visible.
It does not with BLE, BLE sense, and BLE sense rev2 boards. With the latter, the BLE service does not show up, for example in matlab calling blelist.
I tried with an ESP32 board as well. Here characteristics appear, but it depends on how many have been defined in simulink. Some of them are not accesible and some carry the same uuid although they have been given a different characteristic uuid in Simulink. It gives a erratic impression.
I’ve looked around on the forum but can’t find a solution. This seems to be a simulink incompatability issue…?
Is there perhaps a workaround for this problem ?
Thanks for any help Hello,
I am trying to send /receive BLE data from the sensors on an arduino board in simulink using some predifined BLE peripheral blocks. Then I upload the code on the arduino hardware and run it. So far this works with arduino nano iot 33 as all characteristics are visible.
It does not with BLE, BLE sense, and BLE sense rev2 boards. With the latter, the BLE service does not show up, for example in matlab calling blelist.
I tried with an ESP32 board as well. Here characteristics appear, but it depends on how many have been defined in simulink. Some of them are not accesible and some carry the same uuid although they have been given a different characteristic uuid in Simulink. It gives a erratic impression.
I’ve looked around on the forum but can’t find a solution. This seems to be a simulink incompatability issue…?
Is there perhaps a workaround for this problem ?
Thanks for any help simulink, ble, arduino MATLAB Answers — New Questions
Design FDMA using simulink
Hello,
I am working on a FDMA project using Simulink and I am facing technical issues with the following blocks:
– Sine Wave (Discrete Time)
– Product (BPSK × Carrier)
– Bandpass Filter
– AWGN Channel
**Problem:**
1. When using AWGN Channel with mode "Signal to Noise Ratio", I get:
"Input and output must be discrete when mode set to Signal to Noise Ratio".
2. After the Filter, sometimes complex signals appear causing errors in Integrator or Decision blocks.
**Current settings for User 1 example:**
– Sine Wave: Discrete, Sample time = 0.0001 s
– Filter: Bandpass, Filter order = 4, Lower passband = 900 Hz, Upper passband = 1100 Hz
– Stopband 1 = 800 Hz, Stopband 2 = 1200 Hz, Stopband attenuation = 40 dB
– AWGN Channel: Mode = Signal to Noise Ratio
**Goal:**
– Run FDMA for two users (User1 = 1 kHz, User2 = 2 kHz)
– Avoid any complex signals
– Make AWGN Channel work correctly with specified SNR
**Request:**
– How to set up the blocks (Sine Wave, Product, Filter, AWGN) so that no complex signals appear and AWGN works correctly?
– How to choose the correct Sample time and Filter type for each block?
**Attachments:**
– Simulink screenshots
– Simulink file (.slx) if possible
Thank you very much for your help.
<<
<</matlabcentral/answers/uploaded_files/1845240/IMG_20260101_225640_567.jpg>>
>>Hello,
I am working on a FDMA project using Simulink and I am facing technical issues with the following blocks:
– Sine Wave (Discrete Time)
– Product (BPSK × Carrier)
– Bandpass Filter
– AWGN Channel
**Problem:**
1. When using AWGN Channel with mode "Signal to Noise Ratio", I get:
"Input and output must be discrete when mode set to Signal to Noise Ratio".
2. After the Filter, sometimes complex signals appear causing errors in Integrator or Decision blocks.
**Current settings for User 1 example:**
– Sine Wave: Discrete, Sample time = 0.0001 s
– Filter: Bandpass, Filter order = 4, Lower passband = 900 Hz, Upper passband = 1100 Hz
– Stopband 1 = 800 Hz, Stopband 2 = 1200 Hz, Stopband attenuation = 40 dB
– AWGN Channel: Mode = Signal to Noise Ratio
**Goal:**
– Run FDMA for two users (User1 = 1 kHz, User2 = 2 kHz)
– Avoid any complex signals
– Make AWGN Channel work correctly with specified SNR
**Request:**
– How to set up the blocks (Sine Wave, Product, Filter, AWGN) so that no complex signals appear and AWGN works correctly?
– How to choose the correct Sample time and Filter type for each block?
**Attachments:**
– Simulink screenshots
– Simulink file (.slx) if possible
Thank you very much for your help.
<<
<</matlabcentral/answers/uploaded_files/1845240/IMG_20260101_225640_567.jpg>>
>> Hello,
I am working on a FDMA project using Simulink and I am facing technical issues with the following blocks:
– Sine Wave (Discrete Time)
– Product (BPSK × Carrier)
– Bandpass Filter
– AWGN Channel
**Problem:**
1. When using AWGN Channel with mode "Signal to Noise Ratio", I get:
"Input and output must be discrete when mode set to Signal to Noise Ratio".
2. After the Filter, sometimes complex signals appear causing errors in Integrator or Decision blocks.
**Current settings for User 1 example:**
– Sine Wave: Discrete, Sample time = 0.0001 s
– Filter: Bandpass, Filter order = 4, Lower passband = 900 Hz, Upper passband = 1100 Hz
– Stopband 1 = 800 Hz, Stopband 2 = 1200 Hz, Stopband attenuation = 40 dB
– AWGN Channel: Mode = Signal to Noise Ratio
**Goal:**
– Run FDMA for two users (User1 = 1 kHz, User2 = 2 kHz)
– Avoid any complex signals
– Make AWGN Channel work correctly with specified SNR
**Request:**
– How to set up the blocks (Sine Wave, Product, Filter, AWGN) so that no complex signals appear and AWGN works correctly?
– How to choose the correct Sample time and Filter type for each block?
**Attachments:**
– Simulink screenshots
– Simulink file (.slx) if possible
Thank you very much for your help.
<<
<</matlabcentral/answers/uploaded_files/1845240/IMG_20260101_225640_567.jpg>>
>> #fdma#simulink MATLAB Answers — New Questions
Adding a class-related function to appdesigner app
Is there a way, in appdesigner, to create a class-related function, i.e., a function that is local to the app’s classdef file, but which is not a class method?Is there a way, in appdesigner, to create a class-related function, i.e., a function that is local to the app’s classdef file, but which is not a class method? Is there a way, in appdesigner, to create a class-related function, i.e., a function that is local to the app’s classdef file, but which is not a class method? appdesigner, classdef, class-related, app MATLAB Answers — New Questions
January 2026 Update for Office 365 for IT Pros
Happy New Year to Office 365 for IT Pros Readers

Starting off the new year with a bang, the Office 365 for IT Pros eBook team is delighted to announce the availability of the January 2026 update for Office 365 for IT Pros (2026 edition). This is monthly update #127. An update (#19.1) has already been issued for the Automating Microsoft 365 with PowerShell eBook, which is available both separately and as part of the Office 365 for IT Pros eBook bundle.
Current subscribers can download the updated PDF and EPUB files through their Gumroad.com account or using the link in the receipt emailed after purchase. The link always accesses the latest book files. Further details of how to access book updates are available in our FAQ. Details of the changes in update #127 are in our change log.
Keeping the Book Relevant
We’re now halfway through the 2026 edition and thoughts turn to the shape of the next edition. As long-term readers know, we have evolved the book contents continuously over the years to reflect the current shape of first Office 365 and now Microsoft 365. At the start, we spent a lot of time on migration and synchronization because those were major needs at the time. Even though Microsoft has recently decided to enter the tenant-to-tenant space, migration isn’t as important as it once was, which is why it’s not a topic we cover now.
Along the same lines, the introduction of Teams in 2017 and the growing importance of Power Platform (now evolving towards agents and agentic processing) meant that these topics joined the fundamentals of Entra ID, Exchange Online, and SharePoint Online. We’ve also covered the evolution of video processing from the first Office 365 Video system to Stream to Clipchamp and tracked the changes in compliance technology from workload-dependent eDiscovery and retention processing to Microsoft Purview solutions. Finally, we took most of the PowerShell content from the book to form a separate PowerShell book focused mostly on how to work with the Microsoft Graph. That book now offers four times as much PowerShell content as we could fit into the main book.
All in all, it’s been a compelling and worthwhile challenge to keep the book relevant to the needs of tenant administrators. The trick is to continue this for the future.
What We Don’t Do
Before discussing what we might do with the book in the future, it’s important to set out some ground rules. Readers might have noticed that we do not cover some parts of Microsoft 365 and ask why this is the case. Well, our focus has always been on covering the basics because if administrators master the details of Entra ID, Exchange Online, SharePoint Online, and Teams, there’s a fair chance that their tenants will be secure and robust. Add in the basics of Purview compliance in retention, data loss prevention, information protection, and eDiscovery, and the tenant is highly functional.
We purposefully do not go near the Viva Suite. Since its introduction, Microsoft has killed two of the original Viva solutions (Viva Goals and Viva Topics) and it doesn’t seem to make much sense to devote much attention to solutions that are of minor interest to the overall Microsoft 365 community. The same is true for Purview extensions covering Microsoft Fabric: invaluable technology for those who need it but uninteresting to the wider community.
Covering Copilot
But things are changing. Artificial Intelligence has become part of everyday life. We all know the focus Microsoft has on the introduction of Copilot functionality across as many parts of Microsoft 365 as they can reach. So far, we have covered Microsoft 365 Copilot and agent technology at a level that we think is appropriate. The danger of devoting large swathes of the book to Copilot is that the content is interesting only if a tenant has Microsoft 365 Copilot licenses. The evidence to date is that those with licenses are not a high percentage of the Microsoft 365 user base.
One option is to continue on the current path. Another option is to create a chapter to bring together all aspects of AI for Microsoft 365. A third is to create a separate eBook covering AI and Power Platform like we did for PowerShell. We don’t have a good answer right now and will wait to see how the vision for Agent 365 and other components presented by Microsoft at the recent Ignite conference develop in reality.
On to Update #128
Planning for the next release will continue over the next few months alongside the monthly updates for the 2026 edition. There’s no rest as the flood of updates for Microsoft 365 ecosystem continues to flow.
fitlm returns pvalues equal to NaN without zscoring
I can not understand which is the reason why the fitlm using variables without zscoring returns pvalues equal to NaN, whereas this does not happen using zscored variables. Below you can find the code I used:
medians_var1_scored = nanzscore(medians_var1);
medians_var2_scored = nanzscore(medians_var2);
medians_var1_scored_tr = medians_var1_scored’;
medians_var2_scored_tr = medians_var2_scored’;
tbl=table(medians_var1_scored_tr,medians_var2_scored_tr,’VariableNames’, …
{‘var1′,’var2’});
%build your model
mdl=fitlm(tbl,’var1 ~ var2′,’RobustOpts’,’on’)
which gives this result:
mdl =
Linear regression model (robust fit):
var1 ~ 1 + var2
Estimated Coefficients:
Estimate SE tStat pValue
_________ ________ ________ _______
(Intercept) 0.028674 0.094595 0.30312 0.76234
var2 -0.072919 0.094998 -0.76758 0.44429
Number of observations: 118, Error degrees of freedom: 116
Root Mean Squared Error: 1.03
R-squared: 0.00584, Adjusted R-Squared: -0.00273
F-statistic vs. constant model: 0.681, p-value = 0.411
If instead I use the original variables, I do:
tbl=table(medians_var1′,medians_var2′,’VariableNames’, …
{‘var1′,’var2’});
%build your model
mdl=fitlm(tbl,’var1 ~ var2′,’RobustOpts’,’on’)
and obtain:
mdl =
Linear regression model (robust fit):
var1 ~ 1 + var2
Estimated Coefficients:
Estimate SE tStat pValue
__________ __________ ______ __________
(Intercept) 0 0 NaN NaN
var2 8.6386e-13 2.1087e-14 40.966 7.8796e-71
Number of observations: 118, Error degrees of freedom: 117
Root Mean Squared Error: 31.4
R-squared: 0.263, Adjusted R-Squared: 0.263
F-statistic vs. constant model: Inf, p-value = NaN
I can’t understand why this happens. You can find attached both the original var1 and var2 variables and the zscored ones. But If I plot both of them, I obtain the same plot (just rescaled). Hence, there shouldn’t be a problem in the nanzscore function which is "hand written".I can not understand which is the reason why the fitlm using variables without zscoring returns pvalues equal to NaN, whereas this does not happen using zscored variables. Below you can find the code I used:
medians_var1_scored = nanzscore(medians_var1);
medians_var2_scored = nanzscore(medians_var2);
medians_var1_scored_tr = medians_var1_scored’;
medians_var2_scored_tr = medians_var2_scored’;
tbl=table(medians_var1_scored_tr,medians_var2_scored_tr,’VariableNames’, …
{‘var1′,’var2’});
%build your model
mdl=fitlm(tbl,’var1 ~ var2′,’RobustOpts’,’on’)
which gives this result:
mdl =
Linear regression model (robust fit):
var1 ~ 1 + var2
Estimated Coefficients:
Estimate SE tStat pValue
_________ ________ ________ _______
(Intercept) 0.028674 0.094595 0.30312 0.76234
var2 -0.072919 0.094998 -0.76758 0.44429
Number of observations: 118, Error degrees of freedom: 116
Root Mean Squared Error: 1.03
R-squared: 0.00584, Adjusted R-Squared: -0.00273
F-statistic vs. constant model: 0.681, p-value = 0.411
If instead I use the original variables, I do:
tbl=table(medians_var1′,medians_var2′,’VariableNames’, …
{‘var1′,’var2’});
%build your model
mdl=fitlm(tbl,’var1 ~ var2′,’RobustOpts’,’on’)
and obtain:
mdl =
Linear regression model (robust fit):
var1 ~ 1 + var2
Estimated Coefficients:
Estimate SE tStat pValue
__________ __________ ______ __________
(Intercept) 0 0 NaN NaN
var2 8.6386e-13 2.1087e-14 40.966 7.8796e-71
Number of observations: 118, Error degrees of freedom: 117
Root Mean Squared Error: 31.4
R-squared: 0.263, Adjusted R-Squared: 0.263
F-statistic vs. constant model: Inf, p-value = NaN
I can’t understand why this happens. You can find attached both the original var1 and var2 variables and the zscored ones. But If I plot both of them, I obtain the same plot (just rescaled). Hence, there shouldn’t be a problem in the nanzscore function which is "hand written". I can not understand which is the reason why the fitlm using variables without zscoring returns pvalues equal to NaN, whereas this does not happen using zscored variables. Below you can find the code I used:
medians_var1_scored = nanzscore(medians_var1);
medians_var2_scored = nanzscore(medians_var2);
medians_var1_scored_tr = medians_var1_scored’;
medians_var2_scored_tr = medians_var2_scored’;
tbl=table(medians_var1_scored_tr,medians_var2_scored_tr,’VariableNames’, …
{‘var1′,’var2’});
%build your model
mdl=fitlm(tbl,’var1 ~ var2′,’RobustOpts’,’on’)
which gives this result:
mdl =
Linear regression model (robust fit):
var1 ~ 1 + var2
Estimated Coefficients:
Estimate SE tStat pValue
_________ ________ ________ _______
(Intercept) 0.028674 0.094595 0.30312 0.76234
var2 -0.072919 0.094998 -0.76758 0.44429
Number of observations: 118, Error degrees of freedom: 116
Root Mean Squared Error: 1.03
R-squared: 0.00584, Adjusted R-Squared: -0.00273
F-statistic vs. constant model: 0.681, p-value = 0.411
If instead I use the original variables, I do:
tbl=table(medians_var1′,medians_var2′,’VariableNames’, …
{‘var1′,’var2’});
%build your model
mdl=fitlm(tbl,’var1 ~ var2′,’RobustOpts’,’on’)
and obtain:
mdl =
Linear regression model (robust fit):
var1 ~ 1 + var2
Estimated Coefficients:
Estimate SE tStat pValue
__________ __________ ______ __________
(Intercept) 0 0 NaN NaN
var2 8.6386e-13 2.1087e-14 40.966 7.8796e-71
Number of observations: 118, Error degrees of freedom: 117
Root Mean Squared Error: 31.4
R-squared: 0.263, Adjusted R-Squared: 0.263
F-statistic vs. constant model: Inf, p-value = NaN
I can’t understand why this happens. You can find attached both the original var1 and var2 variables and the zscored ones. But If I plot both of them, I obtain the same plot (just rescaled). Hence, there shouldn’t be a problem in the nanzscore function which is "hand written". fitlm, zscore, pvalue MATLAB Answers — New Questions
Does split screen work in R2025b?
In MATLAB R2025b, in the Editor, I can’t get the split screen option to work at all. In R2024b and R2025a I can right-click on my code, select Split Screen | Top/Bottom, and the screen is split. Alternatively, I can select VIEW | Split Document | Top/Bottom, and I get the same thing. In R2025b these methods don’t seem to do anything for me. It’s not split and there are no error messages. However, if I open the Design App and go to the Code View, the split screen works ok.
Are there any settings that would affect this? Does anyone else have this issue?In MATLAB R2025b, in the Editor, I can’t get the split screen option to work at all. In R2024b and R2025a I can right-click on my code, select Split Screen | Top/Bottom, and the screen is split. Alternatively, I can select VIEW | Split Document | Top/Bottom, and I get the same thing. In R2025b these methods don’t seem to do anything for me. It’s not split and there are no error messages. However, if I open the Design App and go to the Code View, the split screen works ok.
Are there any settings that would affect this? Does anyone else have this issue? In MATLAB R2025b, in the Editor, I can’t get the split screen option to work at all. In R2024b and R2025a I can right-click on my code, select Split Screen | Top/Bottom, and the screen is split. Alternatively, I can select VIEW | Split Document | Top/Bottom, and I get the same thing. In R2025b these methods don’t seem to do anything for me. It’s not split and there are no error messages. However, if I open the Design App and go to the Code View, the split screen works ok.
Are there any settings that would affect this? Does anyone else have this issue? split screen, r2025b MATLAB Answers — New Questions
Effect Size in fitglme
Hey, I am using a model which I have estimated with fitglme. I want to report effect sizes and confidence intervals. Would the best way be to report OR terms and their respective intervals?
I am calculating them the following way:
[beta,~,stats] = fixedEffects(glme_best);
CI = coefCI(glme_best);
names = glme_best.CoefficientNames(:);
OR = exp(beta);
CI_OR = exp(CI);
Is that correct or is there a better way to directly get OR terms in Matlab?
Best!Hey, I am using a model which I have estimated with fitglme. I want to report effect sizes and confidence intervals. Would the best way be to report OR terms and their respective intervals?
I am calculating them the following way:
[beta,~,stats] = fixedEffects(glme_best);
CI = coefCI(glme_best);
names = glme_best.CoefficientNames(:);
OR = exp(beta);
CI_OR = exp(CI);
Is that correct or is there a better way to directly get OR terms in Matlab?
Best! Hey, I am using a model which I have estimated with fitglme. I want to report effect sizes and confidence intervals. Would the best way be to report OR terms and their respective intervals?
I am calculating them the following way:
[beta,~,stats] = fixedEffects(glme_best);
CI = coefCI(glme_best);
names = glme_best.CoefficientNames(:);
OR = exp(beta);
CI_OR = exp(CI);
Is that correct or is there a better way to directly get OR terms in Matlab?
Best! fitglme, oddsratio MATLAB Answers — New Questions
FontSize different for numbers and strings in table object of mlreportgen.ppt.Table class
I have a standard MATLAB table with numeric and string values in different columns to integrate into pptx file
I create table object of mlreportgen.ppt.Table, set FontSize to 8 on the table and add it to the slide like this:
vt_table_obj = mlreportgen.ppt.Table(vt_table);
vt_table_obj.FontSize = ‘8pt’;
add(vt_slide, vt_table_obj);
But in presentation size 8 is applied only to text values, while numeric have size 10:
Why it doesn’t apply to the numbers?Or it need to be set further in children entities – TableRow, TableEntry, Paragpaph, Text – levels?I have a standard MATLAB table with numeric and string values in different columns to integrate into pptx file
I create table object of mlreportgen.ppt.Table, set FontSize to 8 on the table and add it to the slide like this:
vt_table_obj = mlreportgen.ppt.Table(vt_table);
vt_table_obj.FontSize = ‘8pt’;
add(vt_slide, vt_table_obj);
But in presentation size 8 is applied only to text values, while numeric have size 10:
Why it doesn’t apply to the numbers?Or it need to be set further in children entities – TableRow, TableEntry, Paragpaph, Text – levels? I have a standard MATLAB table with numeric and string values in different columns to integrate into pptx file
I create table object of mlreportgen.ppt.Table, set FontSize to 8 on the table and add it to the slide like this:
vt_table_obj = mlreportgen.ppt.Table(vt_table);
vt_table_obj.FontSize = ‘8pt’;
add(vt_slide, vt_table_obj);
But in presentation size 8 is applied only to text values, while numeric have size 10:
Why it doesn’t apply to the numbers?Or it need to be set further in children entities – TableRow, TableEntry, Paragpaph, Text – levels? table, mlreportgen, ppt MATLAB Answers — New Questions
Training People to Use Microsoft 365 Copilot Effectively
Making Sure People Know How to Use Copilot
I don’t usually seek technology advice from taxation authorities, but a recent LinkedIn post explaining how the UK Revenue and Customs authority (HMRC) prepares people to use Microsoft 365 Copilot seems to take a sensible approach. The course uses a mixture of short video and reading over four modules to explain:
- An introduction to AI and Microsoft 365 Copilot (30 minutes).
- How to access Microsoft 365 Copilot (20 minutes).
- Writing effective prompts (15 minutes).
- Security and AI-generated hallucinations (15 minutes).
HMRC has 50,000 Microsoft 365 Copilot licenses, so they’ve made quite an investment ($18 million annually list price). Being good with figures, I’m sure that HMRC is keen on realizing a return on their investment, and that means making sure that people can use Copilot effectively to achieve measurable business outcomes. I’m sure that they’re measuring how people use Copilot to identify where people need some extra help and possibly to free up licenses for reassignment to other employees.
The Rapid Change of Copilot
One challenge for Copilot training is that Microsoft changes the Microsoft 365 Copilot chat app (BizChat) and the Copilot integrations with the Office apps so quickly. For example, here are four recent examples of changes to Copilot announced by Microsoft:
MC1193695 (10 December 2025): Introduction of natural language commands to allow Outlook users to triage busy inboxes. The supported options include pin/unpin messages, flag items, mark tasks as complete, and mark messages as read or unread.
MC1192003 (4 December 2025, Microsoft 365 roadmap item 532736): A model selector switch is available to allow users to select how much reasoning to apply when answering prompts. The options are automatic, quick response, and think deeper. Obviously, users need some guidance about when to go for quick responses and when it’s better to have Copilot reason a little deeper.
MC1187799 (last updated 26 November 2025). Tenants that enable the Anthrophic models (soon to be the norm) see new agents in Word, Excel, and PowerPoint to help working with content in these files. These are “frontier” options for now, but they will be core functionality in due course.
MC1189911 (25 November 2025): Users can schedule prompts to run automatically. Prompts created in BizChat and in agents like Analyst and Idea Coach can be scheduled to run automatically (Figure 1).

MC1197144 (15 December 2025): The inclusion of natural language calendar search in Microsoft 365 Copilot. The results include who attended a meeting and what was shared during an event.
Other topics, such as using BizChat to reason over the contents of a shared or delegate mailbox are of interest to people who need to interact with these types of mailboxes.
What’s obvious from the type and quantity of change is that follow up training is required to supplement a solid initial foundation. The training could be provided as short videos accessed through a SharePoint Online site or a Teams channel.
We’ve Been Here Before
The volume of change seen in Microsoft 365 Copilot (or indeed, across the agentic landscape within Microsoft 365) is reminiscent of Teams in the 2019-2023 period. At the time, Teams seemed to be adding new features or adjusting the user interface weekly, especially when the Covid-19 pandemic took hold and people had to work from home. The resulting spike in demand in Teams usage drove improvements in scalability alongside planned work on features like private and shared channels. It was an exciting time to work with Teams.
Teams is a pillar Microsoft 365 application, but Microsoft gives Teams precious little oxygen in terms of publicity in recent analyst briefings or large events. Microsoft last updated the number for Teams monthly active users (320 million) in October 2023. I can’t recall seeing much about Teams at the recent Ignite conference. The agenda was dominated by Copilot and agents to align with Microsoft marketing imperatives. Perhaps Copilot and agents will reach an equivalent state of banalness by 2029, or whenever Microsoft launches its next great campaign.
Training is Core to Success
In any case, the point is that good user training is an essential success factor for the deployment of any software application. This was true for Teams and it’s true for Microsoft 365 Copilot. Throwing someone a Copilot license and advising them to “get on with it” isn’t likely to succeed. That is, unless that person is an avid student that keeps themselves updated over time. There are few users in that category.
Keep up with the changing world of the Microsoft 365 ecosystem by subscribing to the Office 365 for IT Pros eBook. Monthly updates mean that our subscribers learn about new developments as they happen.
How do I uninstall the Network License Manager?
How do I uninstall the Network License Manager?How do I uninstall the Network License Manager? How do I uninstall the Network License Manager? MATLAB Answers — New Questions
How do I declare a multiline array?
Hello, I have a following problem:
I have to declare an array that is very long and splits into multiple lines. How can I divide it, so that Matlab knows it’s one array? Are there any separators I can use at the end of the line?
if true
y = [180 183 188 191 195 199 201 195 207 210 212 216 220 221 224
221 225 229 234 237 239 242 242 244 245 244 246 245 246 247 249
251 252 257 260 263 268 271 272 275 277 279 283 286 291 296 302
306 311 316]
endHello, I have a following problem:
I have to declare an array that is very long and splits into multiple lines. How can I divide it, so that Matlab knows it’s one array? Are there any separators I can use at the end of the line?
if true
y = [180 183 188 191 195 199 201 195 207 210 212 216 220 221 224
221 225 229 234 237 239 242 242 244 245 244 246 245 246 247 249
251 252 257 260 263 268 271 272 275 277 279 283 286 291 296 302
306 311 316]
end Hello, I have a following problem:
I have to declare an array that is very long and splits into multiple lines. How can I divide it, so that Matlab knows it’s one array? Are there any separators I can use at the end of the line?
if true
y = [180 183 188 191 195 199 201 195 207 210 212 216 220 221 224
221 225 229 234 237 239 242 242 244 245 244 246 245 246 247 249
251 252 257 260 263 268 271 272 275 277 279 283 286 291 296 302
306 311 316]
end multiline, array, split, separator MATLAB Answers — New Questions
How do I download a specific update level of MATLAB into a Docker container?
I’m trying to create a Docker container that has MATLAB installed in it. The images on Docker Hub seem to only download MATLAB at the latest update level. How can I put, for example, R2022b Update 3 into a container?I’m trying to create a Docker container that has MATLAB installed in it. The images on Docker Hub seem to only download MATLAB at the latest update level. How can I put, for example, R2022b Update 3 into a container? I’m trying to create a Docker container that has MATLAB installed in it. The images on Docker Hub seem to only download MATLAB at the latest update level. How can I put, for example, R2022b Update 3 into a container? MATLAB Answers — New Questions
The Exchange EnforcedTimestamps Mailbox Property
A Mailbox Property to Track Compliance
While playing with the new PowerShell capability to exclude mailboxes from retention holds, I came upon the EnforcedTimestamps mailbox property, which stores a JSON array of information about timestamps and events. For example:
Get-Mailbox -Identity Marty.King | Select-Object -ExpandProperty EnforcedTimestamps
[{"EventTimestamp":"2025-11-19T05:35:11.7811664Z","EnforcedUntilTimestamp":"2025-11-19T05:30:11.7811664Z","EventType":26},{"EventTimestamp":"2025-09-15T15:32:33.1507615Z","EnforcedUntilTimestamp":"2025-09-15T15:27:33.1507615Z","EventType":26}]
EnforcedTimestamps is not a property that I knew of, so it deserved some investigation. The starting point proved fruitless because Google search doesn’t reveal anything interesting about the topic. However, Microsoft 365 Copilot said:
“The EnforcedTimestamps property in Exchange Online mailboxes uses internal event types to record when compliance-related actions were enforced. These event types are not the same as message tracking log events—they’re specific to retention and hold enforcement.”
I asked Copilot where it found the information, and it replied:
“These mappings come from internal schema references and observed behavior in production tenants, combined with official descriptions of each compliance feature.”
Managed Folder Assistant Processing
After closer examination, it seems like the Managed Folder Assistant adds event and timestamps to mailboxes to help it keep track of the many different kinds of retention, litigation, and eDiscovery holds plus retention labels and Exchange compliance tags that it meets when it performs retention processing for mailboxes. The Managed Folder Assistant operates on a schedule that means each mailbox in the tenant should be processed at least once weekly. During processing, the assistant figures out what mailbox items should be kept and which items can be removed. It does so by resolving all the various holds that exist for the mailbox to ensure that no item is removed if it comes within the scope of a hold. As you’d expect, the assistant retains items based on the longest hold period.
The timestamps written into the mailbox for events helps the Managed Folder Assistant track when retention events happen and for how long the assistant should enforce the effect of the event, if necessary. For instance, if a hold is released from a mailbox, a delay hold stops items being deleted for 30 days to make sure that information isn’t immediately deleted and that administrators can recover if a hold is released in error.
Compliance Events
Without any formal Microsoft documentation, it’s hard to be precise about what each event means and how the timestamps are used by the Managed Folder Assistant. According to Copilot, the following events are recorded:
| Event | Event meaning |
| 1 | Retention hold applied to pause retention processing |
| 2 | Retention hold removed to allow normal retention processing to resume |
| 3 | Litigation hold enforced on mailbox |
| 4 | Litigation hold lifted from mailbox |
| 5 | Delay hold applied (grace period before items are removed) |
| 6 | Delay hold removed |
| 7 | Microsoft 365 retention policy applied to mailbox |
| 8 | Microsoft 365 retention policy removed from mailbox |
| 9 | Retention tag (label) applied to mailbox item |
| 10 | Retention tag (label) removed from mailbox item(s) |
| 11 | Calendar logging disabled |
| 12 | Calendar logging enabled |
| 13 | Mailbox audit enabled |
| 14 | Mailbox audit disabled |
| 15 | Single item recovery disabled |
| 16 | Single item recovery enabled |
| 17 | eDiscovery hold applied to mailbox |
| 18 | eDiscovery hold removed from mailbox |
| 26 | Legacy eDiscovery hold removed from mailbox |
I can’t testify to the accuracy of this information. Even after performing several actions on a mailbox, such as setting litigation hold on and off, or disabling single item recovery, nothing changed in the property. It might be that the Managed Folder Assistant must process the mailbox before the event information is updated. I tried that too by running the Start-ManagedFolderAssistant cmdlet, but nothing happened. Perhaps a specific parameter is required.
In any case, I wrote a script to report the EnforcedTimeStamps information for user mailboxes. You can download the script from GitHub. Figure 1 shows the output. One piece of information I found is that Exchange Online has recorded this information since at least May 2020, so obviously I haven’t been too observant (or curious) in the interim period.

An Exchange Online Secret
It’s always interesting (if a touch frustrating at times) to try and track down undocumented corners of Microsoft 365. I’m sure Microsoft will say that tenants don’t need to understand the function of the EnforceTimeStamps property and they’re probably right. But if that’s the case, why don’t they hide the information deep in the non-IPM part of the mailbox where lots of other internal information is stuffed away?
Learn how to exploit the data available to Microsoft 365 tenant administrators through the Office 365 for IT Pros eBook. We love figuring out how things work.
Appdesigner specific file edition issue
After opening a specific .mlapp, each time I go back to the file tab inside appdesigner, I receive an dialog window : "The file has been modified outside of MATLAB Editor. Do you want to reload it?"
I have this problem only with one specific mlapp file. I have other mlapp files in the same directory for which this issue does not appear.
All these mlapp files are saved locally. They were created from guide apps, using Matlab migration tool.
This issue appears since the mlapp file creation with all the different Matlab releases I used since (R2025a on Linux now).After opening a specific .mlapp, each time I go back to the file tab inside appdesigner, I receive an dialog window : "The file has been modified outside of MATLAB Editor. Do you want to reload it?"
I have this problem only with one specific mlapp file. I have other mlapp files in the same directory for which this issue does not appear.
All these mlapp files are saved locally. They were created from guide apps, using Matlab migration tool.
This issue appears since the mlapp file creation with all the different Matlab releases I used since (R2025a on Linux now). After opening a specific .mlapp, each time I go back to the file tab inside appdesigner, I receive an dialog window : "The file has been modified outside of MATLAB Editor. Do you want to reload it?"
I have this problem only with one specific mlapp file. I have other mlapp files in the same directory for which this issue does not appear.
All these mlapp files are saved locally. They were created from guide apps, using Matlab migration tool.
This issue appears since the mlapp file creation with all the different Matlab releases I used since (R2025a on Linux now). appdesigner MATLAB Answers — New Questions
What are the “CA” and “CB” ports in the “Hybrid Stepper Motor” block for the Specialized Power Systems in Simscape R2024b?
I am trying to set up a 4-phase "Hybrid Stepper Motor". When I use a two-phase motor, I am able to connect it according to the documentation. However, when I try to use the four-phase variant, I see two additional ports "CA" and "CB" appear. However, I cannot find references on these ports or how to connect them in the "Stepper Motor" documentation. What is the physical interpretation of these ports?I am trying to set up a 4-phase "Hybrid Stepper Motor". When I use a two-phase motor, I am able to connect it according to the documentation. However, when I try to use the four-phase variant, I see two additional ports "CA" and "CB" appear. However, I cannot find references on these ports or how to connect them in the "Stepper Motor" documentation. What is the physical interpretation of these ports? I am trying to set up a 4-phase "Hybrid Stepper Motor". When I use a two-phase motor, I am able to connect it according to the documentation. However, when I try to use the four-phase variant, I see two additional ports "CA" and "CB" appear. However, I cannot find references on these ports or how to connect them in the "Stepper Motor" documentation. What is the physical interpretation of these ports? phasewinding, specializedpowersystems, simscapeelectrical, steppermotor MATLAB Answers — New Questions
How do I turn this Simulink model with Gain Control to Pole Placement?
Hi All
I have already calculated the gains for acceleration and velocity but my block is state space and gives displacement and velocity. I just dont know , what should I do with displacement, or should I leave disp and vel and only control acceleration with one gain or acc and vel ?? I have added 2 Zero pole blocks, which defined the new gains. but then It seems like State Space is not coincident with this methodHi All
I have already calculated the gains for acceleration and velocity but my block is state space and gives displacement and velocity. I just dont know , what should I do with displacement, or should I leave disp and vel and only control acceleration with one gain or acc and vel ?? I have added 2 Zero pole blocks, which defined the new gains. but then It seems like State Space is not coincident with this method Hi All
I have already calculated the gains for acceleration and velocity but my block is state space and gives displacement and velocity. I just dont know , what should I do with displacement, or should I leave disp and vel and only control acceleration with one gain or acc and vel ?? I have added 2 Zero pole blocks, which defined the new gains. but then It seems like State Space is not coincident with this method simulink, control MATLAB Answers — New Questions
How to read Audio File into Vector?
Hello, I have to read a Audio File (.wav) into a vector.
I know how to plot it:
info = audioinfo(‘sound.wav’);
[y, Fs] = audioread(‘sound.wav’);
t = 0:1/Fs:info.Duration;
t = t(1:end-1);
plot(t,y);
xlabel(‘Time’);
ylabel(‘Audio Signal’);
But this Sript does not read the Audio into a Vector.
I also tried to read every single Sample, but this is to complex and I get error after error. Is there a simple way to do this?Hello, I have to read a Audio File (.wav) into a vector.
I know how to plot it:
info = audioinfo(‘sound.wav’);
[y, Fs] = audioread(‘sound.wav’);
t = 0:1/Fs:info.Duration;
t = t(1:end-1);
plot(t,y);
xlabel(‘Time’);
ylabel(‘Audio Signal’);
But this Sript does not read the Audio into a Vector.
I also tried to read every single Sample, but this is to complex and I get error after error. Is there a simple way to do this? Hello, I have to read a Audio File (.wav) into a vector.
I know how to plot it:
info = audioinfo(‘sound.wav’);
[y, Fs] = audioread(‘sound.wav’);
t = 0:1/Fs:info.Duration;
t = t(1:end-1);
plot(t,y);
xlabel(‘Time’);
ylabel(‘Audio Signal’);
But this Sript does not read the Audio into a Vector.
I also tried to read every single Sample, but this is to complex and I get error after error. Is there a simple way to do this? vector, audio, sound MATLAB Answers — New Questions
Building Toolbox in cI with matlab runtime
Hello experts
I am trying to automate my toolbox creation in gitlab ci and trying to find the best way to do this.
I looked at using the matlab runtime docker for my purpose, looking at the documentation it says matlab runtime docker is used for executing matlab apps, can i also use it to build the toolbox?
Do i need to use the matlab docker with license to build the toolbox?
Is there a lighter matlab installation that serves the purpose?
Any guidance will be appreciated.
ThanksHello experts
I am trying to automate my toolbox creation in gitlab ci and trying to find the best way to do this.
I looked at using the matlab runtime docker for my purpose, looking at the documentation it says matlab runtime docker is used for executing matlab apps, can i also use it to build the toolbox?
Do i need to use the matlab docker with license to build the toolbox?
Is there a lighter matlab installation that serves the purpose?
Any guidance will be appreciated.
Thanks Hello experts
I am trying to automate my toolbox creation in gitlab ci and trying to find the best way to do this.
I looked at using the matlab runtime docker for my purpose, looking at the documentation it says matlab runtime docker is used for executing matlab apps, can i also use it to build the toolbox?
Do i need to use the matlab docker with license to build the toolbox?
Is there a lighter matlab installation that serves the purpose?
Any guidance will be appreciated.
Thanks toolbox, cli MATLAB Answers — New Questions
How to Report DLP Alerts
Use the Graph API to Report Information about DLP Alerts
MC1169572 (10 October 2025, Microsoft 365 roadmap item 511795) announced a new ability for administrators to add classifications to DLP alerts. The update should now be available in all tenants.
DLP signals alerts when policy rules detect a violation. The update allows administrators to note if the alert is a false positive, true positive, or benign positive (one that you don’t need to worry about) when reviewing the status of alerts (Figure 1). Although I could update the classifier for DLP alerts, any attempt to update the comments for an alert through the UX failed.

Alerts generated for DLP events are synchronized bi-directionally with Defender.
Tenant don’t have to classify events, but MC1169572 says that tenants can “use the classification property to enhance reporting and incident response.” Which then creates the question of how to report DLP alerts.
The Graph Alert Resource Type
The answer is that alert data is available through the alert resource type from the Graph Security API. For example, this Graph request against the alerts_v2 endpoint filters on the serviceSource property to find the set of DLP alerts. We can see the classification entered for the alert.
$Uri = "https://graph.microsoft.com/v1.0/security/alerts_v2?`$filter=serviceSource eq 'DataLossPrevention'&`$orderby=createdDateTime desc&`$top=200" [array]$Alerts = Invoke-MgGraphRequest -Method GET -Uri $Uri -OutputType PSObject $Alerts = $Alerts.Value $Alerts | Format-Table ServiceSource, CreatedDateTime, Title, Classification serviceSource createdDateTime title classification ------------- --------------- ----- -------------- dataLossPrevention 11/12/2025 14:41:47 DLP-Block Confidential Documents truePositive dataLossPrevention 20/11/2025 01:33:40 DLP-DLP Policy for Sensitive Data 1 dataLossPrevention 20/11/2025 01:27:41 DLP-DLP Policy for Sensitive Data 1 dataLossPrevention 20/11/2025 01:26:09 DLP-DLP Policy for Sensitive Data 1
The Alerts resource caters for alerts generated by many other solutions, including Defender for Identity, Defender for Cloud Apps, Defender for Office 365, App governance, threat intelligence, and so on.
Working with DLP Alerts via the Microsoft Graph PowerShell SDK
Graph API requests can also be made through Microsoft Graph PowerShell SDK cmdlets. In this case, the Get-MgSecurityAlertV2 cmdlet (from the Microsoft.Graph.Security module) does the same job as the request discussed above.
Before attempting to work with security alerts, make sure that the signed in account is a security administrator and that the delegated SecurityAlert.Read.All permission (scope) is available:
[array]$DLPAlerts = Get-MgSecurityAlertV2 -Filter "serviceSource eq 'dataLossPrevention'" -PageSize 500 -All -Sort "CreatedDateTime Desc" $DLPAlerts | Format-Table ServiceSource, CreatedDateTime, Title, Classification ServiceSource CreatedDateTime Title Classification ------------- --------------- ----- -------------- dataLossPrevention 11/12/2025 14:41:47 DLP-Block Confidential Documents truePositive dataLossPrevention 20/11/2025 01:33:40 DLP-DLP Policy for Sensitive Data 1 dataLossPrevention 20/11/2025 01:27:41 DLP-DLP Policy for Sensitive Data 1 dataLossPrevention 20/11/2025 01:26:09 DLP-DLP Policy for Sensitive Data 1
Note: after updating an alert with a classification, it takes a few seconds before the update appears in the alert record available through the Graph.
Updating a DLP Alert with PowerShell
It’s also possible to set a classification for an alert with the Update-MgSecurityAlertV2 cmdlet. In this example, a hash table holds several properties as input to update an alert, including the classification.
$AlertId = $DLPAlerts[1].Id
$Parameters = @{}
$Parameters.Add("determination", "other")
$Parameters.Add("status", "inProgress")
$Parameters.Add("assignedTo", "Hans.Geering@office365itpros.com")
$Parameters.Add("classification", "truePositive")
Update-MgSecurityAlertV2 -AlertId $AlertId -BodyParameter $Parameters
Reporting DLP Alerts
Once we know how to retrieve DLP alerts, it’s easy to create a basic report. Figure 2 shows the result:
$Report = [System.Collections.Generic.List[Object]]::new()
ForEach ($Alert in $DLPAlerts) {
If ($Alert.LastUpdateDateTime) { $LastUpdated = Get-Date $Alert.LastUpdateDateTime -Format 'dd-MMM-yyyy HH:mm'
} Else {
$LastUpdated = "N/A"
}
$ReportLine = [PSCustomObject][Ordered]@{
Id = $Alert.id
Title = $Alert.title
CreatedDateTime = Get-Date $Alert.createdDateTime -Format 'dd-MMM-yyyy HH:mm'
Severity = $Alert.severity
Status = $Alert.status
Category = $Alert.category
AssignedTo = $Alert.AssignedTo
LastUpdateDateTime = $LastUpdated
Classification = $Alert.classification
}
$Report.Add($ReportLine)
}

I hate seeing something in a message center notification that I can’t quite figure out how to do. I’ve never really thought about working with DLP alerts through PowerShell in the past, but I’m glad that the addition of administrator-controlled classifications to DLP alerts prompted me to check out how to report this information.
Need help to write and manage PowerShell scripts for Microsoft 365, including Azure Automation runbooks? Get a copy of the Automating Microsoft 365 with PowerShell eBook, available standalone or as part of the Office 365 for IT Pros eBook bundle.
Construct voronoi diagram on a point cloud
I have a point cloud file in the .pcd format. I want to calculate a Voronoi diagram for this .pcd file. I also have a set of points with x and y coordinates that were extracted from the .pcd file. I want to calculate the Voronoi diagram based on these x and y coordinates. My objective is to divide the point cloud into zones corresponding to these points (x, y). So far, I have written the following code but it seems like there is no connection between the point cloud and x-y coordinates. How can I relate the point cloud and the co ordinates?
ptCloud = pcread("test_obj6.pcd");
x = [ 7.0267 4.8436 4.8767 2.8000];
y = [ 4.2001 4.5947 2.1412 3.2000];
voronoi(x,y)I have a point cloud file in the .pcd format. I want to calculate a Voronoi diagram for this .pcd file. I also have a set of points with x and y coordinates that were extracted from the .pcd file. I want to calculate the Voronoi diagram based on these x and y coordinates. My objective is to divide the point cloud into zones corresponding to these points (x, y). So far, I have written the following code but it seems like there is no connection between the point cloud and x-y coordinates. How can I relate the point cloud and the co ordinates?
ptCloud = pcread("test_obj6.pcd");
x = [ 7.0267 4.8436 4.8767 2.8000];
y = [ 4.2001 4.5947 2.1412 3.2000];
voronoi(x,y) I have a point cloud file in the .pcd format. I want to calculate a Voronoi diagram for this .pcd file. I also have a set of points with x and y coordinates that were extracted from the .pcd file. I want to calculate the Voronoi diagram based on these x and y coordinates. My objective is to divide the point cloud into zones corresponding to these points (x, y). So far, I have written the following code but it seems like there is no connection between the point cloud and x-y coordinates. How can I relate the point cloud and the co ordinates?
ptCloud = pcread("test_obj6.pcd");
x = [ 7.0267 4.8436 4.8767 2.8000];
y = [ 4.2001 4.5947 2.1412 3.2000];
voronoi(x,y) matlab MATLAB Answers — New Questions









