Here is the video that help me to solve my son Macbook Pro 2019 problem;
Category: Uncategorized
Anything unrelated to defined categories
Sharing a Single Model Across Multiple Child Components in Blazor WebAssembly
There are several effective ways to share a single model (data object) between multiple child components in Blazor WebAssembly. Here are the best approaches:
1. Cascading Parameters (Best for hierarchical components)
<!-- ParentComponent.razor -->
@page "/parent"
<CascadingValue Value="@SharedModel">
<ChildComponent1 />
<ChildComponent2 />
</CascadingValue>
@code {
private MyModel SharedModel { get; set; } = new MyModel();
}
<!-- ChildComponent1.razor -->
@code {
[CascadingParameter]
public MyModel SharedModel { get; set; }
}
<!-- ChildComponent2.razor -->
@code {
[CascadingParameter]
public MyModel SharedModel { get; set; }
}
2. Component Parameters (Best for direct parent-child relationships)
<!-- ParentComponent.razor -->
@page "/parent"
<ChildComponent1 Model="@SharedModel" />
<ChildComponent2 Model="@SharedModel" />
@code {
private MyModel SharedModel { get; set; } = new MyModel();
}
<!-- ChildComponent1.razor -->
@code {
[Parameter]
public MyModel Model { get; set; }
}
<!-- ChildComponent2.razor -->
@code {
[Parameter]
public MyModel Model { get; set; }
}
3. State Management Service (Best for app-wide sharing)
// SharedModelService.cs
public class SharedModelService
{
private MyModel _model = new();
public MyModel Model
{
get => _model;
set
{
_model = value;
NotifyStateChanged();
}
}
public event Action OnChange;
private void NotifyStateChanged() => OnChange?.Invoke();
}
Register the service in Program.cs
:
builder.Services.AddSingleton<SharedModelService>();
Use in components:
@inject SharedModelService ModelService
@code {
protected override void OnInitialized()
{
ModelService.OnChange += StateHasChanged;
}
private void UpdateModel()
{
ModelService.Model.Property = "New Value";
}
}
4. EventCallback Pattern (For parent-child communication)
<!-- ParentComponent.razor -->
@page "/parent"
<ChildComponent1 Model="@SharedModel" ModelChanged="@HandleModelChanged" />
<ChildComponent2 Model="@SharedModel" ModelChanged="@HandleModelChanged" />
@code {
private MyModel SharedModel { get; set; } = new();
private void HandleModelChanged(MyModel updatedModel)
{
SharedModel = updatedModel;
StateHasChanged(); // Refresh all components
}
}
<!-- ChildComponent1.razor -->
@code {
[Parameter]
public MyModel Model { get; set; }
[Parameter]
public EventCallback<MyModel> ModelChanged { get; set; }
private async Task UpdateModel()
{
Model.Property = "New Value";
await ModelChanged.InvokeAsync(Model);
}
}
5. Fluxor/Redux Pattern (For complex state management)
// Install package
dotnet add package Fluxor.Blazor.Web
// Define state
public record MyModelState
{
public MyModel Model { get; init; } = new();
}
// Define actions
public record UpdateModelAction(MyModel Model);
// Create reducer
public static class Reducers
{
[ReducerMethod]
public static MyModelState ReduceUpdateModelAction(MyModelState state, UpdateModelAction action)
=> state with { Model = action.Model };
}
Use in components:
@inject IState<MyModelState> ModelState
@inject IDispatcher Dispatcher
<p>@ModelState.Value.Model.Property</p>
<button @onclick="UpdateModel">Update</button>
@code {
private void UpdateModel()
{
var updatedModel = ModelState.Value.Model with { Property = "New Value" };
Dispatcher.Dispatch(new UpdateModelAction(updatedModel));
}
}
- For simple parent-child relationships: Use Component Parameters
- For deep component trees: Use Cascading Parameters
- For app-wide state: Use State Management Service or Fluxor
- For complex applications: Consider Fluxor/Redux pattern
- Immutable models: When sharing models, consider making them immutable or implementing proper change notifications
Performance Considerations
- Avoid excessive re-rendering by implementing
ShouldRender
- Use
[Parameter] public MyModel Model { get; set; }
carefully as it can cause unnecessary renders - For large models, consider using view models or DTOs instead of full domain models
UBUNTU disk size increase
To increase disk size, first we need to see disk status;
df -h
If it’s a VM, make sure VM has allocated enough space before performing next actions.
Here’s the list of steps for a simple scenario where you have two partitions, /dev/sda1
is an ext4 partition the OS is booted from and /dev/sdb2
is swap. For this exercise we want to remove the swap partition an extend /dev/sda1
to the whole disk.
- As always, make sure you have a backup of your data – since we’re going to modify the partition table there’s a chance to lose all your data if you make a typo, for example.
- Run
sudo fdisk /dev/sda
- use
p
to list the partitions. Make note of the start cylinder of/dev/sda1
- use
d
to delete first the swap partition (2
) and then the/dev/sda1
partition. This is very scary but is actually harmless as the data is not written to the disk until you write the changes to the disk. - use
n
to create a new primary partition. Make sure its start cylinder is exactly the same as the old/dev/sda1
used to have. For the end cylinder agree with the default choice, which is to make the partition to span the whole disk. - use
a
to toggle the bootable flag on the new/dev/sda1
- review your changes, make a deep breath and use
w
to write the new partition table to disk. You’ll get a message telling that the kernel couldn’t re-read the partition table because the device is busy, but that’s ok.
- use
- Reboot with
sudo reboot
. When the system boots, you’ll have a smaller filesystem living inside a larger partition. - The next magic command is
resize2fs
. Runsudo resize2fs /dev/sda1
– this form will default to making the filesystem to take all available space on the partition.
That’s it, we’ve just resized a partition on which Ubuntu is installed, without booting from an external drive.
https://askubuntu.com/questions/116351/increase-partition-size-on-which-ubuntu-is-installed
Why I Switched from 1099 to S Corp (and How It Impacted My Freelance Business)
If you’re a freelancer, you’re likely operating as a 1099 independent contractor. Unfortunately, that also means you’re paying the most taxes possible, have no legal protection, and are perceived as an individual, not a business.
JavaScript Promises
“I Promise a Result!”
“Producing code” is code that can take some time
“Consuming code” is code that must wait for the result
A Promise is an Object that links Producing code and Consuming code
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
https://www.geeksforgeeks.org/promise-vs-callback-in-javascript/