-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.json
More file actions
1 lines (1 loc) · 52.4 KB
/
index.json
File metadata and controls
1 lines (1 loc) · 52.4 KB
1
[{"content":"Welcome to our blog! We are Sandra and Emily, two passionate IT people who love everything about IT. This blog is our journey through the ever-evolving world of technology. Here, we share interesting findings, valuable knowledge we\u0026rsquo;ve gathered over the years, and content we discover along the way.\nHappy reading!\n","date":null,"permalink":"https://samily.it/","section":"","summary":"","title":""},{"content":"","date":null,"permalink":"https://samily.it/posts/","section":"Posts","summary":"","title":"Posts"},{"content":"","date":null,"permalink":"https://samily.it/categories/","section":"Categories","summary":"","title":"Categories"},{"content":"If one side of your Beyerdynamic headphones—like the DT 990 Pro, DT 770, or DT 880—stops working or the cable gets damaged, here’s how you can fix it:\nReplacing a Damaged Driver #If your driver is dead it’s fixable! You need:\nA replacement driver (e.g., Beyerdynamic DT 990 Pro 250-ohm driver) A soldering iron A multimeter Screwdrivers 1. Take Apart Your Headphones # Gently pull off the ear pads with your fingers. Use a flat screwdriver to remove the plastic ring holding everything in place. Remove the foam filter and carefully take out the speaker housing. 2. Test the Driver # Use a multimeter to check if the wiring is working Ohm (Ω). If it shows nothing, it’s dead and needs replacing. You can also measure the driver itself by changing your multimeter to Ohm (Ω) and putting one tip on the far left contact and the other on the far right contact. You should get the Ohm of your driver (e.g. 32ohms, 250ohms or 600ohms) 3. Install the New Driver # Blue Wire = Left channel\nRed wire = Right channel\nCopper wire = Ground\nOr if newer Color:\nWhite Wire = Left channel\nRed wire = Right channel\nBlack wire = Ground\nBe careful when soldering - if you heat it too long you will damage the driver inside. Solder hot and fast!\nAlso check out this Picture Guide\nCredits: https://www.reddit.com/user/Not_Finn/\nVariants of Beyerdynamic Drivers #Beyerdynamic headphones come with different driver variants. Beyerdynamic drivers do not have consistent polarity within a model. Knowing the type you have is essential for repairs or modifications:\n3-Pin Drivers:\nThese are simpler drivers with three connection points. One side is marked to indicate the positive terminal. 6-Pin Drivers with 0\u0026hellip;1 Markings:\nMarked/printed with \u0026ldquo;0\u0026rdquo; and \u0026ldquo;1\u0026rdquo; on the back. 0 = Ground/Negative, 1 = Positive. 6-Pin Drivers Without Markings:\nOne side is marked to indicate the positive terminal. Avoiding Phase Issues #If you accidentally switch the \u0026ldquo;0\u0026rdquo; and \u0026ldquo;1\u0026rdquo; connections on the 6-pin drivers, your headphones will be out of phase. This will make the sound feel unnatural or “not right.” Use this phase test video to verify and correct the wiring if needed.\n4. Reassemble Your Headphones # Place the new driver back into its housing. Make sure it fits snugly into the groove. Put the foam filter back on top, secure it with the plastic ring, and slide the ear pads back into place. Damaged Cables? #If your issue is with a broken cable, here’s how to fix it:\nThe headphone jack has three parts:\nTip = Left channel (blue wire) Ring = Right channel (red wire) Sleeve = Ground (copper wire) Or if newer Color:\nWhite Wire = Left channel Red wire = Right channel Black wire = Ground Simply replace or re-solder any broken wires back to their correct positions.\nExtra Resources #Check out this awesome Guide to switch to XLR Cable for step-by-step instructions on adding a mini-XLR mod. Picture Guide\nCredits: https://www.reddit.com/user/Not_Finn/\n","date":"11 February 2025","permalink":"https://samily.it/posts/fix-beyerdynamic-headphones/","section":"Posts","summary":"","title":"Repair Beyerdynamics DT-880 Headphones Left/Right Speaker not working/quiet"},{"content":"","date":null,"permalink":"https://samily.it/tags/","section":"Tags","summary":"","title":"Tags"},{"content":"","date":null,"permalink":"https://samily.it/categories/tech/","section":"Categories","summary":"","title":"Tech"},{"content":"","date":null,"permalink":"https://samily.it/tags/tech/","section":"Tags","summary":"","title":"Tech"},{"content":"","date":null,"permalink":"https://samily.it/author/","section":"Author","summary":"","title":"Author"},{"content":"","date":null,"permalink":"https://samily.it/author/emily/","section":"Author","summary":"","title":"Emily"},{"content":"","date":null,"permalink":"https://samily.it/tags/home-assistant/","section":"Tags","summary":"","title":"Home-Assistant"},{"content":"When migrating or restoring a Zigbee network in Zigbee2MQTT, you might encounter the following error:\nError: Network commissioning timed out - most likely network with the same panId or extendedPanId already exists nearby This problem often stems from conflicts in your Zigbee network settings, particularly with the PAN ID, Extended PAN ID, or Network Key. It can also occur if devices from a previous network are still active. Below is a step-by-step guide to help resolve this issue.\nCommon Causes # Starting Zigbee2MQTT before migrating the configuration:\nIf the coordinator initializes a new network, it may clash with an existing one nearby.\nModifying and reverting network identifiers (PAN ID, Extended PAN ID, or Network Key):\nInconsistencies between the coordinator and connected devices can cause the error.\nActive Zigbee routers from the previous network:\nThese devices might still try to connect using the old network configuration, leading to conflicts.\nSteps to Resolve the Issue #1. Turn Off All Zigbee Routers #Before starting Zigbee2MQTT with a restored backup:\nDisconnect all Zigbee routers (e.g., smart plugs or repeaters) by unplugging them or cutting off their power supply. This step prevents interference during the commissioning process. 2. Restore Your Backup #Ensure you restore these key files from your backup:\ncoordinator_backup.json: Contains the network configuration for the coordinator. database.db: Stores paired device information and states. state.json: Maintains runtime data. Copy these files into your Zigbee2MQTT data directory (e.g., /data/zigbee2mqtt).\n3. Start Zigbee2MQTT # Start Zigbee2MQTT after restoring the backup and monitor the logs for errors. Once it starts successfully, reconnect power to all Zigbee routers. If no devices appear joined after starting Zigbee2MQTT, stop it, reapply the backup files, and restart the service.\n4. Allow Time for Network Stabilization #Zigbee networks may take time to stabilize:\nWait about 10 minutes for routers and end devices to rejoin automatically. If you have lost all hope - or you don\u0026rsquo;t have devices joined yet, you can create a new network with adding the following to your config. Remove old entries for pan_id, ext_pan_id and network_key\nadvanced: pan_id: GENERATE ext_pan_id: GENERATE network_key: GENERATE ","date":"5 January 2025","permalink":"https://samily.it/posts/zigbee2mqtt-migration-issues/","section":"Posts","summary":"","title":"Resolving Zigbee2MQTT Migration Issues: Network Commissioning Timed Out"},{"content":"","date":null,"permalink":"https://samily.it/categories/smart-home/","section":"Categories","summary":"","title":"Smart-Home"},{"content":"","date":null,"permalink":"https://samily.it/tags/zigbee2mqtt/","section":"Tags","summary":"","title":"Zigbee2MQTT"},{"content":"","date":null,"permalink":"https://samily.it/categories/azure/","section":"Categories","summary":"","title":"Azure"},{"content":"","date":null,"permalink":"https://samily.it/tags/fido2/","section":"Tags","summary":"","title":"FIDO2"},{"content":"","date":null,"permalink":"https://samily.it/tags/hardware-token/","section":"Tags","summary":"","title":"Hardware Token"},{"content":"Overview #FIDO2 security keys offer a secure and convenient passwordless authentication method. For organizations where employees either lack company-issued phones or prefer not to use personal devices for authentication, this hardware token becomes a viable alternative. Here\u0026rsquo;s how to implement FIDO2/YubiKey as the sole authentication method in Microsoft Entra ID.\nWithout configuring a Self-Service Password Reset (SSPR) exception, users relying solely on a FIDO2/Yubikey will be prompted to add the Microsoft Authenticator.\nA solution for this can be found in the chapter: Handling SSPR\nImplementation Steps #Enable FIDO2 Authentication\nNavigate to the Microsoft Entra Admin Center. Go to Authentication methods under the Protection section. Enable Passkey (FIDO2) for your target users. Configure Temporary Access Pass (TAP)\nEnable TAP in Authentication Methods Settings. Configure the appropriate lifetime duration (1 to 24 hours). Use TAP for initial FIDO2 registration and recovery scenarios. User Registration Process\nAdmin generates a Temporary Access Pass (TAP) for the user. The user logs in at mysignins.microsoft.com/security-info by using the TAP. The user registers their FIDO2 security key. Security Benefits # Phishing-resistant authentication No dependency on mobile devices Reduced password-related IT support Compatible with Windows 10/11 devices and web applications This setup eliminates the need for Microsoft Authenticator while maintaining robust security through hardware-based authentication tokens.\nHandling SSPR # When a user relies solely on a FIDO2 Key, it is essential to exclude them from Self-Service Password Reset (SSPR) configurations. Since only one include group can be specified for SSPR, you must create a group containing all users except those who exclusively use FIDO2 keys. For example, if you have 100 users and need to exclude 2, you must create a group of the remaining 98 users.\nYou have multiple possibilities in creating your SSPR Group:\nCreate a dynamic group, exclude any user who has a specific attribute and include everyone else. Disadvantage: For more than a handful people it\u0026rsquo;s a lot of manual work. Create an Azure Automation that fills a group with users that are allowed to use SSPR: Select all users excluding those that have a FIDO2 hardware token.\nDisadvantage: New users will be prompted to add the authenticator until the script runs Select Users that have one or two SSPR compatible Authentication methods\nDisadvantage: Users that do not have an authentication method registered, will not get prompted to register one. These options all require that you need to have a Conditional Access Policy that targets all users for MFA enrollment because of the following:\nEnabling the \u0026ldquo;Require users to register when signing in?\u0026rdquo; option only applies to the group specified for SSPR registration. Azure Automation #In this guide we will go with Option:\nSelect Users that have one SSPR compatible Authentication methods\nUse the following Code in your Automation. (Not recommended, but you can also run this script manually) After that add the Group $groupId as SSPR-Enabled Group.\nPrerequisit Modules:\nMicrosoft.Graph Code: #Code can also be found in our Repository: Samily-Scripts\n## Variable Declartion Start ## $clientId = \u0026#34;InsertClientID\u0026#34; $tenantId = \u0026#34;InsertTenantID\u0026#34; $thumbprint = \u0026#34;InsertThumbprint\u0026#34; $groupId = \u0026#34;InsertGroupID\u0026#34; # Replace with the Object ID of your target group # Insert Enabled Authentication Methods $authMethodsToCheck = @(\u0026#34;#microsoft.graph.microsoftAuthenticatorAuthenticationMethod\u0026#34;, \u0026#34;#microsoft.graph.smsAuthenticationMethod\u0026#34;, \u0026#34;#microsoft.graph.emailAuthenticationMethod\u0026#34;) #Optional UPN Filter #$UPNs = @(\u0026#34;xyz.com\u0026#34;, # \u0026#34;abc.com\u0026#34;) ## Variable Declartion End ## Connect-MgGraph -ClientId $clientId -TenantId $tenantId -CertificateThumbprint $thumbprint -NoWelcome # Get all users in Azure AD $users = Get-MgUser -All -ConsistencyLevel eventual -Property Id,UserPrincipalName $totalUsers = $users.Count # Total number of users for progress tracking $currentUser = 0 # Counter for processed users Write-Output \u0026#34;Getting Users\u0026#34; # Initialize list for eligible users $eligibleUsers = @() Write-Output \u0026#34;Checking Users - Outputting Status in 50 User Increments\u0026#34; # Iterate through each user and check their authentication methods foreach ($user in $users) { $currentUser++ if ($currentUser % 50 -eq 0) { Write-Output \u0026#34;Checking user $currentUser/$totalUsers\u0026#34; } $eligible = $true #Optional UPN Filter # foreach ($UPN in $UPNs) { # if ($user.UserPrincipalName -like \u0026#34;*$UPN\u0026#34;) { # $eligible = $false # break # } # } if ($eligible) { try { # Retrieve authentication methods for the user $authMethods = Get-MgUserAuthenticationMethod -UserId $user.Id -ErrorAction SilentlyContinue # Extract method types $authMethodTypes = $authMethods | ForEach-Object { $_.AdditionalProperties[\u0026#34;@odata.type\u0026#34;] } # Check if user has at least one of the allowed authentication methods $hasAllowedAuthMethod = $false foreach ($method in $authMethodTypes) { if ($authMethodsToCheck -contains $method) { $hasAllowedAuthMethod = $true break } } # Add user to eligible list only if they have an allowed method if ($hasAllowedAuthMethod) { $eligibleUsers += $user.Id } } catch { Write-Output \u0026#34;Error processing user $($user.UserPrincipalName): $_\u0026#34; continue } } } Write-Output \u0026#34;`nFinished checking users.\u0026#34; # Add eligible users to the group, with progress updates $totalEligibleUsers = $eligibleUsers.Count # Total number of eligible users $currentEligibleUser = 0 # Counter for added eligible users $newMembersAdded = 0 foreach ($userId in $eligibleUsers) { $currentEligibleUser++ # Update progress on the same line for adding users to the group Write-Output -NoNewline \u0026#34;`rAdding eligible user $currentEligibleUser/$totalEligibleUsers to the group\u0026#34; try { # Check if user is already a member of the group $isMember = Get-MgGroupMember -GroupId $groupId -All | Where-Object { $_.Id -eq $userId } if (-not $isMember) { New-MgGroupMember -GroupId $groupId -DirectoryObjectId $userId $newMembersAdded++ } } catch { Write-Output \u0026#34;Could not add $userId to Group.\u0026#34; continue } } Write-Output \u0026#34;`n`n----------------------------------------`n`n\u0026#34; Write-Output \u0026#34;Process finished - Checked $totalUsers users - $($eligibleUsers.Count) users were eligible - Added $newMembersAdded new members to group\u0026#34; ","date":"20 December 2024","permalink":"https://samily.it/posts/fido-key-azure/","section":"Posts","summary":"","title":"Implementing FIDO2 / YubiKey in Microsoft Entra ID Without Mobile Authenticator and handling Self-Service-Password-Reset (SSPR)"},{"content":"Unfortunately, in OPNsense, it is not possible to set the TTL (Time to Live) for Dynamic DNS, which means DNS entries always have a TTL of 10800 seconds or 3 hours. This limitation undermines the purpose of Dynamic DNS, in my opinion.\nTo address this, I present a short script that sets the TTL to 300 seconds at system startup. The script adds the line ttl=300 \\ after each line that begins with password=. We create the script using Syshook with the \u0026ldquo;Early\u0026rdquo; start option, as described in the OPNsense Documentation Autorun.\nScript #We create the script using Syshook with the \u0026ldquo;Early\u0026rdquo; start option as described in the OpnSense Documentation Autorun.\nThe subdirectory after rc.syshook.d indicates when the script will be executed.\nearly: means that a script is started before the system network start. Instructions # DDClient Backup: cp /usr/local/etc/ddclient.conf /usr/local/etc/ddclient.conf.bak Create Script File: vi /usr/local/etc/rc.syshook.d/early/50-add_ttl.sh Insert Script Content: #!/bin/sh # Define the file path DDCLIENT_CONF=\u0026#34;/usr/local/etc/ddclient.conf\u0026#34; # Use sed to insert \u0026#39;ttl=300 \\\u0026#39; followed by a newline after any line starting with \u0026#39;password=\u0026#39; sed -i \u0026#39;\u0026#39; \u0026#39;/^password=/a\\ ttl=300 \\\\\\ \u0026#39; \u0026#34;$DDCLIENT_CONF\u0026#34; Make Script Executable: chmod +x /usr/local/etc/rc.syshook.d/early/50-add_ttl.sh Test Script: Manually execute the script to ensure it works:\n/usr/local/etc/rc.syshook.d/early/50-add_ttl.sh Verify DDClient Config: Check if the line ttl=300 \\ has been correctly added.\nvi /usr/local/etc/ddclient.conf This is a very basic script, and I would love to hear your suggestions for improvements in the comments! 😊\n","date":"11 September 2024","permalink":"https://samily.it/posts/opnsense-ddclient-ttl/","section":"Posts","summary":"","title":"Adjusting the Time-To-Live (TTL) in DynamicDNS (os-ddclient) Configuration in OPNsense"},{"content":"","date":null,"permalink":"https://samily.it/tags/ddclient/","section":"Tags","summary":"","title":"Ddclient"},{"content":"","date":null,"permalink":"https://samily.it/tags/dynamic-dns/","section":"Tags","summary":"","title":"Dynamic DNS"},{"content":"","date":null,"permalink":"https://samily.it/categories/networking/","section":"Categories","summary":"","title":"Networking"},{"content":"","date":null,"permalink":"https://samily.it/tags/opnsense/","section":"Tags","summary":"","title":"OPNsense"},{"content":"","date":null,"permalink":"https://samily.it/categories/linux/","section":"Categories","summary":"","title":"Linux"},{"content":"","date":null,"permalink":"https://samily.it/tags/samsung/","section":"Tags","summary":"","title":"Samsung"},{"content":"Samsung is notorious for not releasing firmware for their Enterprise SSDs. But here we are - let\u0026rsquo;s get to updating!\nDownloads: #GitHub Firmware Downloads here\nFor Example PM983: # PM983 U.2 Firmware starts with EDAxxxxx eg. EDA5702Q\n(SAMSUNG MZ1LB3T8HMLA-00007) PM983 M.2 Firmware starts with EDBxxxxx eg. EDB7602Q\nDon\u0026rsquo;t flash the wrong Firmware!\nModel Codes for Samsung PM983: # M.2 Models:\nSAMSUNG MZ1LB3T8HMLA-00007 (3.84 TB) SAMSUNG MZ1LB1T9HALS-00007 (1.92 TB) SAMSUNG MZ1LB960HAJQ-00007 (960 GB) U.2 Models:\nSAMSUNG MZQLB7T6HMLA-00007 (7.68 TB) SAMSUNG MZQLB3T8HALS-00007 (3.84 TB) SAMSUNG MZQLB1T9HAJR-00007 (1.92 TB) SAMSUNG MZQLB960HAJR-00007 (960 GB) Identify the correct SSD: #To identify your SSD, use the nvme list command to display all NVMe devices connected to your system. Look for the device path, model number, and firmware version.\n$ nvme list Node Generic SN Model Namespace Usage Format FW Rev --------------------- --------------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- -------- /dev/nvme0n1 /dev/ng0n1 xxxxxxxxxx SAMSUNG MZ1LB3T8HMLA-00007 1 179.77 GB / 3.84 TB 4 KiB + 0 B EDB7602Q We have our SSD in /dev/nvme0n1. Let\u0026rsquo;s check some SSD information.\n$ nvme id-ctrl -H /dev/nvme0 $ nvme id-ctrl -H /dev/nvme0n1 NVME Identify Controller: vid : 0x144d ssvid : 0x144d sn : xxxxxxxxxxxxx mn : SAMSUNG MZ1LB3T8HMLA-00007 fr : EDB7602Q rab : 2 ieee : 002538 cmic : 0 [3:3] : 0 ANA not supported [2:2] : 0 PCI [1:1] : 0 Single Controller [0:0] : 0 Single Port mdts : 9 cntlid : 0x4 ver : 0x10200 rtd3r : 0x7a1200 rtd3e : 0x7a1200 oaes : 0 [31:31] : 0 Discovery Log Change Notice Not Supported [27:27] : 0 Zone Descriptor Changed Notices Not Supported [15:15] : 0 Normal NSS Shutdown Event Not Supported [14:14] : 0 Endurance Group Event Aggregate Log Page Change Notice Not Supported [13:13] : 0 LBA Status Information Notices Not Supported [12:12] : 0 Predictable Latency Event Aggregate Log Change Notices Not Supported [11:11] : 0 Asymmetric Namespace Access Change Notices Not Supported [9:9] : 0 Firmware Activation Notices Not Supported [8:8] : 0 Namespace Attribute Changed Event Not Supported ctratt : 0 [19:19] : 0 Flexible Data Placement Not Supported [15:15] : 0 Extended LBA Formats Not Supported [14:14] : 0 Delete NVM Set Not Supported [13:13] : 0 Delete Endurance Group Not Supported [12:12] : 0 Variable Capacity Management Not Supported [11:11] : 0 Fixed Capacity Management Not Supported [10:10] : 0 Multi Domain Subsystem Not Supported [9:9] : 0 UUID List Not Supported [8:8] : 0 SQ Associations Not Supported [7:7] : 0 Namespace Granularity Not Supported [6:6] : 0 Traffic Based Keep Alive Not Supported [5:5] : 0 Predictable Latency Mode Not Supported [4:4] : 0 Endurance Groups Not Supported [3:3] : 0 Read Recovery Levels Not Supported [2:2] : 0 NVM Sets Not Supported [1:1] : 0 Non-Operational Power State Permissive Not Supported [0:0] : 0 128-bit Host Identifier Not Supported rrls : 0 cntrltype : 0 [7:2] : 0 Reserved [1:0] : 0 Controller type not reported fguid : 00000000-0000-0000-0000-000000000000 crdt1 : 0 crdt2 : 0 crdt3 : 0 nvmsr : 0 [1:1] : 0 NVM subsystem Not part of an Enclosure [0:0] : 0 NVM subsystem Not part of an Storage Device vwci : 0 [7:7] : 0 VPD Write Cycles Remaining field is Not valid. [6:0] : 0 VPD Write Cycles Remaining mec : 0 [1:1] : 0 NVM subsystem Not contains a Management Endpoint on a PCIe port [0:0] : 0 NVM subsystem Not contains a Management Endpoint on an SMBus/I2C port oacs : 0xf [10:10] : 0 Lockdown Command and Feature Not Supported [9:9] : 0 Get LBA Status Capability Not Supported [8:8] : 0 Doorbell Buffer Config Not Supported [7:7] : 0 Virtualization Management Not Supported [6:6] : 0 NVMe-MI Send and Receive Not Supported [5:5] : 0 Directives Not Supported [4:4] : 0 Device Self-test Not Supported [3:3] : 0x1 NS Management and Attachment Supported [2:2] : 0x1 FW Commit and Download Supported [1:1] : 0x1 Format NVM Supported [0:0] : 0x1 Security Send and Receive Supported acl : 7 aerl : 3 frmw : 0x17 [5:5] : 0 Multiple FW or Boot Update Detection Not Supported [4:4] : 0x1 Firmware Activate Without Reset Supported [3:1] : 0x3 Number of Firmware Slots [0:0] : 0x1 Firmware Slot 1 Read-Only lpa : 0x3 [6:6] : 0 Telemetry Log Data Area 4 Not Supported [5:5] : 0 LID 0x0, Scope of each command in LID 0x5, 0x12, 0x13 Not Supported [4:4] : 0 Persistent Event log Not Supported [3:3] : 0 Telemetry host/controller initiated log page Not Supported [2:2] : 0 Extended data for Get Log Page Not Supported [1:1] : 0x1 Command Effects Log Page Supported [0:0] : 0x1 SMART/Health Log Page per NS Supported elpe : 63 [7:0] : 63 (0\u0026#39;s based) Error Log Page Entries (ELPE) npss : 0 [7:0] : 0 (0\u0026#39;s based) Number of Power States Support (NPSS) avscc : 0x1 [0:0] : 0x1 Admin Vendor Specific Commands uses NVMe Format apsta : 0 [0:0] : 0 Autonomous Power State Transitions Not Supported wctemp : 360 [15:0] : 87°C (360 Kelvin) Warning Composite Temperature Threshold (WCTEMP) cctemp : 361 [15:0] : 88°C (361 Kelvin) Critical Composite Temperature Threshold (CCTEMP) mtfa : 0 hmpre : 0 hmmin : 0 tnvmcap : 3,840,755,982,336 [127:0] : 3,840,755,982,336 Total NVM Capacity (TNVMCAP) unvmcap : 0 [127:0] : 0 Unallocated NVM Capacity (UNVMCAP) rpmbs : 0 [31:24]: 0 Access Size [23:16]: 0 Total Size [5:3] : 0 Authentication Method [2:0] : 0 Number of RPMB Units edstt : 0 dsto : 0 fwug : 0 kas : 0 hctma : 0 [0:0] : 0 Host Controlled Thermal Management Not Supported mntmt : 0 [15:0] : -273°C (0 Kelvin) Minimum Thermal Management Temperature (MNTMT) mxtmt : 0 [15:0] : -273°C (0 Kelvin) Maximum Thermal Management Temperature (MXTMT) sanicap : 0 [31:30] : 0 Additional media modification after sanitize operation completes successfully is not defined [29:29] : 0 No-Deallocate After Sanitize bit in Sanitize command Supported [2:2] : 0 Overwrite Sanitize Operation Not Supported [1:1] : 0 Block Erase Sanitize Operation Not Supported [0:0] : 0 Crypto Erase Sanitize Operation Not Supported hmminds : 0 hmmaxd : 0 nsetidmax : 0 endgidmax : 0 anatt : 0 anacap : 0 [7:7] : 0 Non-zero group ID Not Supported [6:6] : 0 Group ID does change [4:4] : 0 ANA Change state Not Supported [3:3] : 0 ANA Persistent Loss state Not Supported [2:2] : 0 ANA Inaccessible state Not Supported [1:1] : 0 ANA Non-optimized state Not Supported [0:0] : 0 ANA Optimized state Not Supported anagrpmax : 0 nanagrpid : 0 pels : 0 domainid : 0 megcap : 0 sqes : 0x66 [7:4] : 0x6 Max SQ Entry Size (64) [3:0] : 0x6 Min SQ Entry Size (64) cqes : 0x44 [7:4] : 0x4 Max CQ Entry Size (16) [3:0] : 0x4 Min CQ Entry Size (16) maxcmd : 0 nn : 1 oncs : 0x1f [8:8] : 0 Copy Not Supported [7:7] : 0 Verify Not Supported [6:6] : 0 Timestamp Not Supported [5:5] : 0 Reservations Not Supported [4:4] : 0x1 Save and Select Supported [3:3] : 0x1 Write Zeroes Supported [2:2] : 0x1 Data Set Management Supported [1:1] : 0x1 Write Uncorrectable Supported [0:0] : 0x1 Compare Supported fuses : 0 [0:0] : 0 Fused Compare and Write Not Supported fna : 0x4 [3:3] : 0 Format NVM Broadcast NSID (FFFFFFFFh) Supported [2:2] : 0x1 Crypto Erase Supported as part of Secure Erase [1:1] : 0 Crypto Erase Applies to Single Namespace(s) [0:0] : 0 Format Applies to Single Namespace(s) vwc : 0 [2:1] : 0 Support for the NSID field set to FFFFFFFFh is not indicated [0:0] : 0 Volatile Write Cache Not Present awun : 127 awupf : 0 icsvscc : 1 [0:0] : 0x1 NVM Vendor Specific Commands uses NVMe Format nwpc : 0 [2:2] : 0 Permanent Write Protect Not Supported [1:1] : 0 Write Protect Until Power Supply Not Supported [0:0] : 0 No Write Protect and Write Protect Namespace Not Supported acwu : 0 ocfs : 0 [1:1] : 0 Controller Copy Format 1h Not Supported [0:0] : 0 Controller Copy Format 0h Not Supported sgls : 0 [15:8] : 0 SGL Descriptor Threshold [1:0] : 0 Scatter-Gather Lists Not Supported mnan : 0 maxdna : 0 maxcna : 0 subnqn : ioccsz : 0 iorcsz : 0 icdoff : 0 fcatt : 0 [0:0] : 0 Dynamic Controller Model msdbd : 0 ofcs : 0 [0:0] : 0 Disconnect command Not Supported ps 0 : mp:8.00W operational enlat:0 exlat:0 rrt:0 rrl:0 rwt:0 rwl:0 idle_power:- active_power:- active_power_workload:- Important Infos #From the output of the nvme id-ctrl command, we can gather all infos we need. For example:\nmn : SAMSUNG MZ1LB3T8HMLA-00007 fr : EDB7602Q ... frmw : 0x17 [5:5] : 0 Multiple FW or Boot Update Detection Not Supported [4:4] : 0x1 Firmware Activate Without Reset Supported [3:1] : 0x3 Number of Firmware Slots [0:0] : 0x1 Firmware Slot 1 Read-Only From the output of the nvme id-ctrl command, we can gather the model number and firmware information.\n[3:1] : 0x3 =\u0026gt; 3 Firmwareslots\n[0:0] : 0x1 =\u0026gt; Read-Only Firmwareslot - DONT FLASH HERE\nFirst, we need to send the firmware file to the controller SRAM:\n$ nvme fw-download -f EDB7602Q.bin /dev/nvme0 Firmware download success This command uploads the firmware file to the SSD\u0026rsquo;s memory. Next, let\u0026rsquo;s flash our downloaded firmware to slot 2 without activating it:\n$ nvme fw-commit -s 2 -a 0 /dev/nvme0 Success committing firmware action:0 slot:2 -s 2 = Slot 2\n-a 0 = Don\u0026rsquo;t activate it\nAfter successfully flashing, let\u0026rsquo;s activate it:\n$ nvme fw-commit -s 2 -a 2 /dev/nvme0 Success committing firmware action:2 slot:2 Congratulations, you just updated the firmware! Now, shutdown and power-cycle the SSD and hope for the best :)\nHow to align Sectors on the Samsung PM983 #The PM983 can support 4k or 512 sector sizes. Here’s how to switch it to 4k sector size. To check the current sector size, use the nvme id-ns command:\n$ nvme id-ns /dev/nvme0n1 ... lbaf 0 : ms:0 lbads:9 rp:0 lbaf 1 : ms:0 lbads:12 rp:0 (in use) Look for the lbaf (Logical Block Addressing Format) entries: lbaf 0: 512 bytes sector size (lbads:9) lbaf 1: 4k sector size (lbads:12)\nTo switch the sector size, use the nvme format command. Warning: This will format the drive! Backup your data.\nWarning: This formats the drive! Backup your Data $ nvme format /dev/nvme0n1 --lbaf=1 --reset lbaf=x where x is the slot with the lbads:y we want.\nNow, we have switched the sector size to 4k sectors. :)\n","date":"1 August 2024","permalink":"https://samily.it/posts/fw-update-pm983/","section":"Posts","summary":"","title":"Step-by-Step Guide: Firmware Update and Sector Alignment for Samsung PM983 SSD"},{"content":"","date":null,"permalink":"https://samily.it/tags/azure/","section":"Tags","summary":"","title":"Azure"},{"content":"","date":null,"permalink":"https://samily.it/categories/powershell/","section":"Categories","summary":"","title":"PowerShell"},{"content":"","date":null,"permalink":"https://samily.it/tags/powershell/","section":"Tags","summary":"","title":"PowerShell"},{"content":"This blog post will guide you through a PowerShell script that uses the Microsoft Graph PowerShell module to remove user photos in bulk.\nThis can be particularly useful for cleaning up disabled user accounts.\nPrerequisites #Before you begin, ensure you have the following:\nMicrosoft Graph PowerShell Module: Install it by running Install-Module Microsoft.Graph -Force in your PowerShell terminal. Permissions: Ensure you have the necessary permissions to read user profiles and modify user photos. # Import the Microsoft Graph module Import-Module Microsoft.Graph # Connect to Microsoft Graph Connect-MgGraph -Scopes \u0026#34;User.Read.All\u0026#34; # Get all disabled user accounts and output to console $disabledUsers = Get-MgUser -Filter \u0026#34;accountEnabled eq false\u0026#34; -All # Output List of disabled Users $disabledUsers | Format-Table DisplayName, UserPrincipalName, AccountEnabled # Remove user photo for each disabled user foreach ($user in $disabledUsers) { try { Remove-MgUserPhoto -UserId $user.Id -Confirm:$false Write-Output \u0026#34;Removed photo for user: $($user.UserPrincipalName)\u0026#34; } catch { Write-Output \u0026#34;Failed to remove photo for user: $($user.UserPrincipalName). Error: $_\u0026#34; } } # Disconnect from Microsoft Graph Disconnect-MgGraph More Info at Microsoft Learn Hope that helps!\n","date":"30 July 2024","permalink":"https://samily.it/posts/remove-userphoto/","section":"Posts","summary":"","title":"Remove User Photos in Azure in Bulk with Microsoft Graph"},{"content":"Fake Edge App: A PowerShell Script to Create a Fake PWA App #In today\u0026rsquo;s digital world, quick and easy access to specific websites can be incredibly useful. One way to achieve this is by creating a Progressive Web App in Microsoft Edge. However this does not work for every site. For Example Microsoft Forms.\nIn this blog post, I show you a PowerShell script that does just that: it creates a desktop shortcut that opens a specific webpage in a \u0026ldquo;Fake\u0026rdquo; Edge App window.\nOverview of the Script #The script we present here creates a desktop shortcut that opens a specific URL in an Edge window. The window is configured to look like a standalone application, which can be particularly useful for frequently accessed web applications.\nScript Details #Here is the complete code of the script:\n\u0026lt;# .Synopsis Creates a \u0026#34;Fake\u0026#34; Edge App .INPUTS Change $websiteURL, $shortcutPath, $logFile, $icoPath, $icoDestinationPath .OUTPUTS $logFile Path Transcript #\u0026gt; # URL $websiteURL = \u0026#34;google.de\u0026#34; # Get the path to the Public Desktop folder using the special folder identifier $publicDesktopPath = [System.Environment]::GetFolderPath(\u0026#39;CommonDesktopDirectory\u0026#39;) # Define the path to the shortcut $shortcutPath = Join-Path -Path $publicDesktopPath -ChildPath \u0026#39;NameOfLink.lnk\u0026#39; # Remove Old lnk if it exists (For Link Updates with same Link name.) if (Test-Path -Path $shortcutPath) { Remove-Item -Path $shortcutPath -Force Write-Output \u0026#34;Old shortcut removed: $shortcutPath\u0026#34; } else { Write-Output \u0026#34;No existing shortcut found at: $shortcutPath\u0026#34; } # Drop an icon with the .ico extention in the same directory the script will run from. # Define the source and destination paths $icoPath = \u0026#34;NameOfLink.ico\u0026#34; $icoDestinationPath = \u0026#34;$env:ProgramFiles\\Samily\\Icons\\NameOfLink.ico\u0026#34; # Create the destination directory if it does not exist $destinationDir = [System.IO.Path]::GetDirectoryName($icoDestinationPath) if (-not (Test-Path -Path $destinationDir)) { New-Item -ItemType Directory -Force -Path $destinationDir } # Copy the file to the destination Copy-Item -Path $icoPath -Destination $icoDestinationPath -Force # Verify the file was copied if (Test-Path -Path $icoDestinationPath) { Write-Output \u0026#34;File copied successfully to $icoDestinationPath\u0026#34; } else { Write-Output \u0026#34;Failed to copy the file.\u0026#34; } $WshShell = New-Object -comObject WScript.Shell $Shortcut = $WshShell.CreateShortcut(\u0026#34;$shortcutPath\u0026#34;) $Shortcut.TargetPath = \u0026#34;%SystemDrive%\\Windows\\System32\\cmd.exe\u0026#34; $Shortcut.Arguments = \u0026#34;/C start `\u0026#34;`\u0026#34; /min `\u0026#34;%SystemDrive%\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe`\u0026#34; --app=$($websiteURL) --start-windowed\u0026#34; $Shortcut.IconLocation = \u0026#34;$icoDestinationPath\u0026#34; $Shortcut.Save() How the Script Works #The script performs the following steps:\nURL Definition: The URL of the webpage to be opened is stored in the $websiteURL variable. Desktop Path: The path to the public desktop folder is obtained. Shortcut Path: The path where the shortcut will be created is defined. Remove Old Shortcut: If a shortcut with the same name already exists, it is removed. Copy Icon File: An icon file is copied to the destination directory. Create Shortcut: A new shortcut is created that opens the defined URL in an Edge window. Customization Options #The script can be easily customized by changing the following variables:\n$websiteURL: The URL of the webpage to be opened. $shortcutPath: The path where the shortcut will be created. $logFile: The path to the log file. $icoPath and $icoDestinationPath: Paths to the icon file. Conclusion #This PowerShell script provides a simple way to create a desktop shortcut that opens a webpage in a \u0026ldquo;Fake\u0026rdquo; Edge App window. It is particularly useful for users who frequently access specific web applications and want seamless integration into their desktop environment. With a few adjustments, the script can be easily tailored to individual needs.\nAnd best of it: It can be installed as an .intuneWin App.\n","date":"25 July 2024","permalink":"https://samily.it/posts/fake-edge-app/","section":"Posts","summary":"","title":"Fake Edge App: A PowerShell Script to Create a Web App Shortcut"},{"content":"","date":null,"permalink":"https://samily.it/tags/intune/","section":"Tags","summary":"","title":"Intune"},{"content":"About Us #Welcome to our blog! We are Sandra and Emily, two passionate cloud consultants who love everything about IT. This blog is our journey through the ever-evolving world of technology. Here, we share interesting findings, valuable knowledge we\u0026rsquo;ve gathered over the years, and content we discover along the way.\nWho We Are # Sandra: As a nature enthusiast, Sandra finds balance between the digital world and the great outdoors. She enjoys hiking, exploring new trails, and connecting with nature whenever she can. Additionally, Sandra loves cooking, especially making pizza.\nEmily: Alongside her love for IT, Emily is an avid gamer and a tech tinkerer. She has a Proxmox homelab, enjoys experimenting with smart home technologies, and constantly explores new tech gadgets and innovations. Emily also likes playing board games and using Tabletop Simulator.\nOur Approach #Our goal is to make technology more accessible and enjoyable for everyone by providing concise and easy-to-understand content. We focus on sharing short scripts, our experiences, and interesting ideas from our projects.\nJoin us on this exciting journey as we delve into the fascinating world of IT, sharing our passion and expertise along the way.\nHappy reading!\nSandra \u0026amp; Emily\n","date":"1 January 0001","permalink":"https://samily.it/aboutus/","section":"","summary":"","title":""},{"content":"Imprint #Emily Buchner\nAm Gut Vogelsang 3\n46499 Hamminkeln\nContact #Email: emily Ät samily PUNKT it\nEditorial Responsibility #Emily Buchner\nAm Gut Vogelsang 3\n46499 Hamminkeln\nSource: eRecht24\nPrivacy Policy #1. Data Protection at a Glance #General Information #The following information provides a simple overview of what happens to your personal data when you visit this website. Personal data is all data with which you can be personally identified. Detailed information on data protection can be found in our privacy policy listed below.\nData Collection on this Website #Who is responsible for data collection on this website? #The data processing on this website is carried out by the website operator. Their contact details can be found in the section \u0026ldquo;Notice on the responsible party\u0026rdquo; in this privacy policy.\nHow do we collect your data? #Your data is collected on the one hand by you providing it to us. This can be, for example, data that you enter in a contact form. Other data is collected automatically or with your consent by our IT systems when you visit the website. These are mainly technical data (e.g., internet browser, operating system, or time of the page call). The collection of this data happens automatically as soon as you enter this website.\nWhat do we use your data for? #Part of the data is collected to ensure the error-free provision of the website. Other data can be used to analyze your user behavior.\nWhat rights do you have regarding your data? #You have the right at any time to obtain information free of charge about the origin, recipient, and purpose of your stored personal data. You also have the right to request the correction or deletion of this data. If you have given your consent to data processing, you can revoke this consent at any time for the future. You also have the right, under certain circumstances, to request the restriction of the processing of your personal data. Furthermore, you have the right to lodge a complaint with the competent supervisory authority. For this purpose, as well as for further questions on the subject of data protection, you can contact us at any time.\nAnalysis Tools and Third-Party Tools #When you visit this website, your surfing behavior can be statistically evaluated. This is mainly done with so-called analysis programs. Detailed information on these analysis programs can be found in the following privacy policy.\n2. Hosting #External Hosting #This website is hosted externally. The personal data collected on this website is stored on the servers of the hoster. This can include IP addresses, contact requests, meta and communication data, contract data, contact details, names, website accesses, and other data generated via a website. External hosting is carried out for the purpose of fulfilling contracts with our potential and existing customers (Art. 6 para. 1 lit. b GDPR) and in the interest of a secure, fast, and efficient provision of our online offer by a professional provider (Art. 6 para. 1 lit. f GDPR). If a corresponding consent was requested, the processing is carried out exclusively on the basis of Art. 6 para. 1 lit. a GDPR and § 25 para. 1 TTDSG, insofar as the consent includes the storage of cookies or access to information in the user\u0026rsquo;s end device (e.g., device fingerprinting) within the meaning of the TTDSG. The consent can be revoked at any time. Our hoster will only process your data to the extent necessary to fulfill its performance obligations and follow our instructions regarding this data.\nData Collection by the Hoster #Our hoster collects the following data, which your browser transmits in so-called log files:\nIP address Address of the previously visited website (referrer request header) Date and time of the request Time zone difference to Greenwich Mean Time (GMT) Content of the request HTTP status code Transferred data volume Website from which the request comes Information about browser and operating system This data collection is necessary to display our website and to ensure stability and security. This corresponds to our legitimate interest within the meaning of Art. 6 para. 1 sentence 1 lit. f GDPR. There is no tracking, and we do not have direct access to this data.\nHoster and Recipient of Your Data #We use the following hoster to provide our website:\nGitHub Inc. 88 Colin P Kelly Jr St San Francisco, CA 94107 United States\nThis hoster is the recipient of your personal data. This corresponds to our legitimate interest within the meaning of Art. 6 para. 1 sentence 1 lit. f GDPR, not to have to maintain a server in our premises. The server location is the USA. Further information on objection and removal options against GitHub can be found at: GitHub Privacy Statement.\nRights and Deletion #You have the right to object to the processing. Whether the objection is successful must be determined in the context of a balancing of interests. The data will be deleted as soon as the purpose of the processing no longer applies. The processing of the data specified in this section is neither legally nor contractually required. The functionality of the website is not guaranteed without the processing.\nCompliance Measures #GitHub has implemented compliance measures for international data transfers. These apply to all worldwide activities where GitHub processes personal data of individuals in the EU. These measures are based on the EU Standard Contractual Clauses (SCCs). Further information can be found at: GitHub Data Protection Addendum.\n3. General Information and Mandatory Information #Data Protection #The operators of these pages take the protection of your personal data very seriously. We treat your personal data confidentially and in accordance with the statutory data protection regulations and this privacy policy. When you use this website, various personal data are collected. Personal data is data with which you can be personally identified. This privacy policy explains what data we collect and what we use it for. It also explains how and for what purpose this happens. We point out that data transmission on the Internet (e.g., when communicating by email) can have security gaps. A complete protection of data from access by third parties is not possible.\nNotice on the Responsible Party #The responsible party for data processing on this website is:\nEmily Buchner Am Gut Vogelsang 3 46499 Hamminkeln Phone: [Phone number of the responsible party] Email: [Email address of the responsible party]\nThe responsible party is the natural or legal person who alone or jointly with others decides on the purposes and means of processing personal data (e.g., names, email addresses, etc.).\nStorage Duration #Unless a more specific storage period is mentioned within this privacy policy, your personal data will remain with us until the purpose for the data processing no longer applies. If you make a legitimate request for deletion or revoke your consent to data processing, your data will be deleted unless we have other legally permissible reasons for storing your personal data (e.g., tax or commercial law retention periods); in the latter case, the deletion will take place after these reasons no longer apply.\nGeneral Information on the Legal Bases of Data Processing on this Website #If you have consented to data processing, we process your personal data on the basis of Art. 6 para. 1 lit. a GDPR or Art. 9 para. 2 lit. a GDPR, if special data categories according to Art. 9 para. 1 GDPR are processed. In the case of explicit consent to the transfer of personal data to third countries, the data processing is also carried out on the basis of Art. 49 para. 1 lit. a GDPR. If you have consented to the storage of cookies or to the access to information in your end device (e.g., via device fingerprinting), the data processing is additionally carried out on the basis of § 25 para. 1 TTDSG. The consent can be revoked at any time. If your data is required to fulfill a contract or to carry out pre-contractual measures, we process your data on the basis of Art. 6 para. 1 lit. b GDPR. Furthermore, we process your data if this is necessary to fulfill a legal obligation on the basis of Art. 6 para. 1 lit. c GDPR. The data processing can also be carried out on the basis of our legitimate interest according to Art. 6 para. 1 lit. f GDPR. The respective legal bases in each individual case are informed in the following paragraphs of this privacy policy.\nRecipients of Personal Data #In the course of our business activities, we work with various external parties. In some cases, it is also necessary to transfer personal data to these external parties. We only pass on personal data to external parties if this is necessary in the context of contract fulfillment, if we are legally obliged to do so (e.g., transfer of data to tax authorities), if we have a legitimate interest in the transfer according to Art. 6 para. 1 lit. f GDPR, or if another legal basis allows the data transfer. When using processors, we only transfer personal data of our customers on the basis of a valid contract for order processing. In the case of joint processing, a contract for joint processing is concluded.\nRevocation of Your Consent to Data Processing #Many data processing operations are only possible with your explicit consent. You can revoke an already given consent at any time. The legality of the data processing carried out until the revocation remains unaffected by the revocation.\nRight to Object to Data Collection in Special Cases and to Direct Advertising (Art. 21 GDPR) #IF THE DATA PROCESSING IS BASED ON ART. 6 PARA. 1 LIT. E OR F GDPR, YOU HAVE THE RIGHT TO OBJECT TO THE PROCESSING OF YOUR PERSONAL DATA AT ANY TIME FOR REASONS ARISING FROM YOUR PARTICULAR SITUATION; THIS ALSO APPLIES TO PROFILING BASED ON THESE PROVISIONS. THE RESPECTIVE LEGAL BASIS ON WHICH A PROCESSING IS BASED CAN BE FOUND IN THIS PRIVACY POLICY. IF YOU OBJECT, WE WILL NO LONGER PROCESS YOUR AFFECTED PERSONAL DATA UNLESS WE CAN PROVE COMPELLING LEGITIMATE GROUNDS FOR THE PROCESSING THAT OUTWEIGH YOUR INTERESTS, RIGHTS, AND FREEDOMS OR THE PROCESSING SERVES THE ASSERTION, EXERCISE, OR DEFENSE OF LEGAL CLAIMS (OBJECTION ACCORDING TO ART. 21 PARA. 1 GDPR). IF YOUR PERSONAL DATA IS PROCESSED FOR DIRECT ADVERTISING, YOU HAVE THE RIGHT TO OBJECT AT ANY TIME TO THE PROCESSING OF PERSONAL DATA CONCERNING YOU FOR THE PURPOSE OF SUCH ADVERTISING; THIS ALSO APPLIES TO PROFILING, INSOFAR AS IT IS ASSOCIATED WITH SUCH DIRECT ADVERTISING. IF YOU OBJECT, YOUR PERSONAL DATA WILL NO LONGER BE USED FOR THE PURPOSE OF DIRECT ADVERTISING (OBJECTION ACCORDING TO ART. 21 PARA. 2 GDPR).\nRight to Lodge a Complaint with the Competent Supervisory Authority #In the event of violations of the GDPR, the data subjects have the right to lodge a complaint with a supervisory authority, in particular in the member state of their habitual residence, their place of work, or the place of the alleged violation. The right to lodge a complaint exists without prejudice to other administrative or judicial remedies.\nRight to Data Portability #You have the right to have data that we process on the basis of your consent or in fulfillment of a contract automatically processed handed over to you or to a third party in a common, machine-readable format. If you request the direct transfer of the data to another responsible party, this will only be done to the extent technically feasible.\nInformation, Correction, and Deletion #Within the framework of the applicable legal provisions, you have the right at any time to free information about your stored personal data, their origin and recipients, and the purpose of the data processing and, if necessary, a right to correction or deletion of this data. For this purpose, as well as for further questions on the subject of personal data, you can contact us at any time.\nRight to Restriction of Processing #You have the right to request the restriction of the processing of your personal data. For this purpose, you can contact us at any time. The right to restriction of processing exists in the following cases:\nIf you dispute the accuracy of your personal data stored with us, we usually need time to verify this. For the duration of the verification, you have the right to request the restriction of the processing of your personal data. If the processing of your personal data was/is unlawful, you can request the restriction of data processing instead of deletion. If we no longer need your personal data, but you need it to exercise, defend, or assert legal claims, you have the right to request the restriction of the processing of your personal data instead of deletion. If you have lodged an objection according to Art. 21 para. 1 GDPR, a balancing of your and our interests must be carried out. As long as it is not yet clear whose interests prevail, you have the right to request the restriction of the processing of your personal data. If you have restricted the processing of your personal data, this data may – apart from being stored – only be processed with your consent or for the assertion, exercise, or defense of legal claims or for the protection of the rights of another natural or legal person or for reasons of important public interest of the European Union or a member state.\nSSL or TLS Encryption #For security reasons and to protect the transmission of confidential content, such as orders or inquiries that you send to us as the site operator, this site uses SSL or TLS encryption. You can recognize an encrypted connection by the fact that the address line of the browser changes from \u0026ldquo;http://\u0026rdquo; to \u0026ldquo;https://\u0026rdquo; and by the lock symbol in your browser line. If SSL or TLS encryption is activated, the data you transmit to us cannot be read by third parties.\n4. Data Collection on this Website #Request by Email, Phone, or Fax #If you contact us by email, phone, or fax, your request, including all resulting personal data (name, request), will be stored and processed by us for the purpose of processing your request. We do not pass on this data without your consent. The processing of this data is based on Art. 6 para. 1 lit. b GDPR, if your request is related to the fulfillment of a contract or is necessary for the implementation of pre-contractual measures. In all other cases, the processing is based on our legitimate interest in the effective processing of the requests addressed to us (Art. 6 para. 1 lit. f GDPR) or on your consent (Art. 6 para. 1 lit. a GDPR) if this was requested; the consent can be revoked at any time. The data you send to us via contact requests will remain with us until you request us to delete it, revoke your consent to storage, or the purpose for data storage no longer applies (e.g., after your request has been processed). Mandatory statutory provisions – in particular statutory retention periods – remain unaffected.\n5. Plugins and Tools #Font Awesome (Local Hosting) #This site uses Font Awesome for the uniform representation of fonts. Font Awesome is installed locally. There is no connection to servers of Fonticons, Inc. Further information on Font Awesome can be found in the privacy policy for Font Awesome at: https://fontawesome.com/privacy.\n","date":"1 January 0001","permalink":"https://samily.it/impressum/","section":"","summary":"","title":""},{"content":"Page Source #GitHub\nPosts #All the files inside posts directory are licensed under CC BY 4.0. The attribution requirement is only met when:\nThe canonical link is directed towards the original article, e.g. \u0026lt;link rel=\u0026quot;canonical\u0026quot; href=\u0026quot;https://samily.it/posts\u0026quot;/\u0026gt; The following message is displayed above and below the article: This article has been originally published on \u0026lt;a href=\u0026quot;https://samily.it/\u0026quot;\u0026gt;Website of SamilyIT\u0026lt;/a\u0026gt;. Screenshots #All the files inside \u0026lsquo;img/screenshots` directory are copyrighted to SamilyIT. All rights reserved.\nLogos #All the files inside img/logos directory are copyrighted to their respective companies.\nOther files #Files not mentioned in previous paragraphs are licensed under MIT License.\nMIT License #Copyright (c) 2025 Emily\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \u0026ldquo;Software\u0026rdquo;), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \u0026ldquo;AS IS\u0026rdquo;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n","date":"1 January 0001","permalink":"https://samily.it/license/","section":"","summary":"","title":""}]